【发布时间】:2014-05-03 08:07:13
【问题描述】:
我试图在这个控制台程序中完成的是能够通过使用 user32.dll 按住一个键。我知道我没有发送扩展密钥。但我也不认为将其作为扫描码发送是正确的。而且我认为我将正确的标志传递给它只是握住钥匙..我也知道我将不得不做一个钥匙。但截至目前,我所需要的就是按下钥匙。任何帮助将不胜感激,截至目前,下面的代码不起作用
public class Program
{
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
const int VK_UP = 0x26, VK_DOWN = 0x28, VK_LEFT = 0x25, VK_RIGHT = 0x27;
const uint KEYEVENTF_KEYUP = 0x0002, SCANCODE = 0x0008;
const int KEY_0 = 11;
internal enum ScanCodeShort : short
{
KEY_9 = 10, KEY_A = 30, KEY_B = 48, KEY_C = 46, KEY_D = 32, KEY_E = 18, KEY_F = 33,
KEY_G = 34, KEY_H = 35, KEY_I = 23, KEY_J = 36, KEY_K = 37, KEY_L = 38, KEY_M = 50, KEY_N = 49,
KEY_O = 24, KEY_P = 25, KEY_Q = 16, KEY_R = 19, KEY_S = 31, KEY_T = 20, KEY_U = 22, KEY_V = 47,
KEY_W = 17, KEY_X = 45, KEY_Y = 21, KEY_Z = 44, }
private static void Main(string[] args)
{
Thread.Sleep(2000);
// push V key
keybd_event((byte)ScanCodeShort.KEY_V, 0x45, 0, 0);
// release V key
keybd_event((byte)ScanCodeShort.KEY_V, 0x45, KEYEVENTF_KEYUP, 0);
Console.WriteLine("done");
Console.Read();
}
}
【问题讨论】:
-
怎么不行?
-
@MartinLiversage 没有输入任何内容。运行此程序后,我单击记事本,2 秒后没有任何反应
-
您为什么不使用自动化?
-
@DavidHeffernan 自动化?抱歉,当涉及到 c# 中的 user32.dll 时,我有点新,你能解释一下吗?
-
这里没有与 DLL 相关的内容。或者你的意思是pinvoke?无论如何,如果您想自动化另一个流程,请使用自动化工具。 UI自动化。