[英]how to press and hold a key C#
我試圖在這個控制台程序中完成的是能夠通過使用 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();
}
}
keybd_event
第二個和第三個參數是錯誤的。
第二個參數應該是 0x45
第三個參數不能是 8。必須是 0 才能按下鍵。
可能是這樣的:
static void Main(string[] args)
{
Thread.Sleep(2000);
// push V key
keybd_event((byte)ScanCodeShort.KEY_V, 0x45, 0, 0);
Console.WriteLine("done");
Console.Read();
}
ScanCode 只不過是字符串(數字或字母數字)的可視化表示。
小心你的代碼。 47 是 0x2F en hexa,在Virtual Key Codes 中是 VK_HELP
KEY_V = 86,
* 完整代碼 *
using System;
using System.Runtime.InteropServices;
using System.Threading;
namespace pressand_hold
{
internal class Program
{
internal enum ScanCodeShort : short
{
KEY_0 = 48,
KEY_1,
KEY_2,
KEY_3,
KEY_4,
KEY_5,
KEY_6,
KEY_7,
KEY_8,
KEY_9,
KEY_A = 65,
KEY_B,
KEY_C,
KEY_D,
KEY_E,
KEY_F,
KEY_G,
KEY_H,
KEY_I,
KEY_J,
KEY_K,
KEY_L,
KEY_M,
KEY_N,
KEY_O,
KEY_P,
KEY_Q,
KEY_R,
KEY_S,
KEY_T,
KEY_U,
KEY_V,
KEY_W,
KEY_X,
KEY_Y,
KEY_Z,
}
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
private static void Main(string[] args)
{
Thread.Sleep(2000);
keybd_event((byte)ScanCodeShort.KEY_V, 0x45, 0, 0);
Console.WriteLine("done");
Console.Read();
}
}
}
要按住鍵,請使用循環( while()
、 for()
等...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.