vb.net 获取键盘输入的字符

vb.net 获取键盘输入的字符,第1张

参考方法如下,具体解释已经注解在代码中;

/定义变量

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

static int hKeyboardHook = 0;

HookProc KeyboardHookProcedure;

/

声明API函数

/

// 安装钩子 (using SystemRuntimeInteropServices;)

[DllImport("user32dll",CharSet=CharSetAuto, CallingCStdCall)]

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

// 卸载钩子

[DllImport("user32dll",CharSet=CharSetAuto, CallingCStdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

// 继续下一个钩子

[DllImport("user32dll",CharSet=CharSetAuto, CallingCStdCall)]

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

// 取得当前线程编号(线程钩子需要用到)

[DllImport("kernel32dll")]

static extern int GetCurrentThreadId();

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

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

{

if (nCode >= 0)

{

/

//线程键盘钩子判断是否按下键

Keys keyData = (Keys)wParam;

if(lParamToInt32() > 0)

{

// 键盘按下

}

if(lParamToInt32() < 0)

{

// 键盘抬起

}

/

/

//全局键盘钩子判断是否按下键

wParam = = 0x100 // 键盘按下

wParam = = 0x101 // 键盘抬起

/

KeyMSG m = (KeyMSG) MarshalPtrToStructure(lParam, typeof(KeyMSG));//键盘

// 在这里添加你想要做是事情(比如把键盘nCode记录下来,搞个邮件发送程序发到自己的邮箱去)

return 0;//如果返回1,则结束消息,这个消息到此为止,不再传递。如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者

}

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

}

//键盘结构

public struct KeyMSG

{

public int vkCode; //键值

public int scanCode;

public int flags;

public int time;

public int dwExtraInfo;

}

// 安装钩子

public void HookStart()

{

if(hKeyboardHook == 0)

{

// 创建HookProc实例

KeyboardHookProcedure = new HookProc(KeyboardHookProc);

// 设置线程钩子

hKeyboardHook = SetWindowsHookEx( 13,KeyboardHookProcedure,MarshalGetHINSTANCE(AssemblyGetExecutingAssembly()GetModules()[0]),0);

//

//键盘线程钩子

//SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtrZero, GetCurrentThreadId()); //GetCurrentThreadId()为要监视的线程ID,你完全可以自己写个方法获取QQ的线程哦

//键盘全局钩子,需要引用空间(using SystemReflection;)

//SetWindowsHookEx( 13,KeyboardHookProcedure,MarshalGetHINSTANCE(AssemblyGetExecutingAssembly()GetModules()[0]),0);

//

//关于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函数将钩子加入到钩子链表中,说明一下四个参数:

//idHook 钩子类型,即确定钩子监听何种消息,上面的代码中设为2,即监听键盘消息并且是线程钩子,如果是全局钩子监听键盘消息应设为13,

//线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。

//

//lpfn 钩子子程的地址指针。如果dwThreadId参数为0 或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可

//以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。

//

//hInstance应用程序实例的句柄。标识包含lpfn所指的子程的DLL。如果threadId 标识当前进程创建的一个线程,而且子程代码位于当前

//进程,hInstance必须为NULL。可以很简单的设定其为本应用程序的实例句柄。

//

//threadedId 与安装的钩子子程相关联的线程的标识符。如果为0,钩子子程与所有的线程关联,即为全局钩子。

//

// 如果设置钩子失败

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");

}

当然,是获得当页面已经完成了从事件相关的事件发生时加载信息-wegocomsg DocumentCompleted。导航发生前

在BeforeNavigate2

。 (当刷新页面后,此事件不会发生) - 中东

CommandStateChange

状态发生变化时,命令这事件告诉您何时做出

BR>

的DocumentComplete

时或禁用后退和前进的菜单类似或按钮来加载全部完成整个文档发生,如果您刷新页面,此事件不会激发。

DownloadBegin

当下载时,该项目开始,这一事件也刷新发生(的IWebBrowser2 ::

NavigateComplete2

DownloadComplete

党的刷新会出现下载整个项目完工)。发生该事件也发生在完成刷新页面。

当完成整个导航此事件对应于在BeforeNavigate2。

项NewWindow2

在新窗口被创建来显示网页或其他资源时发生。例如,你在打开一个新的窗口,连接

OnFullScreen

全屏财产的方式在页面上,当时间发生改变。此事件带有VARIANT_ BOOL类型的输入参数指示是否IE浏览器的全屏(全屏)模式(VARIANT_TRUE),或在正常模式(VARIANT_FALSE)。该发生的时候

OnMenuBar

菜单栏MenuBar属性被改变。一个VARIANT_ BOOL类型的输入参数指的是IE浏览器的菜单栏属性是可见的(VARIANT_TRUE)或隐藏(VARIANT_假)。

OnQuit

当Internet Explorer正在退出发生。当用户关闭浏览器或调用Quit方法的事件。当时间发生

OnStatusBar

状态栏属性更改。活动开展VARIANT_ BOOL类型的输入参数指示是否IE浏览器的状态栏可见(VARIANT_TRUE)或隐藏(VARIANT_FALSE)。

OnTheaterMode

时TheaterMode属性更改。活动开展VARIANT_ BOOL类型的输入参数指示是否IE浏览器的状态栏可见(VARIANT_TRUE)或隐藏(VARIANT_FALSE)。在工具栏属性更改时发生

OnToolBar

。活动进行VARIANT_ BOOL类型的输入参数指示是否IE浏览器的状态栏可见(VARIANT_TRUE)或隐藏(VARIANT_FALSE)。

OnVisible

时,会出现web浏览器将显示或隐藏。本次活动进行VARIANT_ BOOL类型的输入参数指示是否IE浏览器的状态栏可见(VARIANT_TRUE)或隐藏(VARIANT_FALSE)。

ProgressChange

当下载进度更新

时发生

的PropertyChange在PropGOLuxury

当发生属性更改时间。通常情况下,当PutProperty方法被调用

StatusTextChange

Internet Explorer和改变状态栏时,WebBrowser控件发生。即使没有状态栏WebBrowser控件。 StatusTextChange给客户一个机会改变状态栏

TitleChange

。当文档对象的标题是可用还是在发生变化时

简单点是这个

Private Sub Form_KeyPress(KeyAscii As Integer)

DebugPrint KeyAscii

End Sub

如果你所指的全局是包括系统级别的按键截获,那你得掌握写Hook钩子程序的方法,VB不能直接做到。要用Win API里Hook相关的函数。不是一两句话能教会你的。

如果是在自己的程序中,可以利用自身的按键事件,如果是全局键盘,那就要用到键盘hook技术了,比较复杂。

Private Sub Form_Load()

Label1Caption = ""

Text1 = ""

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then '回车键

Label1Caption = 1

ElseIf KeyAscii = 8 Then '退格键

Label1Caption = 2

Else '其他按键

Label1Caption = 3

End If

MeCls

Print KeyAscii

End Sub

你需要用到以下API

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal IParam As String) As Integer

Public Declare Function SendMessage2 Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal IParam As StringBuilder) As Integer

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, ByVal IpszClass As String, ByVal IpszWindow As String) As IntPtr

具体用途,请自行百度。

以上就是关于vb.net 获取键盘输入的字符全部的内容,包括:vb.net 获取键盘输入的字符、vb获取webrowser网页某一按钮并点击、vb 怎么取得按下键的ASCII 码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9306023.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存