3

ここで検索しましたが、これを実際にカバーする質問は見つかりませんでした。

クロスプラットフォームのWindows-OS/Xアプリケーションがあり、アプリケーションの起動中にShiftやControlなどの修飾キーが押されているかどうかを検出できるようにしたいと考えています。

これを実行して、何らかの理由で破損した場合に、アプリケーションが設定ファイルを読み取らずに起動できるようにします(たとえば、ウィンドウサイズを0 x 0にするprefsバグのテストで修正されました) 。

Juceという名前の優れた包括的なクロスプラットフォームC++ライブラリを使用しています。残念ながら、Juceのマスターは、少なくともキーボードイベントのみを取得し、何かが変更されない限りキーの状態を読み取る方法がないため、これはOS/Xでは不可能であると信じていると言っています。

これは本当ですか?それともこれを回避する方法はありますか?このメカニズムを使用して設定をバイパスしたMacプログラムを使用したことはほぼ間違いありません。

または...1つのレベルを上げる...「プログラムの起動中にキーを押したままにする」以外に、「プログラムを実行するが、設定ファイルを読み取らない」機能を提供する別の解決策はありますか?これは消費者向けソフトウェアであるため、ユーザーにあまり期待することはできません。

最終的な解決策はクロスプラットフォームの解決策になるので、Windows側のヒントも高く評価されます。

ありがとう、そして元気に!進捗状況を報告します。

4

2 に答える 2

4

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!");

}
于 2011-11-11T20:01:45.177 に答える
2

最初の答えは問題ありませんが、何らかの理由でObjective-Cを避けたい場合は、Carbonフレームワークを使用できます。

UInt32 flags = GetCurrentKeyModifiers();
if ( (flags & optionKey) != 0)
{...}
于 2011-11-11T20:54:28.937 に答える