我正在尝试编写类似于Mac ID的应用程序,但有一些不同的选择。
至于我都可以看到类似的应用在那里存储在Keychain密码,只需在登录屏幕上的密码字段中键入它。
#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搜索后,我发现这个这似乎解决了我的问题SHIFT SO答案(虽然我对这个解决方案的正确性不是100%),但我似乎无法能够像“ÁÉÍÓÜÖ”输出的字符。
我怎样才能做到这一点?首先有可能吗?
我知道这已经是一个以上的问题,但我仍然试图解决同样的问题,我无法找到一个完美的解决方案,到目前为止,所以我想这将是很好的人有这样的答案。
非常感谢你提前,任何帮助表示赞赏。
可能会得到您想要的任何字符。你几乎是正确的道路上。我认为您只需要指定感兴趣的unicode字符即可。因此,如果您发送unicode并使用kVK_Space作为键码,则不必发送密钥,而是应该拥有所需的信息,并且在发布事件之前,可以将以下代码称为那个事件对象
if (unicode){
unichar str[2] = {0};
str[0] = (unichar)unicode;
memcpy(str, &unicode, 4);
CGEventKeyboardSetUnicodeString(theEvent, 1, str);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句