【问题标题】:Visual Basic, what is the send key for this button?Visual Basic,这个按钮的发送键是什么?
【发布时间】:2015-08-25 09:46:26
【问题描述】:

这是我所指的按钮的链接 http://blog.laptopmag.com/wpress/wp-content/uploads/2012/07/ThinkPad-Keyboard-Face-Off_g4-T420.jpg

我试图找到它的格式与这种格式一致

{PGUP} = page up button
{LEFT} = left arrow
{ESC} = Escape

有人知道如何将它作为 sendkey 发送吗?更喜欢使用这种面向键盘的方法,而不是右键单击屏幕,因为这会导致通过模拟器屏幕查找位置时出现问题。

向任何可以帮助我的人干杯,即使有人确定它不存在,这意味着我可以专注于其他事情 :)

编辑:

TL;DR

"+{F10} 可能是您要调出所谓的“上下文菜单”的内容,但是如果您使用的是 citrix(或类似)应用程序,那么您可能会遇到一些问题,即没有焦点。 " :)

所以我自己发现了什么。有几种方法可以发送我现在知道的是“上下文菜单”键。然而,只有一个适用于我的情况。 如果我能够为 sendkey 编写代码,那么 drarig29 的答案可能会奏效,但对于我正在使用的应用程序(不幸的是,BluePrism 我不能那样做)这是我的解决方案(这不起作用) "+{F10}" 所以 '+' = SHIFT 和 F10 = F10 按钮。因此,shift F10 适用于正在寻找一种方法来调出“右键单击菜单”的人,但这对我不起作用,尽管我不知道为什么。我正在通过 citrix(模拟器屏幕)自动化应用程序,即使我在屏幕上单击鼠标并使用 sendKey“+{F10}”,它也不会使上下文菜单屏幕出现在应用程序上。所以我手动尝试了它并且很有趣,它也无法调出上下文菜单。然后我发现如果您右键单击屏幕区域并出现菜单,那么发送键会突然正常工作。我认为问题在于某些窗口处于焦点状态,而有些窗口则没有,但我必须解决它以确保看到我向屏幕的右侧区域发送了“点击”,它应该处于焦点位置。但无论如何,为帮助欢呼:)

【问题讨论】:

    标签: vb.net sendkeys


    【解决方案1】:

    这是上下文菜单键。它的密钥代码是 93。要使用它的密钥代码发送密钥,请使用:

    <DllImport("user32.dll")> _
    Private Shared Function keybd_event(bVk As Byte, bScan As Byte, dwFlags As UInteger, dwExtraInfo As Integer) As Boolean
    End Function
    
    Const KEYEVENTF_KEYDOWN = &H0
    Const KEYEVENTF_KEYUP = &H2
    
    Private Sub SendKey(KeyCode As Integer)
        keybd_event(CByte(KeyCode), 0, KEYEVENTF_KEYDOWN, 0)
        keybd_event(CByte(KeyCode), 0, KEYEVENTF_KEYUP, 0)
    End Sub
    

    你必须导入System.Runtime.InteropServices (Imports System.Runtime.InteropServices)。

    有了这个,要发送上下文菜单键,使用SendKey(93)

    编辑:

    Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
    
    Const MOUSEEVENTF_LEFTDOWN As Int32 = &H2
    Const MOUSEEVENTF_LEFTUP As Int32 = &H4
    Const MOUSEEVENTF_RIGHTDOWN As Int32 = &H8
    Const MOUSEEVENTF_RIGHTUP As Int32 = &H10
    
    Enum ClickType
        Left = 0
        Right = 1
    End Enum
    
    Sub SendClick(ClickType As ClickType, DestX As Integer, DestY As Integer)
        Select Case ClickType
            Case ClickType.Left
                Cursor.Position = New Point(DestX, DestY)
                mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
                mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
            Case ClickType.Right
                Cursor.Position = New Point(DestX, DestY)
                mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
                mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
        End Select
    End Sub
    

    使用之前的方法:SendClick(ClickType.Left, 20, 20)

    【讨论】:

    • 好主意,谢谢你的提示,但是由于窗口焦点的原因和我正在设计的应用程序,我不能在我的软件中使用这种方法。它就像一个表面自动化工具,没有区域可以将代码放入我希望使用代码的部分:(但如果我再次遇到这个问题,我会记住这段代码:)
    • @DexterWhelan 相反,如果您知道屏幕位置(或者如果您能够找到它),您可以右键单击该位置。如果您感兴趣,请查看我的编辑。
    • 将此标记为正确,因为它最终使我得到了正确的答案。
    猜你喜欢
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多