• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Richedit и Winapi

  • Автор темы Fenomant
  • Дата начала
F

Fenomant

Здраствуйте, у меня следующая проблема, подскажите пжл как её можно решить...
Есть программа в ней RichEdit(1)
Мне надо из другой программы вставить текст в RichEdit(1)

Вопрос. Как можно функцией sendmessage (или любой другой) вставить текст в RichEdit из другой программы.

Остановился покачто на sendmessage(hwnd, WM_PASTE, 0, 0);
Но незнаю как программно скопировать тект в буфер обмена, если кто знает скажите и это.
Заранее спасибо.
 
F

Fenomant

если вот так:
char szText[] = "This is sample Text";
SendMessage(hWnd, WM_SETTEXT, 0, (LPSTR)szText);
На это пишет:
1>.\main.cpp(573) : error C2664: SendMessageW: невозможно преобразовать параметр 4 из 'LPSTR' в 'LPARAM'
p.s. если спросите почему ошибка SendMessageW а в коде SendMessage? - незнаю :)

пробывал вот так:
char szText[] = "This is sample Text";
SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)szText);
этот вариант неработает

ещё пробывал верхние варианты с SendMessageW, так на всякий случай ;) но тоже непомогло

p.s. hWnd найден правельно, проверял командой ShowWindow(hWnd, 0)...

p.s. Незнаете ли из-за чего вот такая ошибка возникает при построении проекта:
1>Проект : error PRJ0002 : Результат ошибки 1 возвращен из "C:\WINDOWS\system32\cmd.exe".
хотя строиться нормально, т.е. на выходе получается рабочий ехе файл...
использую Microsoft VS 2008

вот код, может чем поможет, хотя...

Код:
BOOL Start(){
HWND hwnd, hwndEdit, hwndButton;

hwnd = FindWindowA(LPCSTR("TMain"), NULL);
hwnd = FindWindowExA(hwnd, NULL,LPCSTR("TTePageControl"), NULL);
hwnd = FindWindowExA(hwnd, NULL,LPCSTR("TTeTabSheet"), NULL);
hwnd = FindWindowExA(hwnd, NULL,LPCSTR("TTeHeaderPanel"), NULL);
hwnd = FindWindowExA(hwnd, NULL,LPCSTR("TMyPanelEx"), NULL);
hwndEdit = FindWindowExA(hwnd, NULL,LPCSTR("TRichViewEdit"), NULL);

hwnd = FindWindowExA(hwnd, NULL,LPCSTR("TMyPanelEx"), NULL);
hwnd = FindWindowExA(hwnd, NULL,LPCSTR("TMyPanelEx"), NULL);
hwnd = FindWindowExA(hwnd, NULL,LPCSTR("TMyPanelEx"), NULL);
hwndButton = FindWindowExA(hwnd, NULL,LPCSTR("TTeButton"), NULL);

char szText[] = "This is sample Text";
SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)(LPSTR)szText);

//SendMessage(hwndButton, WM_LBUTTONDOWN,MK_LBUTTON,0);
//SendMessage(hwndButton, WM_LBUTTONUP,MK_LBUTTON,0);
return true;
}

так
Код:
char szText[] = "This is sample Text";
SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)(LPSTR)szText);
тоже непомогает
 
E

European

Во-первых, разберитесь сначала, что означают буквы А и W на конце системных функций, потом можно будет продолжить
 
E

European

Вот... Отлично. А почему Вы пытаетесь использовать оба типа функций? А какая кодировка у Вас в настройках проекта?
 
F

Fenomant

А почему Вы пытаетесь использовать оба типа функций?
ещё пробывал верхние варианты с SendMessageW, так на всякий случай но тоже непомогло
Лишняя проверка неповредит...

А какая кодировка у Вас в настройках проекта?
юникод


1>.\main.cpp(573) : error C2664: SendMessageW: невозможно преобразовать параметр 4 из 'LPSTR' в 'LPARAM'
p.s. если спросите почему ошибка SendMessageW а в коде SendMessage? - незнаю
понял, спс


p.s. непотеме... Чтото или у меня, или у вас с тегами кода туговато (скрин прикрепил) Пользуюсь оперой.
 

Вложения

  • 1.JPG
    1.JPG
    14,1 КБ · Просмотры: 348
E

European

Лишняя проверка неповредит...
Вот в том то и дело, что программист НЕ ДОЛЖЕН указывать явно, какой тип функции использовать. Поэтому удаляйте постфиксы и приводите программу к компилябельному состоянию.
Далее, если вы используете Юникод, то и все строки должны быть в Юникоде. Пример, который я приводил выше, не Юникодовский. Объявите строку вроде:
Код:
TCHAR wText[] = _T("This is sample Text");
и вперед ;)
Желаю удачи!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!