Что нового

Эмуляция нажатия нескольких клавиш с разными задержками в свернутое окно

wzzzup

Новичок
Сообщения
3
Репутация
0
Всем привет!
Немного уточню.

Необходимо в свернутое окно послать нажатия клавиш клавиатуры.
К примеру, их будет 5 шт. Клавиши клавиатуры от 1 до 5 соответственно.
Все нажатия клавиш, допустим, в бесконечным цикле.

Периоды повторного нажатия клавиш
"1" - 1000 мс
"2" - 2500 мс
"3" - 4000 мс
"5" - 1200 мс

Таймер должен быть общий для всех клавиш, при этом будут возникать моменты, когда необходимо в один момент времени нажать 2 клавиши поочередно (например, для клавиш "1" и "3" спустя 4 секунды (должно происходить первое нажатие клавиши "3" и четвертое нажатие клавиши "1"))

Реально ли такое в принципе для языка autoit?
 

axsmak

Знающий
Сообщения
32
Репутация
7
В свёрнутое, пожалуй, никак. А вот в скрытое пожалуйста.
_WinAPI_PostMessage прекрасно шлёт клавиши в свёрнутое/скрытое/неактивное окно, при условии, что известен элемент управления (Au3Info в помощь)
Следующий пример запускает блокнот, сворачивает его и в течении 10 секунд делает то, что вам нужно.

Код:
;$fDebug = True - Включает таймштамп для отладки
;Для бесконечного цикла заменить Sleep(10000) на While 1 WEnd
;Enjoy!
#include <Date.au3>

Global Const $PERIOD1 = 1000
Global Const $PERIOD2 = 2500
Global Const $PERIOD3 = 4000
Global Const $PERIOD4 = 1200
Global Const $PERIOD5 = 3000

Global Const $KEY1 = 0x31 ; 1
Global Const $KEY2 = 0x32 ; 2
Global Const $KEY3 = 0x33 ; 3
Global Const $KEY4 = 0x34 ; 4
Global Const $KEY5 = 0x35 ; 5

Global $g_hWnd, $g_hCtrl, $fDebug = False

Func _Debug()
    If $fDebug Then ControlSend($g_hWnd, "", "Edit1", @LF & _NowTime() & @TAB)
EndFunc

Func _Send1()
    _Debug()
    _WinAPI_PostMessage($g_hCtrl, 0x0100, $KEY1, 0)
EndFunc

Func _Send2()
    _Debug()
    _WinAPI_PostMessage($g_hCtrl, 0x0100, $KEY2, 0)
EndFunc

Func _Send3()
    _Debug()
    _WinAPI_PostMessage($g_hCtrl, 0x0100, $KEY3, 0)
EndFunc

Func _Send4()
    _Debug()
    _WinAPI_PostMessage($g_hCtrl, 0x0100, $KEY4, 0)
EndFunc

Func _Send5()
    _Debug()
    _WinAPI_PostMessage($g_hCtrl, 0x0100, $KEY5, 0)
EndFunc

Run('notepad.exe')

$g_hWnd = WinWait("[CLASS:Notepad; TITLE:Безымянный]", "", 5)
$g_hCtrl = ControlGetHandle($g_hWnd, "", "Edit1")

If Not $g_hWnd Then
    ConsoleWrite('Окно не найдено!')
    Exit
EndIf

WinSetState($g_hWnd, "", @SW_MINIMIZE)

AdlibRegister ("_Send1", $PERIOD1)
AdlibRegister ("_Send2", $PERIOD2)
AdlibRegister ("_Send3", $PERIOD3)
AdlibRegister ("_Send4", $PERIOD4)
AdlibRegister ("_Send5", $PERIOD5)

Sleep(10000)

AdlibUnRegister("_Send1")
AdlibUnRegister("_Send2")
AdlibUnRegister("_Send3")
AdlibUnRegister("_Send4")
AdlibUnRegister("_Send5")

WinSetState($g_hWnd, "", @SW_SHOW)
 
Автор
W

wzzzup

Новичок
Сообщения
3
Репутация
0
Огромное спасибо.

Протестил. Это то, что мне нужно.

Вооружился справкой, буду изучать Ваш код.
 

axsmak

Знающий
Сообщения
32
Репутация
7
PS:
$KEY1 = 0x31 - Виртуальный код клавиши 1
Гуглить по фразе "Виртуальные коды клавиш hex"
 
Автор
W

wzzzup

Новичок
Сообщения
3
Репутация
0
С Блокнотом разобрался. Но что делать, если не известна информация Basic Control Info

Как заставить реагировать на нажатие в этом случае




Добавлено:
Сообщение автоматически объединено:

axsmak сказал(а):
PS:
$KEY1 = 0x31 - Виртуальный код клавиши 1
Гуглить по фразе "Виртуальные коды клавиш hex"

С этим я разобрался. Коды нашел.
 

axsmak

Знающий
Сообщения
32
Репутация
7
wzzzup сказал(а):
что делать, если не известна информация Basic Control Info
0. Убедитесь, что охотитесь не на флешплеер
1. В первую очередь попытаться получить информацию разными способами
  • C:\Program Files (x86)\AutoIt3\Au3Info.exe
  • InqSoft Window Scanner
  • Control Viewer
2. Пробуйте запускать инструмент и целевое окно с разными правами доступа
3. Попытайтесь декомпилировать программу
4. Ловите контрол в OllyDbg

PS: Как игра называется?


Добавлено:
Сообщение автоматически объединено:

Иногда помогает программа Resource Hacker
Открываем исполняемый файл и ищем формы в секции RCData
Скрин во вложении
 

Вложения

  • reshacker.jpg
    reshacker.jpg
    100.8 КБ · Просмотры: 13
Верх