Что нового

[Мышь, клавиатура] Экранная клавиатура и GameGuard

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Столкнулся с необходимостью взаимодействия с игрой, посредством экранной клавиатуры , так как последние ревизии gameguard , стали работать на уровне ядра , при этом параллельно внедрятся во все процессы , поэтому
СontrolSend
Send
отдельные dll (PMX.dll и тп)
перестали справляться со своей задачей.

единственный рабочий вариант,в данный момент экранная клавиатура.

Поэтому хотелось бы узнать есть ли способ программно нажимать, клавиши экранной клавиатуры?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Вероятнее всего, единственная возможность - тыкать в неё мышкой.
 
Автор
L

lirikmel

Продвинутый
Сообщения
226
Репутация
84
просто не могу поверить , что невозможно нажимать программно не отнимая мышь во время работы .Пришла канеш идея использовать 2 мыши :-\.

Теоретически можно управлять одной мышкой непосредственно на уровне драйвера , например PS/2 мышь отсылать на порт с помощью Inout.dll или WinIo.dll. И это работает. http://www.autoitscript.com/forum/topic/121084-io-port-functions-x64-parallel-port-io-keyboard-etc-restore-pc-speaker-beep/ вот если кому интересно. А другой работать спокойно самому.....Но мне кажется что это уже извращение :laugh:


PS. Как оказалось ...не судьба GG перехватывает заодно и все функции DeviceIoControl
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
lirikmel, а если попробовать патчить память процесса GG? Или у него самооборона на высоком уровне?
 

bugaj

Знающий
Сообщения
140
Репутация
11
а GameGuard это что то одна на всех или под каждую конкретную программу свой? Это я к тому, подо что бот то? А то у меня была уже идея эмулировать клаву и мышь прямо в порте, чую что ей не дано сбыться?

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

Интересно имеет какой нибудь смысл воткнуть кабель усб в 2 порта и в 1 писать сигналы, и отправлять их по кабелю во второй и типа там мышка. :shok:

Были такие идеи, но до проверки руки не дошли....

Он же как то отличает настоящую мышку от ненастоящей. На уровне ядра всякие winapi send выставляют отличный от аппаратной мышки флаг (как то так не помню точно но суть примерно такая) и по нему палят эмуляцию. Но в таком случае как работает программная клавиатура вопрос? да и через удаленный рабочий стол кстати тоже работает же.
 
Автор
L

lirikmel

Продвинутый
Сообщения
226
Репутация
84
последние версии Gameguard пошли уже и с x64 драйвером , поэтому раньше проблем и не было , GG просто не функционировал как надо.
насчет эмуляции в порте , не думаю что можно это сделать на autoit. Что касаемо с PS/2 то пример выше, но и такой вариант не проходит в данный момент хотя часто выручал меня с другими анти-чит системами.
Но в таком случае как работает программная клавиатура вопрос?
.у Самого этот вопрос висит , но немогу найти ответ
 

bugaj

Знающий
Сообщения
140
Репутация
11
как на автоите я хз
А вообще вот:
http://www.programmersforum.ru/showthread.php?s=cc7485a78e00fa283e72563d6bdc93a2&t=3636
 
Автор
L

lirikmel

Продвинутый
Сообщения
226
Репутация
84
хмм интресно , почитаю ...с PS/2 клавой и I/O устройствами все довольно просто и Autoit вполне справляется со своей задачей.

Но все таки после недели мыканий, я нашел способ борьбы с GG...как ни странно все просто.Надо запускать игру от ограниченной учетной записи , либо в самой учетке гостя например , в autoit есть прекрасная вещь для этого как
Код:
RunAs
. GG будет работать с ограничениями , при этом GG все равно будет внедрятся во все процессы , но на это у него потребуется время для анализа (например нажатия будут идти около 10 сек.. и все блок), поэтому для работы нашей утилиты придется ее скрыть из видимых процессов...но это я думаю многие знают и как это делается тоже.
 

Flukes

Новичок
Сообщения
10
Репутация
0
Все тоже, но про Фрост.
Экранная клавиатура не работает и при свернутой игре.
А вот тема:
Теоретически можно управлять одной мышкой непосредственно на уровне драйвера , например PS/2 мышь отсылать на порт с помощью Inout.dll или WinIo.dll. И это работает. http://www.autoitscript.com/forum/topic/121084-io-port-functions-x64-parallel-port-io-keyboard-etc-restore-pc-speaker-beep/ вот если кому интересно. А другой работать спокойно
Против Фрост работает, и кстати при наличии всего одной клавиатуры на компе. С клавиатурой разобрался, по примеру в архиве.
Но подскажите как послать, хотя-бы клик, мышкой?
Какие скан-коды у мыши, и в какой порт? тоже 60h или иной?
 
Автор
L

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Но подскажите как послать, хотя-бы клик, мышкой?
Какие скан-коды у мыши, и в какой порт? тоже 60h или иной?
да и не только подскажу но и покажу , в библиотеку я это не стал оформлять так как.....лень приводить все в нормальный вид :-[
Код:
global $key[2]
func wClick($Maram1,$Maram2)
mousemove($Maram1,$Maram2,0)


DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x09 , "byte", 1) ; +key
sleep(300)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
sleep(10)

DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x08 , "byte", 1) ; +key
sleep(30)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
sleep(10)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
Sleep(Random(30,40))


EndFunc


Func wSend($Param1, $Param2 = 300, $Param3="no param")
local $wkey =_GetHexKey($Param1)

Select
	Case $Param3="down"
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", $wkey[0] , "byte", 1) ; +key
Sleep(Random(30,40))
    Return
	Case $Param3="up"
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", $wkey[1], "byte", 1) ; -key
    Sleep(Random(30,40))
	Return
EndSelect

DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", $wkey[0] , "byte", 1) ; +key
Sleep($Param2)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo64.dll", "bool", "SetPortVal", "word", 0x60, "dword", $wkey[1], "byte", 1) ; -key
Sleep(Random(30,40))

EndFunc

Func _GetHexKey($sKey)

	Switch $sKey
        Case "BACKSPACE"
     $key[0] ="0x0E"
	 $key[1] ="0x8E"
        Case "BACKSPACE"
     $key[0] ="0x0E"
	 $key[1] ="0x8E"
           Return $key
		Case "TAB"
	 $key[0] ="0x0F"
	 $key[1] ="0x8F"
           Return $key
       Case "ENTER"
	 $key[0] ="0x1C"
	 $key[1] ="0x9C"
           Return $key
        Case "SHIFT"
	 $key[0] ="0x2A"
	 $key[1] ="0xAA"
           Return $key
        Case "CTRL"
	 $key[0] ="0x1D"
	 $key[1] ="0x9C"
           Return $key
        Case "ALT"
            $key[0] ="0x38"
	 $key[1] ="0xB8"
           Return $key
        Case "PAUSE"
            $key[0] ="E0 1D"
	 $key[1] =" "
           Return $key
        Case "CAPSLOCK"
            $key[0] ="0x3A"
	 $key[1] ="0xBA"
           Return $key
        Case "ESC"
           $key[0] ="0x1"
	 $key[1] ="0x81"
           Return $key
        Case "SPACE"
            $key[0] ="0x39"
	 $key[1] ="0xB9"
           Return $key
        Case "PAGE UP"
            $key[0] ="0xE0 49"
	 $key[1] ="0xC9"
           Return $key
        Case "PAGE DOWN"
            $key[0] ="0xE0 51"
	 $key[1] ="0xD1"
           Return $key
        Case "END"
           $key[0] ="0xE0 4F"
	 $key[1] ="0xCF"
           Return $key
        Case "HOME"
            $key[0] ="0xE0 47"
	 $key[1] ="0xC7"
           Return $key
        Case "LEFT"
            $key[0] ="0xE0 4B"
	 $key[1] ="0xCB"
           Return $key
        Case "UP"
           $key[0] ="0xE0 48"
	 $key[1] ="0xC8"
           Return $key
        Case "RIGHT"
           $key[0] ="0xE0 4D"
	 $key[1] ="0xCD"
           Return $key
        Case "DOWN"
            $key[0] ="0xE0 50"
	 $key[1] ="0xD0"
           Return $key
        Case "PRINT SCREEN"
           $key[0] ="0x37"
	 $key[1] ="0xB7"
           Return $key
        Case "INS"
            $key[0] ="0x52"
	 $key[1] ="0xD2"
           Return $key
        Case "DEL"
            $key[0] ="0x53"
	 $key[1] ="0xD3"
           Return $key
        Case "0"
            $key[0] ="0x0B"
	 $key[1] ="0x8B"
           Return $key
        Case "1"
            $key[0] ="0x2"
	 $key[1] ="0x82"
           Return $key
        Case "2"
           $key[0] ="0x3"
	 $key[1] ="0x83"
           Return $key
        Case "3"
           $key[0] ="0x4"
	 $key[1] ="0x84"
           Return $key
        Case "4"
            $key[0] ="0x5"
	 $key[1] ="0x85"
           Return $key
        Case "5"
           $key[0] ="0x6"
	 $key[1] ="0x86"
           Return $key
        Case "6"
            $key[0] ="0x7"
	 $key[1] ="0x87"
           Return $key
        Case "7"
            $key[0] ="0x8"
	 $key[1] ="0x88"
           Return $key
        Case "8"
           $key[0] ="0x9"
	 $key[1] ="0x89"
           Return $key
        Case "9"
            $key[0] ="0x0A"
	 $key[1] ="0x8A"
           Return $key
        Case "A"
           $key[0] ="0x1E"
	 $key[1] ="0x9F"
           Return $key
        Case "B"
            $key[0] ="0x30"
	 $key[1] ="0xB0"
           Return $key
        Case "C"
           $key[0] ="0x2C"
	 $key[1] ="0xAE"
           Return $key
        Case "D"
            $key[0] ="0x20"
	 $key[1] ="0xA0"
           Return $key
        Case "E"
            $key[0] ="0x12"
	 $key[1] ="0x92"
           Return $key
        Case "F"
            $key[0] ="0x21"
	 $key[1] ="0xA1"
           Return $key
        Case "G"
            $key[0] ="0x22"
	 $key[1] ="0xA2"
           Return $key
        Case "H"
           $key[0] ="0x23"
	 $key[1] ="0xA3"
           Return $key
        Case "I"
            $key[0] ="0x17"
	 $key[1] ="0x97"
           Return $key
        Case "J"
            $key[0] ="0x24"
	 $key[1] ="0xA4"
           Return $key
        Case "K"
            $key[0] ="0x25"
	 $key[1] ="0xA5"
           Return $key
        Case "L"
            $key[0] ="0x26"
	 $key[1] ="0xA6"
           Return $key
        Case "M"
            $key[0] ="0x32"
	 $key[1] ="0xB2"
           Return $key
        Case "N"
            $key[0] ="0x31"
	 $key[1] ="0xB1"
           Return $key
        Case "O"
           $key[0] ="0x18"
	 $key[1] ="0x98"
           Return $key
        Case "P"
            $key[0] ="0x19"
	 $key[1] ="0x99"
           Return $key
        Case "Q"
            $key[0] ="0x10"
	 $key[1] ="0x90"
           Return $key
        Case "R"
            $key[0] ="0x13"
	 $key[1] ="0x93"
           Return $key
        Case "S"
            $key[0] ="0x1F"
	 $key[1] ="0x9F"
           Return $key
        Case "T"
            $key[0] ="0x14"
	 $key[1] ="0x94"
           Return $key
        Case "U"
            $key[0] ="0x16"
	 $key[1] ="0x96"
           Return $key
        Case "V"
           $key[0] ="0x2F"
	 $key[1] ="0xAF"
           Return $key
        Case "W"
            $key[0] ="0x11"
	 $key[1] ="0x91"
           Return $key
        Case "X"
            $key[0] ="0x2D"
	 $key[1] ="0xAD"
           Return $key
        Case "Y"
            $key[0] ="0x15"
	 $key[1] ="0x95"
           Return $key
        Case "Z"
            $key[0] ="0x2C"
	 $key[1] ="0xAC"
           Return $key
        Case "F1"
           $key[0] ="0x3B"
	 $key[1] ="0xBB"
           Return $key
        Case "F2"
            $key[0] ="0x3C"
	 $key[1] ="0xBC"
           Return $key
        Case "F3"
            $key[0] ="0x3D"
	 $key[1] ="0xBD"
           Return $key
        Case "F4"
           $key[0] ="0x3E"
	 $key[1] ="0xBE"
           Return $key
        Case "F5"
            $key[0] ="0x3F"
	 $key[1] ="0xBF"
           Return $key
        Case "F6"
           $key[0] ="0x40"
	 $key[1] ="0xC0"
           Return $key
        Case "F7"
            $key[0] ="0x41"
	 $key[1] ="0xC1"
           Return $key
        Case "F8"
            $key[0] ="0x42"
	 $key[1] ="0xC2"
           Return $key
        Case "F9"
            $key[0] ="0x43"
	 $key[1] ="0xC3"
           Return $key
        Case "F10"
            $key[0] ="0x44"
	 $key[1] ="0xC4"
           Return $key

        Case "NUM LOCK"
            $key[0] ="0x45"
	 $key[1] ="0xC5"
           Return $key
        Case "SCROLL LOCK"
            $key[0] ="0x46"
	 $key[1] ="0xC6"
           Return $key
        Case "LSHIFT"
	 $key[0] ="0x2A"
	 $key[1] ="0xAA"
           Return $key
        Case "RSHIFT"
           $key[0] ="0x36"
	 $key[1] ="0xB6"
           Return $key
         Case "/"
           $key[0] ="0x35"
	 $key[1] ="0xB5"
           Return $key



    EndSwitch
    Return -1
EndFunc   ;==>_GetHexByKey_Switch




Примеры использования :
Код:
]

wSend("e") ; нажать е
wSend("e",100) ;нажать с KeySendDelay в 100мс
wSend("e",100,"down") ; зажать е
wSend("e",100,"up") ; отжать е
wClick(705,717) ; клик левой мыши

;не забываем в начале скрипта 
DllOpen("WinIo64.dll") 
DllCall("WinIo64.dll", "bool", "InitializeWinIo")

;и в конце скрипта
DllCall("WinIo64.dll", "none", "ShutdownWinIo")
DllClose("WinIo64.dll")


Этот пример работает для x64 систем для x32 замените просто везде WinIo64.dll на WinIo.dll
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
lirikmel
У меня что-то не работает, @error после dllcall() возвращает ошибку =1
Хотя я вроде бы инициализировал открытие и закрытие библиотеки
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
lirikmel
И прикрепите WinIo64.dll и WinIo.dll это если не сложно
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
+1
Ни на XP, ни на 7-ке не водятся файлы WinIo*.dll
 
Автор
L

lirikmel

Продвинутый
Сообщения
226
Репутация
84
dll с примерами можно взять здесь http://www.internals.com/

У меня что-то не работает, @error после dllcall() возвращает ошибку =1
Хотя я вроде бы инициализировал открытие и закрытие библиотеки

Посмотрите при инициализации process explorer ом запускается ли WinIO.sys ?

на XP все должно работать без лишних манипуляций , на WIN7 особенно 64 битных версиях может потребоваться отключение цифровой подписи и добавление драйвера вручную
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
lirikmel
У меня Win8 х64, скорее всего нету таких драйверов=) днем постараюсь попробовать с скаченными драйверами из вашей ссылки
 

pussy

Новичок
Сообщения
28
Репутация
3
Можно ли, по средствам это библиотеки двигать курсор?
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Протестил с драйверами из вашей ссылки lirikmel, ошибки теперь не выдает, но и ничего не выходит, ни мышкой действовать ни клавиши симулировать


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

Код:
global $key[2]
Global $sFileD=@ScriptDir&"\WinIO32.dll"
If Not FileExists($sFileD) Then Exit
DllOpen($sFileD)
DllCall($sFileD, "bool", "InitializeWinIo")
__wSend("s")
DllCall($sFileD, "none", "ShutdownWinIo")
DllClose($sFileD)
func __wClick($Maram1,$Maram2)
	mousemove($Maram1,$Maram2,0)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(30)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x09 , "byte", 1) ; +key
	sleep(300)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(30)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x08 , "byte", 1) ; +key
	sleep(30)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD3,  "byte", 1) ; cmd byte
	sleep(10)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", 0x00 , "byte", 1) ; +key
	Sleep(Random(30,40))
EndFunc
Func __wSend($Param1, $Param2 = 300, $Param3="no param")
	local $wkey =_GetHexKey($Param1)
	Select
		Case $Param3="down"
			DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
			sleep(30)
			DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", $wkey[0] , "byte", 1) ; +key
			Sleep(Random(30,40))
			Return
		Case $Param3="up"
			DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
			sleep(30)
			DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", $wkey[1], "byte", 1) ; -key
			Sleep(Random(30,40))
			Return
	EndSelect
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
	sleep(30)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", $wkey[0] , "byte", 1) ; +key
	Sleep($Param2)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x64, "dword", 0xD2,  "byte", 1) ; cmd byte
	sleep(30)
	DllCall($sFileD, "bool", "SetPortVal", "word", 0x60, "dword", $wkey[1], "byte", 1) ; -key
	Sleep(Random(30,40))
EndFunc
Func _GetHexKey($sKey)
    Switch $sKey
        Case "BACKSPACE"
			$key[0] ="0x0E"
			$key[1] ="0x8E"
			Return $key
        Case "BACKSPACE"
			$key[0] ="0x0E"
			$key[1] ="0x8E"
			Return $key
        Case "TAB"
			$key[0] ="0x0F"
			$key[1] ="0x8F"
			Return $key
       Case "ENTER"
			$key[0] ="0x1C"
			$key[1] ="0x9C"
			Return $key
        Case "SHIFT"
			$key[0] ="0x2A"
			$key[1] ="0xAA"
			Return $key
        Case "CTRL"
			$key[0] ="0x1D"
			$key[1] ="0x9C"
			Return $key
        Case "ALT"
            $key[0] ="0x38"
			$key[1] ="0xB8"
			Return $key
        Case "PAUSE"
            $key[0] ="E0 1D"
			$key[1] =" "
			Return $key
        Case "CAPSLOCK"
            $key[0] ="0x3A"
			$key[1] ="0xBA"
			Return $key
        Case "ESC"
			$key[0] ="0x1"
			$key[1] ="0x81"
			Return $key
        Case "SPACE"
            $key[0] ="0x39"
			$key[1] ="0xB9"
			Return $key
        Case "PAGE UP"
            $key[0] ="0xE0 49"
			$key[1] ="0xC9"
			Return $key
        Case "PAGE DOWN"
            $key[0] ="0xE0 51"
			$key[1] ="0xD1"
			Return $key
        Case "END"
			$key[0] ="0xE0 4F"
			$key[1] ="0xCF"
			Return $key
        Case "HOME"
			$key[0] ="0xE0 47"
			$key[1] ="0xC7"
			Return $key
        Case "LEFT"
            $key[0] ="0xE0 4B"
			$key[1] ="0xCB"
			Return $key
        Case "UP"
			$key[0] ="0xE0 48"
			$key[1] ="0xC8"
			Return $key
        Case "RIGHT"
			$key[0] ="0xE0 4D"
			$key[1] ="0xCD"
			Return $key
        Case "DOWN"
            $key[0] ="0xE0 50"
			$key[1] ="0xD0"
			Return $key
        Case "PRINT SCREEN"
			$key[0] ="0x37"
			$key[1] ="0xB7"
			Return $key
        Case "INS"
            $key[0] ="0x52"
			$key[1] ="0xD2"
			Return $key
        Case "DEL"
            $key[0] ="0x53"
			$key[1] ="0xD3"
			Return $key
        Case "0"
            $key[0] ="0x0B"
			$key[1] ="0x8B"
			Return $key
        Case "1"
            $key[0] ="0x2"
			$key[1] ="0x82"
			Return $key
        Case "2"
			$key[0] ="0x3"
			$key[1] ="0x83"
			Return $key
        Case "3"
			$key[0] ="0x4"
			$key[1] ="0x84"
			Return $key
        Case "4"
            $key[0] ="0x5"
			$key[1] ="0x85"
			Return $key
		Case "5"
           $key[0] ="0x6"
			$key[1] ="0x86"
			Return $key
        Case "6"
            $key[0] ="0x7"
			$key[1] ="0x87"
			Return $key
        Case "7"
			$key[0] ="0x8"
			$key[1] ="0x88"
           Return $key
        Case "8"
			$key[0] ="0x9"
			$key[1] ="0x89"
			Return $key
        Case "9"
            $key[0] ="0x0A"
			$key[1] ="0x8A"
			Return $key
        Case "A"
			$key[0] ="0x1E"
			$key[1] ="0x9F"
			Return $key
        Case "B"
            $key[0] ="0x30"
			$key[1] ="0xB0"
			Return $key
        Case "C"
			$key[0] ="0x2C"
			$key[1] ="0xAE"
			Return $key
        Case "D"
            $key[0] ="0x20"
			$key[1] ="0xA0"
			Return $key
        Case "E"
            $key[0] ="0x12"
			$key[1] ="0x92"
			Return $key
        Case "F"
            $key[0] ="0x21"
			$key[1] ="0xA1"
			Return $key
        Case "G"
            $key[0] ="0x22"
			$key[1] ="0xA2"
			Return $key
        Case "H"
			$key[0] ="0x23"
			$key[1] ="0xA3"
			Return $key
        Case "I"
            $key[0] ="0x17"
			$key[1] ="0x97"
			Return $key
        Case "J"
            $key[0] ="0x24"
			$key[1] ="0xA4"
			Return $key
        Case "K"
            $key[0] ="0x25"
			$key[1] ="0xA5"
			Return $key
        Case "L"
            $key[0] ="0x26"
			$key[1] ="0xA6"
			Return $key
        Case "M"
            $key[0] ="0x32"
			$key[1] ="0xB2"
			Return $key
        Case "N"
            $key[0] ="0x31"
			$key[1] ="0xB1"
			Return $key
        Case "O"
			$key[0] ="0x18"
			$key[1] ="0x98"
			Return $key
        Case "P"
            $key[0] ="0x19"
			$key[1] ="0x99"
			Return $key
        Case "Q"
            $key[0] ="0x10"
			$key[1] ="0x90"
			Return $key
        Case "R"
            $key[0] ="0x13"
			$key[1] ="0x93"
			Return $key
        Case "S"
			$key[0] ="0x1F"
			$key[1] ="0x9F"
			Return $key
        Case "T"
            $key[0] ="0x14"
			$key[1] ="0x94"
			Return $key
        Case "U"
            $key[0] ="0x16"
			$key[1] ="0x96"
			Return $key
        Case "V"
			$key[0] ="0x2F"
			$key[1] ="0xAF"
			Return $key
        Case "W"
            $key[0] ="0x11"
			$key[1] ="0x91"
			Return $key
        Case "X"
            $key[0] ="0x2D"
			$key[1] ="0xAD"
			Return $key
        Case "Y"
            $key[0] ="0x15"
			$key[1] ="0x95"
			Return $key
        Case "Z"
            $key[0] ="0x2C"
			$key[1] ="0xAC"
           Return $key
        Case "F1"
			$key[0] ="0x3B"
			$key[1] ="0xBB"
			Return $key
        Case "F2"
            $key[0] ="0x3C"
			$key[1] ="0xBC"
			Return $key
        Case "F3"
            $key[0] ="0x3D"
			$key[1] ="0xBD"
			Return $key
        Case "F4"
			$key[0] ="0x3E"
			$key[1] ="0xBE"
			Return $key
        Case "F5"
            $key[0] ="0x3F"
			$key[1] ="0xBF"
			Return $key
        Case "F6"
			$key[0] ="0x40"
			$key[1] ="0xC0"
			Return $key
        Case "F7"
			$key[0] ="0x41"
			$key[1] ="0xC1"
			Return $key
        Case "F8"
            $key[0] ="0x42"
			$key[1] ="0xC2"
			Return $key
        Case "F9"
            $key[0] ="0x43"
			$key[1] ="0xC3"
			Return $key
        Case "F10"
            $key[0] ="0x44"
			$key[1] ="0xC4"
			Return $key
        Case "NUM LOCK"
            $key[0] ="0x45"
			$key[1] ="0xC5"
			Return $key
        Case "SCROLL LOCK"
            $key[0] ="0x46"
			$key[1] ="0xC6"
			Return $key
        Case "LSHIFT"
			$key[0] ="0x2A"
			$key[1] ="0xAA"
			Return $key
        Case "RSHIFT"
			$key[0] ="0x36"
			$key[1] ="0xB6"
			Return $key
		Case "/"
			$key[0] ="0x35"
			$key[1] ="0xB5"
           Return $key
    EndSwitch
    Return -1
EndFunc

Не работает
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
+1. Если в очередной раз dll не является стандартной виндовой, нужно разместить её на постоянный хостинг со ссылкой в первом сообщении.
 
Верх