SetWindowsHookEx為某個程序安裝鉤子

2021-06-20 06:12:02 字數 1959 閱讀 1027

hmodule getmodulehandle (lpctstrlpmodulename);

功能說明

獲取乙個特定的應用程式或動態鏈結庫的模組控制代碼,且這個模組必須已經被載入到呼叫者的程序空間中,否則呼叫loadlibrary。

getmodulehandle(null);

這將返回自身應用程式控制代碼(好像一直是0x40000000,和getcurrentprocess(一直是0xffffffff)是不一樣的,乙個是模組乙個程序,用在不同的地方)即使是在模組內,返回的也是呼叫它的應用程式的控制代碼,而不是模組本身的控制代碼。

要在模組中獲得模組本身的控制代碼,可以通過如下函式獲得,該函式通過模組內的函式獲得模組的控制代碼

hmodule modulefromaddress(pvoid pv) 

else}

傳入的引數為模組內的任意函式

要獲得模組內某一匯出函式的位址

farproc getprocaddress

hmodule hmodule, // dll模組控制代碼

lpcstr lpprocname // 函式名

要獲得程序或模組的磁碟檔名,用如下函式

dword getmodulefilename(

hmodule hmodule,

lptstr lpfilename,

dword nsize

);函式引數說明:

hmodule hmodule 裝載乙個程式例項的控制代碼。如果該引數為null,該函式返回該當前應用程式全路徑。

lptstr lpfilename 是你存放返回的名字的記憶體塊的指標,是乙個輸出引數

dword nsize,裝載到緩衝區lpfilename的最大值

要獲得別的程序的全路徑 可以用getmodulefilenameex 或者命令列 wmic process

獲得自身程序id

getcurrentprocessid

獲得其他程序id

1 通過getwindowthreadprocessid函式:找出某個視窗的建立者(執行緒或程序),返回建立者的標誌符。

dword getwindowthreadprocessid(

hwnd hwnd,

lpdword lpdwprocessid);

而獲得視窗控制代碼,可以用findwindow函式

2 通過快照獲得所有程序

// 取得本程序的模組列表

handle hsnap = ::createtoolhelp32snapshot(th32cs_snapmodule, ::getcurrentprocessid());

// 遍歷所有模組,分別對它們呼叫replaceiatentryinonemod函式,修改匯入位址表

moduleentry32 me = ;

bool bok = ::module32first(hsnap, &me);

while(bok)

::closehandle(hsnap);

3 通過控制代碼獲得id

dword winapi getprocessid( _in_ handle process );

getcurrentprocessid=getprocessid(getcurrentprocess);

通過id獲得控制代碼的方法

handle openprocess(

dword dwdesiredaccess, //渴望得到的訪問許可權(標誌)

bool binherithandle, // 是否繼承控制代碼

dword dwprocessid// 程序標示符);

例如handle hprocess = openprocess( process_all_access, false, id );

setwindowshookex 其四個引數分別為鉤子型別 鉤子函式位址 鉤子函式所在dll的例項控制代碼 安裝鉤子後想監控的執行緒的id號 (設定id為0,安裝乙個全域性的鉤子)返回引數為鉤子控制代碼

Qt獲取所有程序 終止某個程序

中用到qt庫的地方,不使用qt庫的可以替換為自己相應的函式 方法一 qt開源庫,通過qprocess啟動系統命令 tasklist.exe 獲取正在執行的程序 qprocess process process.start tasklist.exe if process.waitforfinished...

安卓程序保活之Service設定為前台服務

一 前台服務和普通服務有啥區別 普通服務使用者是無法感知的,只是在後台默默執行,而且優先順序比較低 前台服務優先順序更高,記憶體吃緊的時候更不容易被 而且狀態列會顯示前台服務 設定前台服務出現通知的時候會有提示音,可通過builder.setsound null,null 設定靜音 二 如何實現 在...

Latex 缺少某個package時如何安裝

如果在編譯時遇到錯誤 latex error file sty not found.說明還需要新增package才能編譯成功。如果解壓之後的包裡只有.ins沒有.sty,則說明需要編譯。從winedt的介面下方console的windows command line進入解壓下的資料夾進行編譯 如果直...