C 遮蔽系統熱鍵

2021-05-22 14:55:50 字數 1998 閱讀 1816

一般來說會用到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也就不會彈出任務管理器的視窗了,顯然任務管理器已經開啟,只不過在窗體介面是不會看見它罷了。

遮蔽CTRL ATL DEL熱鍵

這個熱鍵的優先順序非常高,低階的鍵盤鉤子無法攔截。網上找來很多方法 1 種是修改登錄檔,但是會彈出乙個警告對話方塊。另一種dll注入方式,可以比較好的禁用。但是vista之後不再使用gina,所以vista之後似乎只能使用ddk 鍵盤驅動層攔截 有一種方法是修改登錄檔鍵盤對映,新增乙個scancod...

遮蔽系統熱鍵的方法總結

在編寫程式的過程中,我們有時需要實現遮蔽作業系統一些熱鍵的功能,如 ctrl delete alt,ctrl shift esc等 網路上有很多關於這方面的資料,總結了一下,一般有如下兩個方法 1.通重載入低階鍵盤鉤子 wh keyboard ll 截獲大部分的系統熱鍵,並遮蔽它。這個方法比較簡單,...

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

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