-
Как определить однозначно окно если их 4 и они имеют одно название и отправить этому окну сообщение на эмуляцию кнопки
Процедура эмуляции кнопки
procedure EmulateKey(Wnd: HWND; VKey: Integer);
asm
push 0
push edx
push 0101H //WM_KEYUP
push eax
push 0
push edx
push 0100H //WM_KEYDOWN
push eax
call PostMessage
call PostMessage
end;
// Пример использования:
EmulateKey(Edit1.Handle, VK_RETURN);
Помогите пожалуйста кто может
-
на основании чего принимается решение, какому именно окну надо отправлять сообщение?
-
> Anklav (20.01.2009 10:45:00) [0]
Wnd: HWND; одназначно определяет окно.
-
по нажатию кнопки на пример у меня 4 окна (все называются "Lineage II")
при нажатии Q чтобы происходила эмуляция для первого окна кнопки F1,
при нажатии A эмуляция для второго окна кнопки F1 и т. д.
-
> Wnd: HWND; одназначно определяет окно.
Названия окон одинаковы и он будет производить эмуляцию во всех окнах с таким заголовком
-
> Anklav (20.01.2009 13:21:04) [4]
Откуда ты взял эти окна?
Может надо при создании/появление запоминать их хендлы. Что кроме загововка есть еще у укон.
-
> Откуда ты взял эти окна?
> Может надо при создании/появление запоминать их хендлы.
> Что кроме загововка есть еще у укон.
Окна запускаются обычно, с ехешника.
Если при появлении/создании их отпределать то какаим образом это сделать?
-
> Anklav (20.01.09 14:52) [6]
Ты хочешь сказать, что интересующие тебя окна абсолютно ничем не отличаются ?
Тогда какая разница, в какое из этих окон послать сообщения ?
-
> Ты хочешь сказать, что интересующие тебя окна абсолютно
> ничем не отличаются ?
> Тогда какая разница, в какое из этих окон послать сообщения
> ?
Я и хочу чтобы конкретному окну из этих 4х (например первому по времени запуска) отправлялась эмуляция кнопки F1 по нажатию клавиши Q. А второму окну тот же F1 но по нажитию клавиши A.
Все окна загружены последовательно.
-
Т.е. единственное их отличие - это порядок создания, а больше окна НИЧЕМ не отличаются ?
-
> Anklav (20.01.09 14:52) [6]
> Если при появлении/создании их отпределать то какаим образом
> это сделать?
EnumThreadWindows after WaitForInputIdle, если, конечно,
окна создаются первичным потоком.
В противном случае - EnumWindows with GetWindowThreadProcessId.
А после определения нужного хендла надо SetWindowsHookEx
на создавший его поток, дабы отследить момент разрушения окна.
--
Regards, LVT.
-
> Anklav (20.01.09 10:45)
> Процедура эмуляции кнопки
В печь ее.
--
Regards, LVT.
-
> Leonid Troyanovsky
Спасибо огромное! Буду проверять.
-
> Т.е. единственное их отличие - это порядок создания, а больше
> окна НИЧЕМ не отличаются ?
Я запускаю 4 раза подряд 1 ехешник с игрой. Запускаются 4 окна с одинаковым названием. И нужно их как-то разделить и определенному окну в зависимости о нажатия определенной кнопки отпралять определенное сообщение.
Проблема в том что я незнаю как их разделить, пробовал переименовать поочереди чтобы были разные заголовки, но название заголовка воозвращяется стандартное. (И вообще я пока нуб по Делфи...)
-
При отправлении сообщения окну оно не должно становиться активным
-
> Anklav (20.01.09 20:13) [14]
> При отправлении сообщения окну оно не должно становиться
> активным
Смело полагай, что этот пункт уже выполнен.
--
Regards, LVT.
-
> Я запускаю
Значит после очередного N-го запуска ты волен и можешь получить хэндл нового окна и сохранить как N-й хэндл.
-
> я пока нуб
Нуб - это звучит гордо ?
-
> Нуб - это звучит гордо ?
Нуб это новичок)
а как этот хэндл получить от всех окон и отправлять сообщения конкретным окнам по этоим хэндл'ам?
-
> как этот хэндл получить от всех окон
см. [10]
> отправлять сообщения конкретным окнам
Send/PostMessage