2016-11-11 4 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」を出力しています。ドキュメントの修飾キーによれば、キーは「押した」必要があります。

どうしたのですか?

その後、私はthis私のシフト問題を解決するように思われたので答えが見つかりました(私はこのソリューションの正しさについては100%ではありません)。しかし、私はこのような文字を出力することができないようです。 ÁÉÍÓÜÖ "。

どうすればいいですか?最初は可能ですか?

これはすでに複数の質問ですが、私はまだ同じ問題を解決しようとしていますが、これまでのところ完璧な解決策を見つけることができなかったので、他の人がこの回答を得てうれしいと思います。

ありがとうございました。何か助けていただければ幸いです。

答えて

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

unicode変数は、 "Á"の場合、印刷したい任意の文字の整数(上記の例ではuint16_t)です。 – MacGeek

関連する問題