2016-11-11 6 views
3

Mac ID과 비슷한 응용 프로그램을 작성하려고하지만 약간 다른 옵션이 있습니다.Mac OS에서 C++의 타이핑/키 누르기를 시뮬레이트하는 방법은 무엇입니까?

모든 유사한 응용 프로그램이 키 체인에 암호를 저장하고 단순히 로그인 화면의 암호 필드에 입력하는 것을 볼 수 있습니다.

여기 Apple docsRobot에 기초하여 작성된 제 원래 코드 :

#include <ApplicationServices/ApplicationServices.h> 

void Press(int key); 
void Release(int key); 
void Click(int key); 

int main() { 
    Press(56); 
    Click(6); 
    Release(56); 
} 

void Press(int key) { 
    // Create an HID hardware event source 
    CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); 

    // Create a new keyboard key press event 
    CGEventRef evt = CGEventCreateKeyboardEvent(src, (CGKeyCode) key, true); 

    // Post keyboard event and release 
    CGEventPost (kCGHIDEventTap, evt); 
    CFRelease (evt); CFRelease (src); 

    usleep(60); 
} 

void Release(int key) { 
    // Create an HID hardware event source 
    CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); 

    // Create a new keyboard key release event 
    CGEventRef evt = CGEventCreateKeyboardEvent(src, (CGKeyCode) key, false); 

    // Post keyboard event and release 
    CGEventPost (kCGHIDEventTap, evt); 
    CFRelease (evt); CFRelease (src); 

    usleep(60); 
} 

void Click(int key) { 
    Press(key); 
    Release(key); 
} 

이것은 출력하는 'Z'를 생각하지만, 그것은 'Z'를 출력하고있다. 문서 변경자 키에 따르면 "키"를 눌러야합니다.

무엇이 문제입니까?

그런 다음 Google에서이 솔루션의 정확성에 대해서는 100 %는 아니지만 this 내 SHIFT 문제를 해결 한 것처럼 보인 답변을 찾았지만 " ÁÉÍÓÜÖ ".

내가 어떻게 할 수 있습니까? 처음부터 가능합니까?

나는 이것이 이미 하나 이상의 질문이지만, 여전히 동일한 문제를 해결하려고 노력하고 있으며 지금까지 완벽한 해결책을 찾을 수 없었기 때문에 다른 사람들이이 답을 얻는 것이 좋을 것이라고 생각합니다.

미리 감사드립니다. 도움을 주시면 감사하겠습니다.

답변

1

원하는 캐릭터를 얻을 수 있습니다. 거의 올바른 경로에 있습니다. 당신이 관심있는 유니 코드 문자를 지정해야한다고 생각합니다. 유니 코드를 보내고 키 코드로 kVK_Space를 사용하면 키를 보내는 대신 필요한 것을 가지고 있어야하며 이벤트를 게시하기 전에 다음 코드 하나를 호출 할 수 있습니다 객체

if (unicode){ 
unichar str[2] = {0}; 
str[0] = (unichar)unicode; 
memcpy(str, &unicode, 4); 
CGEventKeyboardSetUnicodeString(theEvent, 1, str); 
} 
+0

나는이 답변에 현상금을 줬지만 실제로는 현재 형태로 도움이되지 않습니다. 여기에 유니 코드 란 무엇입니까? 'const char * unicode = "Á";'를 사용하여 시도했지만 작동하지 않았습니다. –

+0

유니 코드 변수는 "Á"로 인쇄하려는 모든 문자의 정수 (위의 예에서는 uint16_t)입니다. – MacGeek