[решено] Эмуляции нажатия клавиш в неактивном окне

Аватара пользователя
ZARG-X

[решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение ZARG-X »

Доброго времени суток.



Необходим скрипт который будет удерживать/нажимать (в неактивном окне) клавишу. Имя процесса не меняется, изменяется лишь "Handle" заметил через AutoIt Window Info

Буду рад любой помощи
Аватара пользователя
ZARG-X

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение ZARG-X »

kaster, Благодарю Изображение



Просто я еще даже не новичек в этом деле
Аватара пользователя
ZARG-X

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение ZARG-X »

А что если нужных процесса 2? Как не ошибиться в выборе?
Аватара пользователя
Creat0R

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение Creat0R »

Цитата ZARG-X:



А что если нужных процесса 2?
[решено] Эмуляции нажатия клавиш в неактивном окне




Тогда нужна функция получения Handle окна по процессу:





Код:

Код: Выделить всё

$hWindow = _ProcessGetWindow("Proc.exe", 1)
ControlSend($hWindow, "", "Scintilla1", "{ShiftDown}")
Func _ProcessGetWindow($iPID, $iRet = -1)
    Local $aWinList = WinList(), $aRet[2]
    If IsString($iPID) Then
        $iPID = ProcessExists($iPID)
    EndIf
    For $i = 1 To UBound($aWinList)-1
        If BitAND(WinGetState($aWinList[$i][1]), 2) And WinGetProcess($aWinList[$i][1]) = $iPID Then
            $aRet[0] = $aWinList[$i][0] ;Title
            $aRet[1] = $aWinList[$i][1] ;WinHandle
            If $iRet = 0 Then
                Return $aRet[0]
            EndIf
            If $iRet = 1 Then
                Return $aRet[1]
            EndIf
            Return $aRet
        EndIf
    Next
    Return SetError(1, 0, $aRet)
EndFunc
Аватара пользователя
Creat0R

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение Creat0R »

Ковыряя код всё выглядит красиво, но вот не работает ничего. (даже кнопки рабочими сделать не могу)

Creat0R, поможешь еще раз? Изображение



Собственно вот что нужно..

Изображение

Думаю с окнами понятно, разве что хотелось бы указывание какое окно выбрано (Handle). А вот под "Старт" и "Стоп" залипание клавиши.



Реально такое оживить?
Аватара пользователя
ZARG-X

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение ZARG-X »

Цитата ZARG-X:



Думаю с окнами понятно
[решено] Эмуляции нажатия клавиш в неактивном окне




Нет. Я вообще не понял что нужо делать.




Цитата ZARG-X:



хотелось бы указывание какое окно выбрано (Handle)
[решено] Эмуляции нажатия клавиш в неактивном окне




Handle имеет свойство меняться (после перезапуска приложения), это уникальный идентификатор, на него полагаться нельзя (в смысле на тот что заранее “подсмотрен” в AutoIt Window Info).
Аватара пользователя
Creat0R

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение Creat0R »

Цитата Creat0R:



Handle имеет свойство меняться (после перезапуска приложения)
[решено] Эмуляции нажатия клавиш в неактивном окне




Но ведь и программу можно перезапустить. В дальнешем придется снова выбирать окно (тоже после перезапуска).

Хотя это уже не важно, можно обойтись.




Цитата Creat0R:



Я вообще не понял что нужо делать.
[решено] Эмуляции нажатия клавиш в неактивном окне




Прошу прощения. Мой мозг уже спит без меня.



1. Залипание клавиши.

Нажимаешь кнопку "старт" залипание включено (допустим клавиша f1), нажимаем "стоп" залипание клавиши выключено. Скрипт кнопок тоже нужен.

Можно такое слепить? Изображение



2. Выбор окна.

Нажимаем кнопку "окно" и используя этот код

Код:

Код: Выделить всё

$hWindow = _ProcessGetWindow("Proc.exe", 1)
ControlSend($hWindow, "", "Scintilla1", "{ShiftDown}")
Func _ProcessGetWindow($iPID, $iRet = -1)
    Local $aWinList = WinList(), $aRet[2]
    If IsString($iPID) Then
        $iPID = ProcessExists($iPID)
    EndIf
    For $i = 1 To UBound($aWinList)-1
        If BitAND(WinGetState($aWinList[$i][1]), 2) And WinGetProcess($aWinList[$i][1]) = $iPID Then
            $aRet[0] = $aWinList[$i][0] ;Title
            $aRet[1] = $aWinList[$i][1] ;WinHandle
            If $iRet = 0 Then
                Return $aRet[0]
            EndIf
            If $iRet = 1 Then
                Return $aRet[1]
            EndIf
            Return $aRet
        EndIf
    Next
    Return SetError(1, 0, $aRet)
EndFunc

выбираем нужное нам окно в котором будет залипание клавиши.

Это самое сложное пожалуй.



С моими кривыми руками тут самому ничего не сделать...
Аватара пользователя
ZARG-X

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение ZARG-X »

Цитата ZARG-X:



Но ведь и программу можно перезапустить
[решено] Эмуляции нажатия клавиш в неактивном окне




Я не понял, а как на счёт...


Цитата ZARG-X:



Имя процесса не меняется
[решено] Эмуляции нажатия клавиш в неактивном окне




?




Цитата ZARG-X:



Нажимаешь кнопку "старт" залипание включено (допустим клавиша f1), нажимаем "стоп" залипание клавиши выключено
[решено] Эмуляции нажатия клавиш в неактивном окне




Залипание в целом, или для выбранного окна?
Аватара пользователя
Creat0R

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение Creat0R »

Легче будет при каждом запуске скрипта указывать окно вручную, разумеется при помощи скрипта.




Цитата Creat0R:



Залипание в целом, или для выбранного окна?
[решено] Эмуляции нажатия клавиш в неактивном окне




Для выбранного окна
Аватара пользователя
ZARG-X

Re: [решено] Эмуляции нажатия клавиш в неактивном окне

Сообщение ZARG-X »

Неужели это не осуществить? Очень жаль...
Ответить

Вернуться в «AutoIt»