我想在Windows中獲取類似GetKeyboardLayout(threadId)的鍵盤佈局。 threadId是具有活動窗口的應用程序的ID。我想將虛擬鍵碼翻譯成當前語言的字符。OS X.如何在守護進程中獲取當前所有系統活動窗口的TISInputSourceRef(鍵盤佈局)?
現在我使用TISCopyCurrentKeyboardInputSource()函數,但它沒有參數,它只返回「U」。語言。我認爲這是守護進程的佈局。 另外我無法使用TISCopyInputSourceForLanguage(language)函數的TISInputSourceRef轉換代碼。它只返回美國字符。
更新: Okey。我找到了轉換keyCodes的解決方案。我使用參數修飾符等於0來調用函數UCKeyTranslate。但是我找不到如何獲取活動窗口的輸入源或者只是任何正在運行的應用程序。
更新2:的plist路徑是/庫/ LaunchAgents
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.keylogger</string>
<key>Program</key>
<string>/Users/Titan/Desktop/keylogger</string>
<key>ProgramArguments</key>
<array>
<string>keylogger</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
謝謝。我會朝這個方向看,然後寫下我的結果。 – 2014-11-02 08:42:20
我讀過這篇文章,但我仍然不明白如何獲得最前面的應用程序的輸入源。這是我的第一個這樣的程序,我不知道這是什麼用途。程序必須爲每個用戶寫一個日誌。它不需要與中央守護進程通信(如我所想)。 – 2014-11-02 11:43:12
我已經更新了我的答案,並提供了進一步的解釋和示例代碼 – 2014-11-02 17:38:58