Конференция "WinAPI" » однозначное определение 2+ окон с одним заголовком [D7, WinXP]
 
  • Anklav (20.01.09 10:45) [0]
    Как определить однозначно окно если их 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);

    Помогите пожалуйста кто может
  • Eraser © (20.01.09 11:50) [1]
    на основании чего принимается решение, какому именно окну надо отправлять сообщение?
  • Anatoly Podgoretsky © (20.01.09 13:06) [2]
    > Anklav  (20.01.2009 10:45:00)  [0]

    Wnd: HWND; одназначно определяет окно.
  • Anklav (20.01.09 13:18) [3]
    по нажатию кнопки на пример у меня 4 окна (все называются "Lineage II")
    при нажатии Q чтобы происходила эмуляция для первого окна кнопки F1,
    при нажатии A эмуляция для второго окна кнопки F1 и т. д.
  • Anklav (20.01.09 13:21) [4]

    > Wnd: HWND; одназначно определяет окно.


    Названия окон одинаковы и он будет производить эмуляцию во всех окнах с таким заголовком
  • Anatoly Podgoretsky © (20.01.09 13:48) [5]
    > Anklav  (20.01.2009 13:21:04)  [4]

    Откуда ты взял эти окна?
    Может надо при создании/появление запоминать их хендлы. Что кроме загововка есть еще у укон.
  • Anklav (20.01.09 14:52) [6]

    > Откуда ты взял эти окна?
    > Может надо при создании/появление запоминать их хендлы.
    > Что кроме загововка есть еще у укон.

    Окна запускаются обычно, с ехешника.
    Если при появлении/создании их отпределать то какаим образом это сделать?
  • Сергей М. © (20.01.09 15:14) [7]

    > Anklav   (20.01.09 14:52) [6]


    Ты хочешь сказать, что интересующие тебя окна абсолютно ничем не отличаются ?
    Тогда какая разница, в какое из этих окон послать сообщения ?
  • Anklav (20.01.09 15:23) [8]

    > Ты хочешь сказать, что интересующие тебя окна абсолютно
    > ничем не отличаются ?
    > Тогда какая разница, в какое из этих окон послать сообщения
    > ?

    Я и хочу чтобы конкретному окну из этих 4х (например первому по времени запуска) отправлялась эмуляция кнопки F1 по нажатию клавиши Q. А второму окну тот же F1 но по нажитию  клавиши A.
    Все окна загружены последовательно.
  • Сергей М. © (20.01.09 15:25) [9]
    Т.е. единственное их отличие - это порядок создания, а больше окна НИЧЕМ не отличаются ?
  • Leonid Troyanovsky © (20.01.09 16:21) [10]

    > Anklav   (20.01.09 14:52) [6]

    > Если при появлении/создании их отпределать то какаим образом
    > это сделать?

    EnumThreadWindows after WaitForInputIdle, если, конечно,
    окна создаются первичным потоком.
    В противном случае - EnumWindows with GetWindowThreadProcessId.

    А после определения нужного хендла надо SetWindowsHookEx
    на создавший его поток, дабы отследить момент разрушения окна.

    --
    Regards, LVT.
  • Leonid Troyanovsky © (20.01.09 16:23) [11]

    > Anklav   (20.01.09 10:45)  

    > Процедура эмуляции кнопки

    В печь ее.

    --
    Regards, LVT.
  • Anklav (20.01.09 20:01) [12]

    > Leonid Troyanovsky

    Спасибо огромное! Буду проверять.
  • Anklav (20.01.09 20:10) [13]

    > Т.е. единственное их отличие - это порядок создания, а больше
    > окна НИЧЕМ не отличаются ?

    Я запускаю 4 раза подряд 1 ехешник с игрой. Запускаются 4 окна с одинаковым названием.  И нужно их как-то разделить и определенному окну в зависимости о нажатия определенной кнопки отпралять определенное сообщение.
    Проблема в том что я незнаю как их разделить, пробовал переименовать поочереди чтобы были разные заголовки, но название заголовка воозвращяется стандартное. (И вообще я пока нуб по Делфи...)
  • Anklav (20.01.09 20:13) [14]
    При отправлении сообщения окну оно не должно становиться активным
  • Leonid Troyanovsky © (20.01.09 20:32) [15]

    > Anklav   (20.01.09 20:13) [14]

    > При отправлении сообщения окну оно не должно становиться
    > активным

    Смело полагай, что этот пункт уже выполнен.

    --
    Regards, LVT.
  • Сергей М. © (20.01.09 20:36) [16]

    > Я запускаю


    Значит после очередного N-го запуска ты волен и можешь получить хэндл нового окна и сохранить как N-й хэндл.
  • Сергей М. © (20.01.09 20:37) [17]

    > я пока нуб


    Нуб - это звучит гордо ?
  • Anklav (20.01.09 21:42) [18]

    > Нуб - это звучит гордо ?

    Нуб это новичок)
    а как этот хэндл получить от всех окон и отправлять сообщения конкретным окнам по этоим хэндл'ам?
  • Сергей М. © (21.01.09 08:26) [19]

    > как этот хэндл получить от всех окон


    см. [10]


    > отправлять сообщения конкретным окнам


    Send/PostMessage
 
Конференция "WinAPI" » однозначное определение 2+ окон с одним заголовком [D7, WinXP]
Есть новые Нет новых   [134435   +35][b:0][p:0.001]