
20.05.2010, 11:17
|
|
Познающий
Регистрация: 14.10.2007
Сообщений: 47
С нами:
9775862
Репутация:
18
|
|
Сообщение от alexey-m
FlyBird, если не охота ждать то посылай сообщения через PostMessage, так сообщения ставятся в очередь и ты сразу получишь управления после вызова функции, при использовании SendMessage сообщения отправляются на прямую, и тебе придется ждать...
Раз ты проверял все на блокноте то небольшой пример, правда на Delphi
Код:
procedure TFormMain.Button1Click(Sender: TObject);
var
hWnd,hChild: THandle;
begin
// Ещем окно с классом 'Notepad'
hWnd:= FindWindowA('Notepad',nil);
if hWnd<>0 then begin
hChild:= FindWindowExA(hWnd,0,'Edit',nil); // Ищем текстовое поле
if hChild<>0 then begin
SendMessage(hChild, WM_CHAR, Word('-'), 0); // Посылаем символ "-"
PostMessage(hChild, WM_KEYDOWN, VK_RETURN, 0); // Переводим строку
end;
PostMessage(hWnd, WM_KEYDOWN, VK_F5, 0); // Посылаем главному окну о нажатии клавиши F5
end else
ShowMessage('Notepad not found');
end;
Спасибо большое за ответ.
За пару дней до вашего я все же достиг того, что нужно. Помогли на одном форуме. Я что-то совсем про ПОСТ забыл.
Даже был вариант самому себе посылать подтверждение, но потом напомнили про ПОСТ. WipAPI только в инсте проходил и ни шагу дальше.
Пример кода.
Код:
if (hWnd == IntPtr.Zero)
{
MessageBox.Show("Процесс не найден", "FlyBird(Ошибка)");
return;
}
IntPtr hEdit = FindWindowEx(hWnd, IntPtr.Zero, "Edit", "");
if (hEdit == IntPtr.Zero)
{
MessageBox.Show("Not found child", "Error");
return;
}
IntPtr t1 = (IntPtr)ComBoxSelectItem_1;
IntPtr nul = IntPtr.Zero;
//PostMessage(hWnd, WM_KEYUP, t1, nul);
PostMessage(hWnd, WM_KEYDOWN, t1, nul);
Теперь проблема в том, как достучаться до меню сторонний программы и отправить команду на выполнения поункта меню и дальше вбить в TextBox нужные символы и нажать Button.
|
|
|