參考方法如下,具體解釋已經(jīng)注解在代碼中;
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計制作、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雙清,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
/定義變量
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ù)下一個鉤子
[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記錄下來,搞個郵件發(fā)送程序發(fā)到自己的郵箱去)
return 0;//如果返回1,則結(jié)束消息,這個消息到此為止,不再傳遞。如果返回0或調(diào)用CallNextHookEx函數(shù)則消息出了這個鉤子繼續(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實例
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,你完全可以自己寫個方法獲取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ù)將鉤子加入到鉤子鏈表中,說明一下四個參數(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 或是一個由別的進(jìn)程創(chuàng)建的線程的標(biāo)識,lpfn必須指向DLL中的鉤子子程。 除此以外,lpfn可
//以指向當(dāng)前進(jìn)程的一段鉤子子程代碼。鉤子函數(shù)的入口地址,當(dāng)鉤子鉤到任何消息后便調(diào)用這個函數(shù)。
//
//hInstance應(yīng)用程序?qū)嵗木浔?。?biāo)識包含lpfn所指的子程的DLL。如果threadId 標(biāo)識當(dāng)前進(jìn)程創(chuàng)建的一個線程,而且子程代碼位于當(dāng)前
//進(jìn)程,hInstance必須為NULL。可以很簡單的設(shè)定其為本應(yīng)用程序的實例句柄。
//
//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.");
}
左鍵是1
右鍵是2
中鍵是4
可以組合相加
左右同時就是3,也可以寫做:vbleftbutton+vbrightbutton
執(zhí)行鍵盤事件方法如下:
第一步,點(diǎn)擊VS工具。
第二步,打開后,新建一個Windows窗體應(yīng)用程序。
第三步,請看右下方Form的屬性欄。
第四步,雙擊KeyDown。
第五步,輸入提示按鍵代碼,如圖所示。
第六步,再次輸入代碼,設(shè)置屬性KeyPreview為true。
第七步,運(yùn)行程序,按下舉例F5,則會彈出提示,表明已經(jīng)成功獲。
將窗體KeyPreview屬性設(shè)置為True并對Form_KeyDown事件編程,可以獲取鍵盤箭頭鍵的鍵值。實現(xiàn)方法如下:
Option?Explicit
Private?Sub?Form_Load()
'允許窗體攔截鍵盤按鍵
Me.KeyPreview?=?True
End?Sub
Private?Sub?Form_KeyDown(KeyCode?As?Integer,?Shift?As?Integer)
'?KeyCode?鍵盤碼是鍵盤上每個按鍵的唯一編碼
'?在VB中,符號常數(shù)表示鍵盤碼,例如?vbKeyF1?表示F1鍵,
'?vbKeyHome?表示HOME鍵……?
Select?Case?KeyCode
Case?vbKeyLeft:?????Print?"左箭頭鍵值:"?+?CStr(KeyCode)
Case?vbKeyRight:????Print?"右箭頭鍵值:"?+?CStr(KeyCode)
Case?vbKeyUp:???????Print?"上箭頭鍵值:"?+?CStr(KeyCode)
Case?vbKeyDown:?????Print?"下箭頭鍵值:"?+?CStr(KeyCode)
End?Select
End?Sub
你要添加窗口的keydown事件,判斷e.keycode=keys.q如果滿足條件則調(diào)用button1的click事件,調(diào)用的話你要這樣寫call button1_click(sender,e)
VB鍵盤代碼數(shù)值表可在代碼中的任何地方用下列VB鍵盤代碼常數(shù)代替實際值:VB鍵盤代碼常量值
(0x為16進(jìn)制,其他為10進(jìn)制)鍵盤說明vbKeyLButton0x1鼠標(biāo)左鍵vbKeyRButton0x2鼠標(biāo)右鍵vbKeyCancel0x3CANCEL鍵vbKeyMButton0x4鼠標(biāo)中鍵vbKeyBack0x8退格鍵vbKeyTab0x9TAB鍵vbKeyClear0xCCLEAR健vbKeyReturn0xD回車鍵vbKeyShift0x10SHIFT鍵vbKeyControl0x11CTRL鍵vbKeyMenu0x12MENU鍵vbKeyPause0x13PAUSE鍵vbKeyCapital0x14CAPS LOCK 鍵vbKeyEscape0x1BESC鍵vbKeySpace0x20空格鍵vbKeyPageUp0x21Page Up 鍵vbKeyPageDown0x22Page Down 鍵vbKeyEnd0x23END鍵vbKeyHome0x24HOME鍵vbKeyLeft0x25光標(biāo)左鍵vbKeyUp0x26光標(biāo)上鍵vbKeyRight0x27光標(biāo)右鍵vbKeyDown0x28光標(biāo)下鍵vbKeySelect0x29SELECT鍵vbKeyPrint0x2APrint Screen 鍵vbKeyExecute0x2BEXECUTE鍵vbKeySnapshot0x2CSnapShot鍵vbKeyInsert0x2DINSERT鍵vbKeyDelete0x2EDELETE鍵vbKeyHelp0x2FHELP鍵vbKeyNumlock0x90NUM LOCK 鍵vbKeyA65字母A鍵vbKeyB66字母B鍵vbKeyC67字母C鍵vbKeyD68字母D鍵vbKeyE69字母E鍵vbKeyF70字母F鍵vbKeyG71字母G鍵vbKeyH72字母H鍵vbKeyI73字母I鍵vbKeyJ74字母J鍵vbKeyK75字母K鍵vbKeyL76字母L鍵vbKeyM77字母M鍵vbKeyN78字母N鍵vbKeyO79字母O鍵vbKeyP80字母P鍵vbKeyQ81字母Q鍵vbKeyR82字母R鍵vbKeyS83字母S鍵vbKeyT84字母T鍵vbKeyU85字母U鍵vbKeyV86字母V鍵vbKeyW87字母W鍵vbKeyX88字母X鍵vbKeyY89字母Y鍵vbKeyZ90字母Z鍵vbKey048數(shù)字0鍵vbKey149數(shù)字1鍵vbKey250數(shù)字2鍵vbKey351數(shù)字3鍵vbKey452數(shù)字4鍵vbKey553數(shù)字5鍵vbKey654數(shù)字6鍵vbKey755數(shù)字7鍵vbKey856數(shù)字8鍵vbKey957數(shù)字9鍵vbKeyF10x70F1功能鍵vbKeyF20x71F2功能鍵vbKeyF30x72F3功能鍵vbKeyF40x73F4功能鍵vbKeyF50x74F5功能鍵vbKeyF60x75F6功能鍵vbKeyF70x76F7功能鍵vbKeyF80x77F8功能鍵vbKeyF90x78F9功能鍵vbKeyF100x79F10功能鍵vbKeyF110x7AF11功能鍵vbKeyF120x7BF12功能鍵vbKeyF130x7CF13功能鍵vbKeyF140x7DF14功能鍵vbKeyF150x7EF15功能鍵vbKeyF160x7FF16功能鍵vbKeyNumpad00x60小鍵盤0鍵vbKeyNumpad10x61小鍵盤1鍵vbKeyNumpad20x62小鍵盤2鍵vbKeyNumpad30x63小鍵盤3鍵vbKeyNumpad40x64小鍵盤4鍵vbKeyNumpad50x65小鍵盤5鍵vbKeyNumpad60x66小鍵盤6鍵vbKeyNumpad70x67小鍵盤7鍵vbKeyNumpad80x68小鍵盤8鍵vbKeyNumpad90x69小鍵盤9鍵vbKeyMultiply0x6A小鍵盤*鍵vbKeyAdd0x6B小鍵盤+鍵vbKeySeparator0x6C小鍵盤回車鍵vbKeySubtract0x6D小鍵盤-鍵vbKeyDecimal0x6E小鍵盤.鍵vbKeyDivide0x6F小鍵盤/鍵
新聞名稱:vb.net鍵盤鍵值,vb中數(shù)字鍵
網(wǎng)站URL:http://chinadenli.net/article42/dseoohc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、ChatGPT、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)