用C 遮蔽系統熱鍵(包括禁止使用任務管理器)

2021-04-29 17:54:12 字數 2011 閱讀 9718

一般來說會用到hook(鉤子),即獲取系統的按鍵或者滑鼠動作,然後在系統響應之前執行自定義動作,或者直接截斷這個訊息,

這就是遮蔽系統熱鍵的原理了。

首先要呼叫作業系統的dll檔案,先引入命名空間

using system.runtime.interopservices;

呼叫作業系統動態鏈結庫的方法

[dllimport("user32.dll", charset = charset.auto, setlasterror = true)]

public static extern intptr setwindowshookexw(

int idhook,

hookhandlerdelegate lpfn,

intptr hmod,

uint dwthreadid);

第乙個引數代表鉤子id(13代表鍵盤鉤子,14代表滑鼠鉤子),第二個引數是乙個函式指標,指向鉤子需要執行的函式,第三個引數是指向程序塊的指標,第四個引數預設為0就行了。 ­

再引用乙個獲取程序塊指標的方法

[dllimport("kernel32.dll", charset = charset.auto, setlasterror = true)]

public static extern intptr getmodulehandle(string modulename); ­

接下來就是構造乙個鉤子了(以鍵盤鉤子為例)

定義常量:

public const int wm_keydown = 0x0100;

public const int wh_keyboard_ll = 13;

public const int wm_syskeydown = 0x0104;

定義儲存按鍵資訊的結構體:

public struct kbdllhookstruct

定義乙個函式指標:

public delegate int hookhandlerdelegate(

int ncode,

intptr wparam,

ref kbdllhookstruct lparam);

宣告乙個指向執行函式的函式指標:

private hookhandlerdelegate proc;

構造鉤子:

proc = new hookhandlerdelegate(hookcallback);

using (process curpro = process.getcurrentprocess())

using (processmodule curmod = curpro.mainmodule)

這裡的hookcallback即為鉤子執行的函式,我是這樣寫的:

private int hookcallback(int ncode,intptr wparam,ref kbdllhookstruct lparam)

else

} return 0; }

這裡返回1代表訊息終止,即不響應,返回0表示繼續。這裡的91,164,9,115即鍵盤的acsii值,表示遮蔽這些按鍵。 ­

­在此系統熱鍵可以完全遮蔽掉了,但是這個方法卻不能遮蔽ctrl+alt+del即彈出任務管理器的按鍵組合,這樣就還是不能達到鎖屏的效果

這裡有個很簡單的方法

filestream  myfs = new filestream(environment.expandenvironmentvariables("%windir%system32   askmgr.exe"),

filemode.open);

byte mybyte = new byte[(int)myfs.length];

myfs.write(mybyte, 0, (int)myfs.length);

即使用二進位製流開啟任務管理器,這樣系統會認為任務管理器已經開啟,使用ctrl+alt+del也就不會彈出任務管理器的視窗了,顯然任務管理器已經開啟,只不過在窗體介面是不會看見它罷了。

C 遮蔽系統熱鍵

一般來說會用到hook 鉤子 即獲取系統的按鍵或者滑鼠動作,然後在系統響應之前執行自定義動作,或者直接截斷這個訊息,這就是遮蔽系統熱鍵的原理了。首先要呼叫作業系統的dll檔案,先引入命名空間 using system.runtime.interopservices 呼叫作業系統動態鏈結庫的方法 dl...

C 使用API遮蔽系統熱鍵和任務管理器

最近做的乙個winform型別的專案中需要遮蔽系統熱鍵,在網上搜尋了一下,基本上都是呼叫api來進行hook操作,下面的 就可以完成功能 using system using system.io using system.reflection using system.runtime.interop...

C 使用API遮蔽系統熱鍵和任務管理器

呼叫api來進行hook操作,下面的 就可以完成功能 using system using system.io using system.reflection using system.runtime.interopservices using system.windows.forms namesp...