2012-01-11 3 views
0

키보드 동작 (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; 
    } 

내가 주석 처리 한 코드는 시도하지 않은 코드입니다.

답변

1

키 누르기를 얻으려면 UP 및 DOWN 상태의 키 상태를 조정해야합니다. while 루프에서 변수 장치이 interception_wait에 의해 반환되고 주석 처리 된 코드는 어떤 이벤트를 보내겠습니까 ?? 장치이 (가) 초기화되지 않았습니다. 코드를 잊어 버리고 좀 더 기본적인 것을 시도해보십시오. interception_send 호출을 사용하여 루프 내부의 라인을 살펴본 다음 두 개를 더 호출해야하지만, INTERCEPTION_KEY_DOWN 및 INTERCEPTION_KEY_UP을 사용하여 각 호출 전에 stroke.state를 변경하여 가짜 이벤트를 생성하는 것을 잊지 마십시오. 각 키보드 이벤트마다 여분의 키가 생깁니다.

또한 INTERCEPTION_FILTER_KEY_DOWN 대신 INTERCEPTION_FILTER_KEY_ALL을 사용해 볼 수 있습니다. INTERCEPTION_FILTER_KEY_UP. 화살표 키는 웹 사이트에서 언급 한대로 특별 할 수 있습니다.

+0

그냥 명확히하기 위해 설명하는 방식으로, 하나의 키를 누르면 더 많은 키를 얻는 것입니까? 키를 누르지 않고 실제로 키를 누르는 방법을 찾고 있습니다. 예를 들어, 응용 프로그램에서 버튼을 클릭하면 "control + a"에 대한 키 누르기를 보낼 수 있습니다. –

+0

정상적으로 수행 할 수 있습니다. 입력을 위조하려는 키보드 ID를 식별하고 변수에 저장하면됩니다.이 경우 장치 ID는 변수 디바이스에 저장됩니다. 주어진 장치와 관련된 ID를 알고 나면 원하는대로 이벤트를 보낼 수 있습니다. 일반적으로 PS/2 장치는 ID가 INTERCEPTION_KEYBOARD (0)과 같아 지므로 USB 장치는 INTERCEPTION_KEYBOARD (1) 이상을 얻습니다. –

관련 문제