Ich schreibe eine Anwendung in C für den Mac (Leopard), die einige Arbeit bei Erhalt von Power-Benachrichtigungen, z. schlafen, aufwachen, herunterfahren, neu starten. Es läuft über launchd
als ein Launchagent bei der Anmeldung und beginnt dann mit der Überwachung von Benachrichtigungen. Der Code, den ich mit diesem zu tun ist, wie folgt:Empfangen von Strombenachrichtigungen (insbesondere Herunterfahren) auf Mac OSX
/* ask for power notifications */
static void StartPowerNotification(void)
{
static io_connect_t rootPort;
IONotificationPortRef notificationPort;
io_object_t notifier;
rootPort = IORegisterForSystemPower(&rootPort, ¬ificationPort,
PowerCallback, ¬ifier);
if (!rootPort)
exit (1);
CFRunLoopAddSource (CFRunLoopGetCurrent(),
IONotificationPortGetRunLoopSource(notificationPort),
kCFRunLoopDefaultMode);
}
/* perform actions on receipt of power notifications */
void PowerCallback (void *rootPort, io_service_t y,
natural_t msgType, void *msgArgument)
{
switch (msgType)
{
case kIOMessageSystemWillSleep:
/* perform sleep actions */
break;
case kIOMessageSystemHasPoweredOn:
/* perform wakeup actions */
break;
case kIOMessageSystemWillRestart:
/* perform restart actions */
break;
case kIOMessageSystemWillPowerOff:
/* perform shutdown actions */
break;
}
}
jedoch nur die oberen zwei für Schlafen und Wachsein (kIOMessageSystemWillSleep
und kIOMessageSystemHasPoweredOn
) jemals aufgerufen. Ich bekomme nie irgendwelche Benachrichtigungen für Neustart oder Herunterfahren (und kIOMessageSystemWillPowerOff
).
Mache ich etwas falsch? Oder gibt es eine andere API, die mir die Benachrichtigungen zum Neustart und zum Herunterfahren geben würde? Ich würde es lieber als ein C-Programm behalten (wie mir das bekannt ist), bin aber offen für vernünftige Vorschläge von Alternativen (Ich habe mir die Login-/Logout-Hooks angeschaut, aber diese scheinen eher verpönt zu sein von launchd).
Vielen Dank im Voraus für jede Hilfe/Tipps!
Danke dafür! Weißt du, ob ich ein Fenster- oder Docksymbol brauche, um diese Benachrichtigungen zu erhalten? – binarybob
Nein, das tust du nicht. Ich habe einen Beispielcode hinzugefügt. –
Nochmals vielen Dank Rob, das ist sehr zu schätzen. – binarybob