VB.NET 使用 SendKeys.Send

VB.NET using SendKeys.Send

如何使用Sendkey发送right Control + shift in vb.net ??

我试过了:

SendKeys.Send("^(shift)")

但它给了我一个space。

您应该查阅有关 SendKeys 方法的文档:https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.devices.keyboard.sendkeys

关于 SHIFT 键:

To combine a key with SHIFT, precede the key code with + (plus sign).

关于 CTRL 键:

To combine a key with CTRL, precede the key code with ^ (caret).

现在,SendKeys 不支持专门发送 right/left SHIFTCTRL。相反,您需要使用 SendMessage API 并发送 Keys.RControlKey 枚举值。这是一个 C# 示例(可以轻松转换为 VB.NET):

using System.Runtime.InteropServices;  
using System.Diagnostics;  
 
private const int WM_KEYDOWN = 0x100;  
 
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]  
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);  

private void button1_Click(object sender, EventArgs e)  
{  
    Keys key = Keys.RShiftKey;//Right shift key  
    SendMessage(Process.GetCurrentProcess().MainWindowHandle, WM_KEYDOWN, (int)key, 1);  
}  
 
protected override void DefWndProc(ref Message m)  
{  
    if (m.Msg == WM_KEYDOWN)  
        MessageBox.Show(m.WParam.ToString());  
 
    base.DefWndProc(ref m);  
}

来自 MSDN 论坛的 link 原文:https://social.msdn.microsoft.com/Forums/en-US/dd6406e8-b6bf-4166-82a0-6d533def38a5/how-to-send-leftright-shift-key?forum=csharpgeneral#5734fe34-407d-4edc-ae41-9b1eaa12bb23-isAnswer

这是一个如何按 CapsLock 键的工作示例。我想你可以通过 shift+ctrl 来解决:

   Private Declare Sub keybd_event Lib "user32" ( _
        ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Integer, _
        ByVal dwExtraInfo As Integer _
    )
    Private Const VK_CAPITAL As Integer = &H14
    Private Const KEYEVENTF_EXTENDEDKEY As Integer = &H1
    Private Const KEYEVENTF_KEYUP As Integer = &H2

    Private Sub TestKey()

        ' Toggle CapsLock

        ' Simulate the Key Press
        keybd_event(VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)

        ' Simulate the Key Release
        keybd_event(VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)

    End Sub