【发布时间】:2019-09-20 14:37:40
【问题描述】:
谁能告诉我如何在 vb.net 中发送快捷键?快捷键是 {LEFTWIN} + {ADD} 和 {LEFTWIN} + {SUBTRACT}。试过 SendKeys.Send 不行。
【问题讨论】:
标签: vb.net
谁能告诉我如何在 vb.net 中发送快捷键?快捷键是 {LEFTWIN} + {ADD} 和 {LEFTWIN} + {SUBTRACT}。试过 SendKeys.Send 不行。
【问题讨论】:
标签: vb.net
无法通过SendKeys.Send() 发送LWin。为此,您必须 P/Invoke WinAPI 的 SendInput() function。
这是我为此目的创建的包装类:
编辑(2019-09-20)
InputHelper早就被移到了自己的库中。答案已更新以反映这一变化。从 GitHub 下载 InputHelper:
https://github.com/Visual-Vincent/InputHelper/releases
以下是您的使用方法:
InputHelper.Keyboard.SetKeyState(Keys.LWin, True) 'Hold LWin.
InputHelper.Keyboard.PressKey(Keys.Add) 'Press the ADD key.
InputHelper.Keyboard.SetKeyState(Keys.LWin, False) 'Release LWin.
【讨论】:
最后这对我有用:)
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As IntPtr, ByVal bScan As IntPtr, ByVal dwFlags As IntPtr, ByVal dwExtraInfo As IntPtr)
Private Const VK_STARTKEY = &H5B
Private Const VK_SUBTRACT = &H6D
Private Const VK_ADD = &H6B
Private Const VK_ESCAPE = &H1B
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_KEYDOWN = &H
Call keybd_event(VK_STARTKEY, 0, KEYEVENTF_KEYDOWN, 0)
Call keybd_event(VK_ADD, 0, KEYEVENTF_KEYDOWN, 0)
Call keybd_event(VK_ADD, 0, KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_STARTKEY, 0, KEYEVENTF_KEYUP, 0)
编辑 keybd_event 已弃用,因此我将转到 SendInput()。第一个解决方案最适合我:-)
【讨论】:
Call 关键字是不必要的。 B) keybd_event() 函数已弃用并被 SendInput() 取代,因此它可能会在未来被删除。
VK_ 键映射到System.Windows.Forms.Keys enumeration,因此您也不必将VK_ 声明复制到您的代码中。 (:
keybd_event() documentation:Note: This function has been superseded. Use SendInput instead.
你说你试过
SendKeys.Sned("KEY")
正确的是
SendKeys.Send("KEY")
除此之外,“Leftwin”指的是什么键?
抱歉,我从来没有使用过 Sendkeys,而且我知道 Winkey 的“LWIN”...
顺便说一句,尝试使用
SendKeys.Send(Keys.LWin)
SendKeys 发送字符串,所以这个 SendKeys.Send(Keys.LWin) 实际上应该发送 Keys.LWin 的代码
【讨论】:
SendKeys.Send() 采用字符串(如您所说),您传递的枚举要么被转换为“LWin”(这将导致它逐个字符地输入“LWin”)或它将被转换为枚举值(即 91)的字符串表示形式,并改为逐个字符地发送该字符。 -- SendKeys.Send() 方法不使用键码输入。它只是将输入的字符串解析为键代码数组,然后将其传递给执行按键操作的 WinAPI 函数。根本无法使用SendKeys 发送 LWin。