키보드 동작 (SendInput/SendKeys/등)을 위장하는 모든 일반적인 방법을 시도했지만 DirectInput을 사용하는 게임에서는 작동하지 않는 것으로 보입니다. 많은 독서와 검색을 한 후에 나는 Interception을 우연히 발견했습니다. 이것은 여러분의 장치에 연결할 수있는 C++ 라이브러리입니다.차단 키를 보내는 중첩 키
C++ (Nothing existed for C#)로 작업 한 이후로 매우 오랜 시간이 걸렸으므로이 문제에 다소 문제가 있습니다. 아래 샘플 코드를 붙여 넣었습니다.
어쨌든 이것을 사용하여 코드에서 주요 동작을 시작하는 것처럼 보이나요? 샘플은 모두 장치에 연결하고 작업을 다시 작성합니다 (x 키 인쇄 y, 마우스 축 반전 등).
enum ScanCode
{
SCANCODE_X = 0x2D,
SCANCODE_Y = 0x15,
SCANCODE_ESC = 0x01
};
int main()
{
InterceptionContext context;
InterceptionDevice device;
InterceptionKeyStroke stroke;
raise_process_priority();
context = interception_create_context();
interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP);
/*
for (int i = 0; i < 10; i++)
{
Sleep(1000);
stroke.code = SCANCODE_Y;
interception_send(context, device, (const InterceptionStroke *)&stroke, 1);
}
*/
while(interception_receive(context, device = interception_wait(context), (InterceptionStroke *)&stroke, 1) > 0)
{
if(stroke.code == SCANCODE_X) stroke.code = SCANCODE_Y;
interception_send(context, device, (const InterceptionStroke *)&stroke, 1);
if(stroke.code == SCANCODE_ESC) break;
}
내가 주석 처리 한 코드는 시도하지 않은 코드입니다.
그냥 명확히하기 위해 설명하는 방식으로, 하나의 키를 누르면 더 많은 키를 얻는 것입니까? 키를 누르지 않고 실제로 키를 누르는 방법을 찾고 있습니다. 예를 들어, 응용 프로그램에서 버튼을 클릭하면 "control + a"에 대한 키 누르기를 보낼 수 있습니다. –
정상적으로 수행 할 수 있습니다. 입력을 위조하려는 키보드 ID를 식별하고 변수에 저장하면됩니다.이 경우 장치 ID는 변수 디바이스에 저장됩니다. 주어진 장치와 관련된 ID를 알고 나면 원하는대로 이벤트를 보낼 수 있습니다. 일반적으로 PS/2 장치는 ID가 INTERCEPTION_KEYBOARD (0)과 같아 지므로 USB 장치는 INTERCEPTION_KEYBOARD (1) 이상을 얻습니다. –