【问题标题】:How send Lwin shortcut key in vb.net如何在 vb.net 中发送 Lwin 快捷键
【发布时间】:2019-09-20 14:37:40
【问题描述】:

谁能告诉我如何在 vb.net 中发送快捷键?快捷键是 {LEFTWIN} + {ADD} 和 {LEFTWIN} + {SUBTRACT}。试过 SendKeys.Send 不行。

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    无法通过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.
    

    【讨论】:

    • 非常感谢哥们:)
    【解决方案2】:

    最后这对我有用:)

    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)
    

    键码:http://vbcity.com/cfs-filesystemfile.ashx/__key/CommunityServer.Components.PostAttachments/00.00.11.85.52/Api.txt

    编辑 keybd_event 已弃用,因此我将转到 SendInput()。第一个解决方案最适合我:-)

    【讨论】:

    • 很好,但我有两个注意事项:A) Call 关键字是不必要的。 B) keybd_event() 函数已弃用并被 SendInput() 取代,因此它可能会在未来被删除。
    • 感谢您的告知。那我就用 SendInput() 吧。
    • 没问题。您找到了自己的解决方案真是太好了,但是那里的一些帖子/教程开始变得过时了。 -- 顺便说一句,VK_ 键映射到System.Windows.Forms.Keys enumeration,因此您也不必将VK_ 声明复制到您的代码中。 (:
    • 因为我喜欢验证我的所有陈述,这里引用keybd_event() documentationNote: This function has been superseded. Use SendInput instead.
    【解决方案3】:

    你说你试过

     SendKeys.Sned("KEY")
    

    正确的是

     SendKeys.Send("KEY")
    

    除此之外,“Leftwin”指的是什么键?

    编辑:

    抱歉,我从来没有使用过 Sendkeys,而且我知道 Winkey 的“LWIN”...

    顺便说一句,尝试使用

    SendKeys.Send(Keys.LWin)
    

    SendKeys 发送字符串,所以这个 SendKeys.Send(Keys.LWin) 实际上应该发送 Keys.LWin 的代码

    【讨论】:

    • 我认为他在写问题时只是拼错了函数。顺便说一下,LWinLeftWinleft windows key
    • 由于SendKeys.Send() 采用字符串(如您所说),您传递的枚举要么被转换为“LWin”(这将导致它逐个字符地输入“LWin”)或它将被转换为枚举值(即 91)的字符串表示形式,并改为逐个字符地发送该字符。 -- SendKeys.Send() 方法不使用键码输入。它只是将输入的字符串解析为键代码数组,然后将其传递给执行按键操作的 WinAPI 函数。根本无法使用SendKeys 发送 LWin。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多