CMD +期权+ D可可模拟 [英] CMD+Option+D simulation in Cocoa
本文介绍了CMD +期权+ D可可模拟的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要同时模拟CMD +期权+ D键preSS。我已经做了所有类型的寻找,至今我见过的最好的办法是做这样的:
I need to simulate a CMD+Option+D key press simultaneously. I've done all kind of looking and the best way so far I've seen is to do this:
CGEventSourceRef src =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef cmdd = CGEventCreateKeyboardEvent(src, kVK_Command, true);
CGEventRef cmdu = CGEventCreateKeyboardEvent(src, kVK_Command, false);
CGEventRef optd = CGEventCreateKeyboardEvent(src, kVK_Option, true);
CGEventRef optu = CGEventCreateKeyboardEvent(src, kVK_Option, false);
CGEventRef dd = CGEventCreateKeyboardEvent(src, kVK_ANSI_D, true);
CGEventRef du = CGEventCreateKeyboardEvent(src, kVK_ANSI_D, false);
CGEventSetFlags(dd, kCGEventFlagMaskCommand); //NO idea why this is here.
CGEventSetFlags(du, kCGEventFlagMaskCommand); //NO idea why this is here.
CGEventTapLocation loc = kCGHIDEventTap; // kCGSessionEventTap also works
CGEventPost(loc, cmdd); //Cmd down
CGEventPost(loc, optd); //Option down
CGEventPost(loc, dd); //D down
CGEventPost(loc, cmdu); //Cmd up
CGEventPost(loc, optu); //Option up
CGEventPost(loc, du); //D up
CFRelease(cmdd);
CFRelease(cmdu);
CFRelease(optd);
CFRelease(optu);
CFRelease(dd);
CFRelease(du);
CFRelease(src);
但是,这样做就像它当我用我的键盘,这并不切换被告席?为什么是这样?我究竟做错了什么?我进口Carbon.h,所以它看起来像这应该工作?
However, doing this does not toggle the dock like it does when I use my keyboard? Why is this? What am I doing wrong? I imported Carbon.h, so it seems like this should work?
推荐答案
你试试这个?
// as before ...
CGEventSetFlags(dd, kCGEventFlagMaskCommand ^ kCGEventFlagMaskAlternate);
CGEventSetFlags(du, kCGEventFlagMaskCommand ^ kCGEventFlagMaskAlternate);
// continues...
我认为你必须给D活动同时设置命令的和的备用(option键)标志。
I think you have to set both the command and alternate (option key) flags for the D event.
这篇关于CMD +期权+ D可可模拟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文