Tôi đang viết một ứng dụng trong C cho Mac (Leopard) cần thực hiện một số công việc khi nhận được thông báo nguồn, ví dụ: ngủ, thức dậy, tắt máy, khởi động lại. Nó chạy qua launchd
làm khởi chạy khi đăng nhập, sau đó bắt đầu theo dõi thông báo. Mã Tôi đang sử dụng để làm điều này là như sau:Nhận thông báo nguồn (đặc biệt là tắt máy) trên 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;
}
}
Tuy nhiên, chỉ có phía trên hai cho giấc ngủ và thức dậy (kIOMessageSystemWillSleep
và kIOMessageSystemHasPoweredOn
) bao giờ được gọi. Tôi không bao giờ nhận được bất kỳ thông báo nào để khởi động lại hoặc tắt máy (kIOMessageSystemWillRestart
và kIOMessageSystemWillPowerOff
).
Tôi có làm gì sai không? Hoặc là có một API mà sẽ cung cấp cho tôi các thông báo khởi động lại và tắt máy? Tôi muốn giữ nó như là một chương trình C (như thats những gì tôi quen thuộc với) nhưng am mở cho bất kỳ gợi ý hợp lý của lựa chọn thay thế (Tôi đã có một cái nhìn đăng nhập/đăng xuất móc nhưng những dường như không được chấp thuận trong lợi của launchd).
Cảm ơn trước vì bất kỳ trợ giúp/mẹo nào!
Cảm ơn vì điều đó! Bạn có biết nếu tôi cần một biểu tượng cửa sổ hoặc bến tàu để nhận các thông báo này không? – binarybob
Không, bạn không biết. Tôi đã thêm một số mã mẫu. –
Cảm ơn Rob lần nữa, điều đó được nhiều người đánh giá cao. – binarybob