在OS / X(或Windows)启动期间检测修改键?

我在这里search,没有发现任何真正覆盖这个问题。

我有一个跨平台的Windows-OS / X应用程序,我希望在应用程序启动时能够检测是否正在按住shift或control等修饰键。

我们希望这样做是为了允许应用程序在不读取其偏好文件的情况下启动,以防某种方式被破坏(例如,我们在testing中看到了一个前缀错误,现在已经修复,例如使窗口大小为0) 。

我们正在使用名为Juce的优秀和全面的跨平台C ++库。 不幸的是,Juce的主人告诉我,他认为OS / X上这是不可能的,至less你只能得到键盘事件 ,除非有什么变化,否则无法读取键的状态

这是真的? 或者有什么方法呢? 我几乎可以肯定,我已经使用Mac程序,使用这种机制绕过他们的喜好。

或者……提升一个级别……除了“在启动程序时按住一个键”,还有另外一种解决scheme来提供“运行程序但不读取prefs文件”的function? 这是消费软件,所以我们不能期望用户太多。

最终的解决scheme将最终成为一个跨平台的,所以Windows的提示也将不胜感激。

谢谢,祝好! 我将在最后报告进展情况。

在Mac上运行(Objective-C):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSUInteger theFlags = [NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask; if(theFlags & NSShiftKeyMask) NSLog(@"Shift down!"); if(theFlags & NSControlKeyMask) NSLog(@"Control down!"); if(theFlags & NSCommandKeyMask) NSLog(@"Command down!"); if(theFlags & NSAlternateKeyMask) NSLog(@"Alternate down!"); if(theFlags & NSFunctionKeyMask) NSLog(@"Function down!"); } 

第一个答案是好的,但由于某种原因你想避免Objective-C,你可以使用Carbon框架:

 UInt32 flags = GetCurrentKeyModifiers(); if ( (flags & optionKey) != 0) {...}