Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#user32.dll keybd_事件不工作_C#_Keyboard_Keyboard Shortcuts_Simulate_System32 - Fatal编程技术网

C#user32.dll keybd_事件不工作

C#user32.dll keybd_事件不工作,c#,keyboard,keyboard-shortcuts,simulate,system32,C#,Keyboard,Keyboard Shortcuts,Simulate,System32,我试图通过使用user32.dll keybd_事件模拟按键来突出显示文本框中的文本(使用SHIFT+RIGHT_ARROW Win快捷方式),但它不起作用: [DllImport("user32.dll")] public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); public const int SHIFT_LEFT = 0xA0; public const int

我试图通过使用user32.dll keybd_事件模拟按键来突出显示文本框中的文本(使用SHIFT+RIGHT_ARROW Win快捷方式),但它不起作用:

[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public const int SHIFT_LEFT = 0xA0;
public const int RIGHT = 0x27;

....

keybd_event(SHIFT_LEFT, 0, 0, 0);
keybd_event(RIGHT, 0, 0, 0);
keybd_event(RIGHT, 0, 2, 0);
keybd_event(SHIFT_LEFT, 0, 2, 0);
光标向右移动,但文本未高亮显示。。。有人能解释为什么吗

编辑: 为什么在屏幕上使用Windows


KEYEVENTF_EXTENDEDKEY(0x0001):如果指定,扫描代码前面会有一个前缀字节,其值为0xE0(224)。
所以,我这样做了:

keybd_event(SHIFT_LEFT, 0, 1 | 0, 0);
keybd_event(RIGHT, 0, 1 | 0, 0);
keybd_event(RIGHT, 0, 1 | 2, 0);
keybd_event(SHIFT_LEFT, 0, 1 | 2, 0);
问题解决了

可以找到有关KEYEVENTF_EXTENDEDKEY的详细说明。

MSDN上已经公开了一些函数,我不需要解释。以下是在不同系统上工作的代码基本信息:

    ''' <summary>
    ''' Simulate key down event on Windows machine
    ''' </summary>
    ''' <param name="nCode">key</param>
    ''' <remarks></remarks>
    Public Sub SetKeyDown(ByVal nCode As Integer)
        Dim vKey As Byte = Convert.ToByte(nCode)
        Dim scanCode As Integer = MapVirtualKey(vKey, 0)
        Dim ret As Integer = keybd_event(vKey, CByte(scanCode), KEYEVENTF_EXTENDEDKEY Or 0, IntPtr.Zero)
    End Sub

    ''' <summary>
    ''' Simulate key up event on Windows machine
    ''' </summary>
    ''' <param name="nCode">key</param>
    ''' <remarks></remarks>
    Public Sub SetKeyUp(ByVal nCode As Integer)
        Dim vKey As Byte = Convert.ToByte(nCode)
        Dim scanCode As Integer = MapVirtualKey(vKey, 0)
        Dim ret As Integer = keybd_event(vKey, CByte(scanCode), KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, IntPtr.Zero)
    End Sub
“”
''在Windows计算机上模拟按键关闭事件
''' 
''键
''' 
Public Sub SetKeyDown(ByVal nCode为整数)
Dim vKey作为字节=转换为字节(nCode)
Dim扫描代码为整数=MapVirtualKey(vKey,0)
Dim ret As Integer=keybd_事件(vKey、CByte(扫描码)、KEYEVENTF_EXTENDEDKEY或0、IntPtr.Zero)
端接头
''' 
''在Windows计算机上模拟密钥更新事件
''' 
''键
''' 
公共子设置密钥(ByVal nCode为整数)
Dim vKey作为字节=转换为字节(nCode)
Dim扫描代码为整数=MapVirtualKey(vKey,0)
Dim ret As Integer=keybd_事件(vKey、CByte(扫描码)、KEYEVENTF_EXTENDKEY或KEYEVENTF_KEYUP、IntPtr.Zero)
端接头
MSDN参考资料 Keybd_事件:

MapVirtualKey:


尝试使用
0x10
VK\u移位
?可能文本框没有查看特定的Shift键,但如果Shift键已关闭。仍然存在相同的问题…伪造输入可能不是问题的解决方案是否有其他解决方案…?如果它仅适用于左Shift键,则不能忽略扫描代码。