如何解决VB.NET 使用 SendKeys.Send
vb.net中如何使用Sendkey发送right Control + shift??
我试过了:
SendKeys.Send("^(shift)")
但它给了我一个空间。
解决方法
您应该查阅有关 SendKeys 方法的文档:https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.devices.keyboard.sendkeys
关于 SHIFT
键:
要将键与 SHIFT 组合在一起,请在键代码前加上 +(加号)。
关于 CTRL
键:
要将键与 CTRL 组合在一起,请在键代码前加上 ^(脱字符号)。
现在,SendKeys 不支持专门发送右/左 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,KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP,0)
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。