C 全域性鍵盤獲取元件

2021-06-02 10:53:32 字數 3883 閱讀 7705

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...