VB通过user32模拟击键
Posted
技术标签:
【中文标题】VB通过user32模拟击键【英文标题】:VB Simulate keystrokes via user32 【发布时间】:2015-08-24 19:54:48 【问题描述】:我想像鼠标点击一样模拟击键,我碰巧在网上找到了一些示例代码。
声明
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Declare Function apimouse_event Lib "user32.dll" Alias "mouse_event" (ByVal dwFlags As Int32, ByVal dX As Int32, ByVal dY As Int32, ByVal cButtons As Int32, ByVal dwExtraInfo As Int32) As Boolean
模拟鼠标点击
Call apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
上面的代码甚至可以在directx应用程序中模拟鼠标点击。是否也有类似的方法来模拟击键?如果你能解释一下上面的代码是做什么的,那就太好了,因为我不太明白。
【问题讨论】:
转到 codeproject.com 并搜索 全球鼠标和键盘库。第一个热门应该是 Brian Geiman 的一个项目。该项目实现了您需要的鼠标和键盘 api,并有一个简单的演示项目,用于记录和回放鼠标和键盘事件。 尽管我了解 C# 语法,但我很难在我的 VB.net 项目中实现相同的代码。此外,我正在寻找一种更简单的替代方案,而不是仅仅为此功能创建多个类。 【参考方案1】:当然,您可以使用“键盘事件”,而不是使用“鼠标事件”消息。看看the keybd_event page at pinvoke.net 的一些例子。
请记住,它们实际上是模拟用户在键盘上敲击的按键,因此它们总是被发送到具有焦点的控件(“前景”)。如果您需要将特定的击键发送到隐藏窗口或背景窗口,您正在寻找的是SendMessage 相关功能。
【讨论】:
谢谢,我让它可以在记事本上工作,但不能在 Directx 上工作。也许这是我正在寻找的其他东西 在不了解应用程序或您的项目的详细信息的情况下,我猜测 DirectX 应用程序没有焦点,或者在某些时候失去焦点。我提到的SendMessage
函数允许您通过窗口句柄来定位特定的消息循环,因此您可以保证将消息发送到正确的目标。 SendMessage
使用起来有些复杂,但存在相当多的 examples。以上是关于VB通过user32模拟击键的主要内容,如果未能解决你的问题,请参考以下文章