NSRunAlertPanelは、「アクティブウィンドウ」の後ろに現れます
-
26-09-2019 - |
質問
私は、単純なエラー報告のパッケージを一緒に入れしようとしています。私のメインプログラムがクラッシュした場合、それはcrashlogを保存し、その後、リポータープログラムが起動します。それは私にクラッシュログを送信できる場合リポータープログラムは、そう、ユーザーに尋ねます。私は基本的なメッセージボックスを作成するにはNSRunAlertPanelを使用しています。
は、いくつかの理由で、そのメッセージボックスが開いていてもよい任意の他のウィンドウの下に埋設まで表示されています。 のFinderウィンドウの後ろにレポーター窓ショー、クラッシュすることを強制し、それが上に現れ、Finderウィンドウからをメインパッケージを実行します。
なぜ、この出来事で、それがどのように解決することができますか?
最小限のテストケース
#import <AppKit/AppKit.h>
int main(int a, char* av) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSApplication* q = [[NSApplication alloc] init];
NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
[pool release];
}
で構築されます:
g++ test.mm -framework AppKit && ./a.out
解決
私は多くの接線方向に関連ウェブページから蒸留液が出ているように見えるます:
#import <AppKit/AppKit.h>
int main(int a, char* av) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSApplication* q = [[NSApplication alloc] init];
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
[NSApp activateIgnoringOtherApps:YES];
NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
[pool release];
}
私はこれを理解するためにふりをしていない - それの貨物カルトプログラミングをその最高級で。より良い答え、または各ステップが何をするかの説明は、いただければ幸いです。
所属していません StackOverflow