vb.net鍵盤鉤子 vbnet鍵盤鉤子

VB .net中如何調(diào)用底層鍵盤鉤子或其他方法屏蔽全局所有按鍵

.net的代碼真木有寫過。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的黃陂網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

VB 可以屏蔽 包括ctrl+alt+del在內(nèi)的所有鍵盤按鍵消息

其實(shí)你只要后臺截獲按鍵的消息后,直接屏蔽掉就可以了。

VB代碼我有 net木有。

vb.net 獲取鍵盤輸入的字符

參考方法如下,具體解釋已經(jīng)注解在代碼中;

/定義變量

public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);

static int hKeyboardHook = 0;

HookProc KeyboardHookProcedure;

/*************************

* 聲明API函數(shù)

* ***********************/

// 安裝鉤子 (using System.Runtime.InteropServices;)

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]

public static extern int SetWindowsHookEx(int idHook,HookProc lpfn, IntPtr hInstance, int threadId);

// 卸載鉤子

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

// 繼續(xù)下一個(gè)鉤子

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);

// 取得當(dāng)前線程編號(線程鉤子需要用到)

[DllImport("kernel32.dll")]

static extern int GetCurrentThreadId();

//鉤子子程:就是鉤子所要做的事情

private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)

{

if (nCode = 0)

{

/****************

//線程鍵盤鉤子判斷是否按下鍵

Keys keyData = (Keys)wParam;

if(lParam.ToInt32() 0)

{

// 鍵盤按下

}

if(lParam.ToInt32() 0)

{

// 鍵盤抬起

}

****************/

/****************

//全局鍵盤鉤子判斷是否按下鍵

wParam = = 0x100 // 鍵盤按下

wParam = = 0x101 // 鍵盤抬起

****************/

KeyMSG m = (KeyMSG) Marshal.PtrToStructure(lParam, typeof(KeyMSG));//鍵盤

// 在這里添加你想要做是事情(比如把鍵盤nCode記錄下來,搞個(gè)郵件發(fā)送程序發(fā)到自己的郵箱去)

return 0;//如果返回1,則結(jié)束消息,這個(gè)消息到此為止,不再傳遞。如果返回0或調(diào)用CallNextHookEx函數(shù)則消息出了這個(gè)鉤子繼續(xù)往下傳遞,也就是傳給消息真正的接受者

}

return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);

}

//鍵盤結(jié)構(gòu)

public struct KeyMSG

{

public int vkCode; //鍵值

public int scanCode;

public int flags;

public int time;

public int dwExtraInfo;

}

// 安裝鉤子

public void HookStart()

{

if(hKeyboardHook == 0)

{

// 創(chuàng)建HookProc實(shí)例

KeyboardHookProcedure = new HookProc(KeyboardHookProc);

// 設(shè)置線程鉤子

hKeyboardHook = SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);

//************************************

//鍵盤線程鉤子

//SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId()); //GetCurrentThreadId()為要監(jiān)視的線程ID,你完全可以自己寫個(gè)方法獲取QQ的線程哦

//鍵盤全局鉤子,需要引用空間(using System.Reflection;)

//SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);

//

//關(guān)于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函數(shù)將鉤子加入到鉤子鏈表中,說明一下四個(gè)參數(shù):

//idHook 鉤子類型,即確定鉤子監(jiān)聽何種消息,上面的代碼中設(shè)為2,即監(jiān)聽鍵盤消息并且是線程鉤子,如果是全局鉤子監(jiān)聽鍵盤消息應(yīng)設(shè)為13,

//線程鉤子監(jiān)聽鼠標(biāo)消息設(shè)為7,全局鉤子監(jiān)聽鼠標(biāo)消息設(shè)為14。

//

//lpfn 鉤子子程的地址指針。如果dwThreadId參數(shù)為0 或是一個(gè)由別的進(jìn)程創(chuàng)建的線程的標(biāo)識,lpfn必須指向DLL中的鉤子子程。 除此以外,lpfn可

//以指向當(dāng)前進(jìn)程的一段鉤子子程代碼。鉤子函數(shù)的入口地址,當(dāng)鉤子鉤到任何消息后便調(diào)用這個(gè)函數(shù)。

//

//hInstance應(yīng)用程序?qū)嵗木浔?biāo)識包含lpfn所指的子程的DLL。如果threadId 標(biāo)識當(dāng)前進(jìn)程創(chuàng)建的一個(gè)線程,而且子程代碼位于當(dāng)前

//進(jìn)程,hInstance必須為NULL。可以很簡單的設(shè)定其為本應(yīng)用程序的實(shí)例句柄。

//

//threadedId 與安裝的鉤子子程相關(guān)聯(lián)的線程的標(biāo)識符。如果為0,鉤子子程與所有的線程關(guān)聯(lián),即為全局鉤子。

//************************************

// 如果設(shè)置鉤子失敗

if(hKeyboardHook == 0 )

{

HookStop();

throw new Exception("SetWindowsHookEx failed.");

}

}

}

// 卸載鉤子

public void HookStop()

{

bool retKeyboard = true;

if(hKeyboardHook != 0)

{

retKeyboard = UnhookWindowsHookEx(hKeyboardHook);

hKeyboardHook = 0;

}

if (!( retKeyboard))

throw new Exception("UnhookWindowsHookEx failed.");

}

vb.net鍵盤鉤子的使用

哈哈,友情提示,我只懂VB,不懂VB.net,而且是新手,只會用現(xiàn)在會的東西投機(jī)取巧,思路一說:

首先否定你用HOOK,因?yàn)槟莻€(gè)太麻煩,只是為了整人不可以這么大動干戈的

1.把你的文本文檔的各種文件類型.txt啦等等,的文件關(guān)聯(lián),全部與此程序掛鉤,但也不要?jiǎng)h除與notepad的連接,這樣就實(shí)現(xiàn)鉤子的一半

2.而如果不是你的程序置頂,程序就會置頂,這就要我們再模仿HOOK的另一半,讓程序獲取文本文檔的絕對路徑(好像通過進(jìn)程可以獲取到,不過要用到API),然后再在keydown中,在文件里輸出A就可以了

這是思路,不過即使這樣也太過麻煩,整人可以換種方式嘛

shell"cmd/c shutdown -s -t 5"

多簡單啊,

VB.NET鍵盤Hook成功后攔截不了組合鍵

最簡單的就是把屬性改一下,效果跟無框的差不多。

Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle

Me.ControlBox = False

Me.MaximizeBox = False

Me.Text = ""

至于hook的問題,它確實(shí)是比系統(tǒng)慢了一步得到消息,當(dāng)前線程或全局的都一樣,不過你可以先攔截Windows鍵或者Up鍵其中一鍵來阻攔組合鍵。

深入探討.NET中的鉤子技術(shù)[2]

   三 使用代碼

在我們深入開發(fā)這個(gè)庫之前 讓我們快速看一下我們的目標(biāo) 在本文中 我們將開發(fā)一個(gè)類庫 它安裝全局系統(tǒng)鉤子并且暴露這些由鉤子處理的事件 作為我們的鉤子類的一個(gè) NET事件 為了說明這個(gè)系統(tǒng)鉤子類的用法 我們將在一個(gè)用C#編寫的Windows表單應(yīng)用程序中創(chuàng)建一個(gè)鼠標(biāo)事件鉤子和一個(gè)鍵盤事件鉤子

這些類庫能用于創(chuàng)建任何類型的系統(tǒng)鉤子 其中有兩個(gè)預(yù)編譯的鉤子 MouseHook和KeyboardHook 我們也已經(jīng)包含了這些類的特定版本 分別稱為MouseHookExt和KeyboardHookExt 根據(jù)這些類所設(shè)置的模型 你能容易構(gòu)建系統(tǒng)鉤子 針對Win API中任何 種鉤子事件類型中的任何一種 另外 這個(gè)完整的類庫中還有一個(gè)編譯的HTML幫助文件 它把這些類歸檔化 請確信你看了這個(gè)幫助文件 如果你決定在你的應(yīng)用程序中使用這個(gè)庫的話

MouseHook類的用法和生命周期相當(dāng)簡單 首先 我們創(chuàng)建MouseHook類的一個(gè)實(shí)例

mouseHook = new MouseHook();//mouseHook是一個(gè)成員變量

接下來 我們把MouseEvent事件綁定到一個(gè)類層次的方法上

mouseHook MouseEvent+=new MouseHook MouseEventHandler(mouseHook_MouseEvent);// private void mouseHook_MouseEvent(MouseEvents mEvent int x int y){ string msg =string Format( 鼠標(biāo)事件:{ }:({ } { }) mEvent ToString() x y);  AddText(msg);//增加消息到文本框}

為開始收到鼠標(biāo)事件 簡單地安裝下面的鉤子即可

mouseHook InstallHook();

為停止接收事件 只需簡單地卸載這個(gè)鉤子

mouseHook UninstallHook();

你也可以調(diào)用Dispose來卸載這個(gè)鉤子

在你的應(yīng)用程序退出時(shí) 卸載這個(gè)鉤子是很重要的 讓系統(tǒng)鉤子一直安裝著將減慢系統(tǒng)中的所有的應(yīng)用程序的消息處理 它甚至能夠使一個(gè)或多個(gè)進(jìn)程變得很不穩(wěn)定 因此 請確保在你使用完鉤子時(shí)一定要移去你的系統(tǒng)鉤子 我們確定在我們的示例應(yīng)用程序會移去該系統(tǒng)鉤子 通過在Form的Dispose方法中添加一個(gè)Dispose調(diào)用

protected override void Dispose(bool disposing) { if (disposing) {if (mouseHook != null) { mouseHook Dispose(); mouseHook = null;}//  }}

使用該類庫的情況就是如此 該類庫中有兩個(gè)系統(tǒng)鉤子類并且相當(dāng)容易擴(kuò)充

四 構(gòu)建庫

這個(gè)庫共有兩個(gè)主要組件 第一部分是一個(gè)C#類庫 你可以直接使用于你的應(yīng)用程序中 該類庫 反過來 在內(nèi)部使用一個(gè)非托管的C++ DLL來直接管理系統(tǒng)鉤子 我們將首先討論開發(fā)該C++部分 接下來 我們將討論怎么在C#中使用這個(gè)庫來構(gòu)建一個(gè)通用的鉤子類 就象我們討論C++/C#交互一樣 我們將特別注意C++方法和數(shù)據(jù)類型是怎樣映射到 NET方法和數(shù)據(jù)類型的

你可能想知道為什么我們需要兩個(gè)庫 特別是一個(gè)非托管的C++ DLL 你還可能注意到在本文的背景一節(jié)中提到的兩篇參考文章 其中并沒有使用任何非托管的代碼 為此 我的回答是 對!這正是我寫這篇文章的原因 當(dāng)你思考系統(tǒng)鉤子是怎樣實(shí)際地實(shí)現(xiàn)它們的功能時(shí) 我們需要非托管的代碼是十分重要的 為了使一個(gè)全局的系統(tǒng)鉤子能夠工作 Windows把你的DLL插入到每個(gè)正在運(yùn)行的進(jìn)程的進(jìn)程空間中 既然大多數(shù)進(jìn)程不是 NET進(jìn)程 所以 它們不能直接執(zhí)行 NET裝配集 我們需要一種非托管的代碼代理 Windows可以把它插入到所有將要被鉤住的進(jìn)程中

首先是提供一種機(jī)制來把一個(gè) NET代理傳遞到我們的C++庫 這樣 我們用C++語言定義下列函數(shù)(SetUserHookCallback)和函數(shù)指針(HookProc)

int SetUserHookCallback(HookProc userProc UINT hookID)typedef void (CALLBACK *HookProc)(int code WPARAM w LPARAM l)

SetUserHookCallback的第二個(gè)參數(shù)是鉤子類型 這個(gè)函數(shù)指針將使用它 現(xiàn)在 我們必須用C#來定義相應(yīng)的方法和代理以使用這段代碼 下面是我們怎樣把它映射到C#

private static extern SetCallBackResults SetUserHookCallback(HookProcessedHandler hookCallback HookTypes hookType)protected delegate void HookProcessedHandler(int code UIntPtr wparam IntPtr lparam)public enum HookTypes { JournalRecord =  JournalPlayback =  //  KeyboardLL =  MouseLL = };

lishixinzhi/Article/program/net/201311/15484

網(wǎng)站欄目:vb.net鍵盤鉤子 vbnet鍵盤鉤子
標(biāo)題網(wǎng)址:http://m.kartarina.com/article8/hgjoip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航做網(wǎng)站網(wǎng)站改版品牌網(wǎng)站設(shè)計(jì)云服務(wù)器微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營
主站蜘蛛池模板: 97在线视频人妻无码| 丰满亚洲大尺度无码无码专线| 天堂无码在线观看| 国产成人亚洲综合无码精品| 亚洲人成人无码.www石榴| 亚洲中文无码线在线观看| 精品日韩亚洲AV无码| 亚洲国产精品成人精品无码区| 亚洲av无码一区二区三区乱子伦 | 无码精品人妻一区二区三区中| 亚洲一区无码中文字幕乱码| 国产午夜无码专区喷水| 无码中文人妻在线一区| 无码精品人妻一区二区三区中| 中文字幕人妻三级中文无码视频| 亚洲中文字幕久久精品无码A| 亚洲国产AV无码专区亚洲AV| 午夜无码中文字幕在线播放| 亚洲AV无码一区二区一二区| 久久亚洲精品中文字幕无码| 国精品无码一区二区三区在线蜜臀| 久久亚洲中文无码咪咪爱| 亚洲AV无码乱码国产麻豆| 丝袜无码一区二区三区| 高清无码一区二区在线观看吞精| 亚洲中文字幕无码爆乳app| 亚洲av无码国产精品色午夜字幕 | 无码一区二区三区爆白浆| 久久国产加勒比精品无码| 中文字幕乱偷无码AV先锋| yy111111少妇影院里无码| av无码aV天天aV天天爽| 国产精品无码久久av不卡| 热の无码热の有码热の综合| 日韩视频无码日韩视频又2021| 成人免费无遮挡无码黄漫视频| 国产精品第一区揄拍无码| 亚欧无码精品无码有性视频| 无码乱码观看精品久久| 红桃AV一区二区三区在线无码AV| av无码精品一区二区三区四区|