이 콘솔 프로그램에서 달성하고자하는 것은 user32.dll을 사용하여 키를 누르고있을 수 있습니다. 나는 확장 된 키를 보내지 않는다는 것을 안다. 하지만 나는 scancode가 맞을 때 그것을 보내는 것을 생각하지 않는다. 그리고 나는 열쇠를 붙잡기 위해 그것을 올바른 깃발로 보내고 있다고 생각합니다. 나는 또한 열쇠를해야한다는 것을 압니다. 하지만 지금 당장 필요한 건 열쇠를 내려 놓는 것뿐입니다. 어떤 도움이 많이 아래의 코드는 keybd_event
의키를 누르고있는 방법 C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace pressand_hold
{
class Program
{
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
const int VK_UP = 0x26; //up key
const int VK_DOWN = 0x28; //down key
const int VK_LEFT = 0x25;
const int VK_RIGHT = 0x27;
const uint KEYEVENTF_KEYUP = 0x0002;
const uint 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,
}
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 초 후에 아무 일도 일어나지 않는다. – hurnhu
왜 자동화를 사용하지 않는가? –