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 SHIFT
或 CTRL
。相反,您需要使用 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);
}
这是一个如何按 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
如何使用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 SHIFT
或 CTRL
。相反,您需要使用 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);
}
这是一个如何按 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