keyshoot.cs
using system;
using system.collections.generic;
using system.componentmodel;
using system.diagnostics;
using system.linq;
using system.text;
using system.runtime.interopservices;
using system.windows.forms;
namespace mouse
public keyshoot(icontainer container)
~keyshoot()
#region 全域性常量宣告
private const int wm_keydown = 0x100;
private const int wm_keyup = 0x101;
private const int wm_syskeydown = 0x104;
private const int wm_syskeyup = 0x105;
#endregion
#region 全域性的事件
public event keyeventhandler onkeydownevent;
public event keyeventhandler onkeyupevent;
public event keypresseventhandler onkeypressevent;
#endregion
#region 滑鼠常量
static int hkeyboardhook = 0; //鍵盤鉤子控制代碼
public const int wh_keyboard_ll = 13; //型別 定義在winuser.h
#endregion
#region 有關鍵盤
hookproc keyboardhookprocedure; //宣告鍵盤鉤子事件型別.
//宣告鍵盤鉤子的封送結構型別
[structlayout(layoutkind.sequential)]
public class keyboardhookstruct
#endregion
#region api
//裝置鉤子的函式
[dllimport("user32.dll", charset = charset.auto, callingconvention = callingconvention.stdcall)]
public static extern int setwindowshookex(int idhook, hookproc lpfn, intptr hinstance, int threadid);
//卸下鉤子的函式
[dllimport("user32.dll", charset = charset.auto, callingconvention = callingconvention.stdcall)]
public static extern bool unhookwindowshookex(int idhook);
//下乙個鉤掛的函式
[dllimport("user32.dll", charset = charset.auto, callingconvention = callingconvention.stdcall)]
public static extern int callnexthookex(int idhook, int ncode, int32 wparam, intptr lparam);
[dllimport("user32")]
public static extern int toascii(int uvirtkey, int uscancode, byte lpbkeystate, byte lpwtranskey, int fustate);
[dllimport("user32")]
public static extern int getkeyboardstate(byte pbkeystate);
[dllimport("kernel32.dll", charset = charset.auto, callingconvention = callingconvention.stdcall)]
private static extern intptr getmodulehandle(string lpmodulename);
public delegate int hookproc(int ncode, int32 wparam, intptr lparam);
//先前按下的鍵
public listprekeys = new list();
#endregion
#region 鍵盤鉤子安裝與解除安裝處理
/// /// 安裝鍵盤鉤子
///
public void start()}}
/// /// 解除安裝鍵盤鉤子
///
public void stop()
//如果卸下鉤子失敗
if (!(retkeyboard)) throw new exception("卸下鉤子失敗");
}#endregion
#region 處理方法
private int keyboardhookproc(int ncode, int32 wparam, intptr lparam)
}//引發onkeydownevent
if (onkeydownevent != null && (wparam == wm_keydown || wparam == wm_syskeydown))
//引發onkeypressevent
if (onkeypressevent != null && wparam == wm_keydown)
}//當有onkeydownevent 或 onkeypressevent不為null時,ctrl alt shift keyup時 prekeys
//中的對應的鍵刪除
if ((onkeydownevent != null || onkeypressevent != null) && (wparam == wm_keyup || wparam == wm_syskeyup))}}
}//引發onkeyupevent
if (onkeyupevent != null && (wparam == wm_keyup || wparam == wm_syskeyup))
}return callnexthookex(hkeyboardhook, ncode, wparam, lparam);
}private keys getdownkeys(keys key)
}rtnkey = rtnkey | key;
return rtnkey;
}private boolean isctrlaltshiftkeys(keys key)
}#endregion
}}
keyshoot.designer.cs
namespace mouse
base.dispose(disposing);
}#region 元件設計器生成的**
/// /// 設計器支援所需的方法 - 不要
/// 使用**編輯器修改此方法的內容。
///
private void initializecomponent()
#endregion
}}
源****於網路 然後自己修改為元件
元件**如下 :
vue獲取全域性元件 解析Vue全域性元件和區域性元件
vue中元件分為兩種 1.全域性元件 2.區域性元件 接下來我們看看兩種元件的區別 一 使用範圍 全域性元件使用範圍 可以在頁面中任何位置使用 區域性元件使用範圍 只能在定義它的el中使用,不能再其他位置使用,否則就無法生效 二 定義元件的方法 全域性元件 可以使用vue.component tag...
vue獲取全域性元件 Vue 全域性元件自動註冊
在 vue 中,我們通過 vue.component mycomponentname 的方式來進行全域性元件註冊,但如果需要全域性註冊的元件很多,這時 就會變得比較臃腫,例如 12 註冊 5 個全域性元件 import examplecomponent1 from components exampl...
c 全域性鍵盤鉤子
using system using system.collections.generic using system.text using system.windows.forms using system.runtime.interopservices using system.diagnosti...