日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

第九章 keyhookdll windows程序设计王艳平版

發布時間:2023/12/29 windows 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第九章 keyhookdll windows程序设计王艳平版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
///
// KeyHookLib.h文件


// 定義函數修飾宏,方便引用本DLL工程的導出函數
#ifdef KEYHOOKLIB_EXPORTS
#define KEYHOOKLIB_API __declspec(dllexport)
#else
#define KEYHOOKLIB_API __declspec(dllimport)
#endif


// 自定義與主程序通信的消息
#define HM_KEY WM_USER + 101


// 聲明要導出的函數
BOOL KEYHOOKLIB_API WINAPI SetKeyHook(BOOL bInstall,?

? ? ?DWORD dwThreadId = 0, HWND hWndCaller = NULL);


EXPORTS
? ?SetKeyHook




SECTIONS
YCIShared ? Read Write Shared



// KeyHookLib.cpp文件


#include <windows.h>


#define KEYHOOKLIB_EXPORTS
#include "KeyHookLib.h"




// 共享數據段
#pragma data_seg("YCIShared")
HWND g_hWndCaller = NULL; // 保存主窗口句柄
HHOOK g_hHook = NULL; // 保存鉤子句柄
#pragma data_seg()


// 一個通過內存地址取得模塊句柄的幫助函數
HMODULE WINAPI ModuleFromAddress(PVOID pv)?
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}


// 鍵盤鉤子函數
LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
? ? ? ? if(nCode < 0 || nCode == HC_NOREMOVE)
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);

? ? ? ? if(lParam & 0x40000000) // 消息重復就交給下一個hook鏈
{
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

// 通知主窗口。wParam參數為虛擬鍵碼, lParam參數包含了此鍵的信息
? ? ? ? ::PostMessage(g_hWndCaller, HM_KEY, wParam, lParam);

? ? ? ? return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
}


// 安裝、卸載鉤子的函數
BOOL WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId, HWND hWndCaller)
{
BOOL bOk;
g_hWndCaller = hWndCaller;

if(bInstall)
{
g_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyHookProc,?
ModuleFromAddress(KeyHookProc), dwThreadId);
bOk = (g_hHook != NULL);
}?
else?
{
bOk = ::UnhookWindowsHookEx(g_hHook);
g_hHook = NULL;
}

return bOk;
}

總結

以上是生活随笔為你收集整理的第九章 keyhookdll windows程序设计王艳平版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。