1. 程式人生 > 其它 >易語言api 取鍵盤 滑鼠鉤子 取視窗控制代碼 取

易語言api 取鍵盤 滑鼠鉤子 取視窗控制代碼 取

dll注入

.版本 2

.DLL命令 尋找視窗控制代碼, 整數型, "user32", "FindWindowExA", , , 尋找視窗控制代碼
    .引數 hwndParent, 整數型, , 父視窗控制代碼
    .引數 hwndChildAfter, 整數型, , 子視窗控制代碼
    .引數 lpszClass, 文字型, , 類名
    .引數 lpszWindow, 文字型, , 標題

.DLL命令 取模組控制代碼, 整數型, "kernel32", "GetModuleHandleA", , API_GetModuleHandle  獲取一個應用程式或動態連結庫的模組控制代碼  如執行成功成功,則返回模組控制代碼。零表示失敗。會設定GetLastError
    .引數 lpModuleName, 文字型, , 指定模組名,這通常是與模組的檔名相同的一個名字。例如,NOTEPAD.EXE程式的模組檔名就叫作NOTEPAD;

.DLL命令 取視窗程序執行緒PID, 整數型, 
"user32.dll", "GetWindowThreadProcessId", , , 取視窗程序執行緒PID。返回執行緒PID .引數 hWnd, 整數型, , 視窗控制代碼 .引數 lpdwProcessId, 整數型, 傳址, 返回程序ID 指定一個變數,用於裝載擁有那個視窗的一個程序pid .DLL命令 CallNextHookEx, 整數型, , "CallNextHookEx", , , 下一個鉤子 .引數 hhk, 整數型 .引數 nCode, 整數型 .引數 wParam, 整數型 .引數 lParam, 整數型 .DLL命令 建立鉤子, 整數型, ,
"SetWindowsHookExA", , , 建立鉤子 .引數 idHook, 整數型, , 第一個引數是鉤子型別。全域性滑鼠是14.鍵盤是13. .引數 lpfn, 子程式指標, , .第二個是子程式指標 .引數 hmod, 整數型, , GetModuleHandle(0) .引數 dwThreadId, 整數型, , 0 .DLL命令 解除安裝鉤子, 邏輯型, , "UnhookWindowsHookEx", , , 解除安裝鉤子 .引數 hhk, 整數型 .DLL命令 WindowFromPoint, 整數型, "user32", "WindowFromPoint
", , , 返回包含了指定點的視窗的控制代碼。忽略遮蔽、隱藏以及透明視窗 包含了指定點的視窗的控制代碼。如指定的點處沒有視窗存在,則返回零 .引數 xPoint, 整數型, , x點值 .引數 yPoint, 整數型, , y點值; .DLL命令 GetModuleHandle, 整數型, "kernel32.dll", "GetModuleHandleA", , 獲取一個應用程式或動態連結庫的模組控制代碼。如執行成功成功,則返回模組控制代碼。零表示失敗。 .引數 lpModuleName, 整數型, , 指定模組名,這通常是與模組的檔名相同的一個名字。例如,NOTEPAD.EXE程式的模組檔名就叫作NOTEPAD只有在當前程序的場景中,這個控制代碼才會有效

自定義資料

.版本 2

.資料型別 MOUSEHOOKSTRUCT, 公開
    .成員 pt, POINT
    .成員 hwnd, 整數型
    .成員 wHitTestCode, 整數型
    .成員 dwExtraInfo, 整數型

.資料型別 POINT, 公開
    .成員 X, 整數型
    .成員 Y, 整數型

.資料型別 MSG1, 公開
    .成員 message, 整數型
    .成員 paraml, 整數型
    .成員 paramH, 整數型
    .成員 time, 整數型
    .成員 hwnd, 整數型

.資料型別 MSG, 公開
    .成員 控制代碼, 整數型
    .成員 message, 整數型
    .成員 w, 整數型
    .成員 l, 整數型
    .成員 time, 整數型
    .成員 位置, 整數型

.資料型別 滑鼠結構, 公開
    .成員 成員1, 整數型
    .成員 成員2, 座標結構, , , 滑鼠x,y
    .成員 成員3, 整數型

.資料型別 座標結構, 公開
    .成員 成員x, 整數型
    .成員 成員y, 整數型

  主程式程式碼

.版本 2
.支援庫 eAPI
.支援庫 spec

.程式集 視窗程式集_啟動視窗
.程式集變數 控制代碼, 整數型
.程式集變數 滑鼠鉤子, 整數型
.程式集變數 鍵盤鉤子, 整數型

.子程式 __啟動視窗_建立完畢

鍵盤鉤子 = 建立鉤子 (13, &鍵盤鉤子回撥函式, GetModuleHandle (0), 0)
滑鼠鉤子 = 建立鉤子 (14, &滑鼠鉤子回撥函式, GetModuleHandle (0), 0)

.子程式 _按鈕1_被單擊
.區域性變數 pid, 整數型
.區域性變數 滑鼠座標, 整數型, , "0"
.區域性變數 程序列表, 程序資訊, , "0"
.區域性變數 i, 整數型

延時 (1000)

加入成員 (滑鼠座標, 取滑鼠水平位置 ())
加入成員 (滑鼠座標, 取滑鼠垂直位置 ())
除錯輸出 (滑鼠座標)
' 除錯輸出 (取作業系統 ())
控制代碼 = 尋找視窗控制代碼 (0, 0, “WTWindow”, “API助手 V2.0版”)
除錯輸出 (控制代碼)
取視窗程序執行緒PID (控制代碼, pid)
除錯輸出 (pid)
' 程序列表 = 取系統程序列表 ()
.' 計次迴圈首 (取陣列成員數 (程序列表), i)
    .判斷開始斷 (程序列表 [i].程序名稱 = “API助手 V2.0版”)
        ' pid = 程序列表 [i].程序識別符號
    .預設
        ' i = 0
    .判斷結束

.' 計次迴圈尾 ()
' 除錯輸出 (程序列表)

.子程式 鍵盤鉤子回撥函式, 整數型
.引數 引數一, 整數型
.引數 引數二, 整數型, , 按鍵狀態
.引數 引數三, 整數型, , 結構指標
.區域性變數 鍵值, 整數型
.區域性變數 index, 整數型

' 不使用鍵盤結構體如何獲取鍵值
' 指標到位元組集后里的引數二,1---,只取 1 位,因為整數在位元組集裡的佔1位
' 把指標就轉換成了 鍵值
' 3 s是整數型
鍵值 = 取位元組集資料 (指標到位元組集 (引數三, 1), 3, )
' 256是按下
' 257是彈起
.判斷開始 (引數二 = 256)
    除錯輸出 (鍵值)
    .判斷開始 (鍵值 ≥ 112 且 鍵值 ≤ 123)
        鍵值 = 鍵值 - 111
        _啟動視窗.標題 = “F” + 到文字 (鍵值)
    .預設

    .判斷結束

    ' 對26個字母鍵操作
    .判斷開始 (鍵值 ≥ 65 且 鍵值 ≤ 90)
        ' 取鍵盤指示燈狀態’
        .判斷開始 (取鍵盤指示燈狀態 (1) = 真)
            _啟動視窗.標題 = 字元 (鍵值)
            ' 大寫字母比對應的小寫字母少 32
        .預設
            _啟動視窗.標題 = 字元 (鍵值 + 32)
        .判斷結束

    .預設

    .判斷結束
    ' 判斷按下A鍵了--就可以彈出訊息框
    .判斷開始 (鍵值 = #回車鍵)
        資訊框 (“操作正確”, 0, , )
    .預設

    .判斷結束
    ' 按鍵彈起

.預設

.判斷結束
返回 (CallNextHookEx (鍵盤鉤子, 引數一, 引數二, 引數三))

.子程式 滑鼠鉤子回撥函式, 整數型
.引數 引數1, 整數型
.引數 引數2, 整數型
.引數 引數3, 整數型
.區域性變數 滑鼠資訊, 滑鼠結構
.區域性變數 座標z, 座標結構

.判斷開始 (引數2 = 513)
    _啟動視窗.標題 = “你按下了滑鼠左鍵”
.預設

.判斷結束
.判斷開始 (引數2 = 514)
    _啟動視窗.標題 = “你放開了滑鼠左鍵”
.預設

.判斷結束
.判斷開始 (引數2 = 516)
    _啟動視窗.標題 = “你按下了滑鼠右鍵”
.預設

.判斷結束
.判斷開始 (引數2 = 517)
    _啟動視窗.標題 = “你放開了滑鼠右鍵”
.預設

.判斷結束
除錯輸出 (引數1)
除錯輸出 (引數2)
除錯輸出 (引數3)
返回 (CallNextHookEx (滑鼠鉤子, 引數1, 引數2, 引數3))


.子程式 彙編_滑鼠相對移動, 整數型, 公開, SendInput
.引數 dx, 整數型
.引數 dy, 整數型

' sub esp,0x3C
' mov [esp],0 //type
' mov eax,[ebp+0x8]
' mov [esp+0x4],eax //dx
' mov eax,[ebp+0xC]
' mov [esp+0x8],eax //dy
' mov [esp+0xC],0 //mouseData
' mov [esp+0x10],1 //dwFlags
' mov [esp+0x14],0 //time
' mov [esp+0x18],0 //dwExtraInfo
' mov eax,esp
' add esp,0x3C
' push 0x1C //cbSize
' push eax //pInputs
' push 1 //cInputs
' call @SendInput
' add esp,0xC
' leave
' ret 0x8
' @SendInput:
' mov eax,0x1082
' xor ecx,ecx
' lea edx,[esp+0x4]
' call [fs:0xC0]
' ret
置入程式碼 ({ 131, 236, 60, 199, 4, 36, 0, 0, 0, 0, 139, 69, 8, 137, 68, 36, 4, 139, 69, 12, 137, 68, 36, 8, 199, 68, 36, 12, 0, 0, 0, 0, 199, 68, 36, 16, 1, 0, 0, 0, 199, 68, 36, 20, 0, 0, 0, 0, 199, 68, 36, 24, 0, 0, 0, 0, 137, 224, 131, 196, 60, 106, 28, 80, 106, 1, 232, 7, 0, 0, 0, 131, 196, 12, 201, 194, 8, 0, 184, 130, 16, 0, 0, 49, 201, 141, 84, 36, 4, 100, 255, 21, 192, 0, 0, 0, 195 })
返回 (0)


.子程式 取作業系統, 整數型, 公開, 0.未知 1.Win95 2.Win98 3.WinME 4.WinNT 5.Win2000 6.WinXP 7.Win2003 8.Vista 9.Win7 10.Win8

置入程式碼 ({ 83, 49, 192, 100, 139, 29, 24, 0, 0, 0, 100, 139, 13, 48, 0, 0, 0, 133, 201, 121, 32, 185, 0, 0, 83, 0, 57, 75, 88, 117, 4, 176, 1, 235, 99, 57, 75, 84, 117, 4, 176, 2, 235, 90, 57, 75, 124, 117, 85, 176, 3, 235, 81, 139, 153, 168, 0, 0, 0, 139, 137, 164, 0, 0, 0, 131, 249, 4, 119, 4, 176, 4, 235, 60, 131, 249, 5, 117, 27, 131, 251, 0, 117, 4, 176, 5, 235, 46, 131, 251, 1, 117, 4, 176, 6, 235, 37, 131, 251, 2, 117, 4, 176, 7, 235, 28, 131, 249, 6, 117, 7, 131, 251, 0, 117, 4, 176, 8, 235, 14, 131, 251, 1, 117, 2, 176, 9, 131, 251, 2, 117, 2, 176, 10, 91, 137, 236, 93, 195 })
返回 (0)

.子程式 彙編_十到十六, 文字型, 公開, 十進位制轉換到十六進位制
.引數 十進位制整數, 整數型
.區域性變數 緩衝區, 文字型

緩衝區 = 取空白文字 (8)
置入程式碼 ({ 139, 69, 8, 87, 139, 125, 252, 49, 201, 177, 8, 80, 36, 15, 60, 9, 119, 4, 4, 48, 235, 2, 4, 55, 136, 68, 15, 255, 88, 193, 232, 4, 226, 233, 95 })
返回 (緩衝區)

.子程式 Asm_滑鼠相對移動, 整數型, , SendInput
.引數 dx, 整數型
.引數 dy, 整數型

' sub esp,0x3C
' mov dword [esp],0 ; type
' mov eax,[ebp 0x8]
' mov dword [esp 0x4],eax ; dx
' mov eax,[ebp 0xC]
' mov dword [esp 0x8],eax ; dy
' mov dword [esp 0xC],0 ; mouseData
' mov dword [esp 0x10],1 ; dwFlags
' mov dword [esp 0x14],0 ; time
' mov dword [esp 0x18],0 ; dwExtraInfo
' mov eax,esp
' add esp,0x3C
' push 0x1C
' push eax
' push 1
' call SendInput
' add esp,0xC
' leave
' ret 0x8
' SendInput:
' mov eax,0x1082 ;有的系統可能不是0x1082
' xor ecx,ecx
' lea edx,[esp 0x4]
' call dword [fs:0xC0]
' ret
置入程式碼 ({ 131, 236, 60, 199, 4, 36, 0, 0, 0, 0, 139, 69, 8, 137, 68, 36, 4, 139, 69, 12, 137, 68, 36, 8, 199, 68, 36, 12, 0, 0, 0, 0, 199, 68, 36, 16, 1, 0, 0, 0, 199, 68, 36, 20, 0, 0, 0, 0, 199, 68, 36, 24, 0, 0, 0, 0, 137, 224, 131, 196, 60, 106, 28, 80, 106, 1, 232, 7, 0, 0, 0, 131, 196, 12, 201, 194, 8, 0, 184, 130, 16, 0, 0, 49, 201, 141, 84, 36, 4, 100, 255, 21, 192, 0, 0, 0, 195 })