Вопрос

Я пытаюсь собрать простой пакет отчетов об ошибках. Если мои основные программы сбиваются, он сохраняет CrashLog, затем запускает программу репортера. Программа репортера спрашивает пользователя, если он может отправить колючевой журнал для меня, то делает это. Я использую NSRUNALERTPANEL, чтобы создать базовую коробку сообщений.

По какой-то причине эта коробка сообщений появляется похоронен под любыми другими окнами, которые могут быть открытыми. Запустите главный пакет из окна поиска, он отображается сверху, заставляйте его сбою, окно репортера отображается позади окно поиска.

Почему это происходит, и как он может быть решен?

Минимальный тестовый случай:

#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];
} 

Я не притворяюсь, что это понимать - это грузовое культовое программирование в его лучших. Лучшие ответы или объяснения того, что делает каждый шаг, будет очень оценено.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top