【问题标题】:How do I get notification of a drive being powered on?如何获得驱动器正在通电的通知?
【发布时间】:2014-02-19 02:23:06
【问题描述】:

我在 OS X 上遇到问题,如果在关闭电源时插入驱动器,然后再打开电源,我不会收到新磁盘出现的通知。如果我插入已通电的驱动器,我会收到通知。

目前,我正在为磁盘出现、消失或描述通过磁盘仲裁(DARegisterDiskAppearedCallback 等人)更改时注册回调。我没有看到任何其他可能涵盖驱动器被打开的情况的回调。

当已插入的驱动器通电时,我如何收到通知?

【问题讨论】:

    标签: macos cocoa core-foundation diskarbitration


    【解决方案1】:

    NSWorkspace 在安装磁盘时提供通知NSWorkspaceDidMountNotification。在大纲中,您声明了一个通知处理程序,例如:

    - (void) mountNotify:(NSNotification *)notification
    {
       // extract details from notification
       NSDictionary *userInfo = notification.userInfo;
       NSString *volumeMounted = userInfo[@"NSDevicePath"];
       NSString *volumeDisplayName = userInfo[@"NSWorkspaceVolumeLocalizedNameKey"];
    
       if (volumeMounted != nil)
       {
           // volume has been mounted
       }
    }
    

    并注册通知:

    [[[NSWorkspace sharedWorkspace] notificationCenter]
         addObserver:self
         selector:@selector(mountNotify:)
         name:NSWorkspaceDidMountNotification
         object:nil
    ];
    

    还有一个类似的通知,NSWorkspaceDidUnmountNotification,用于卸载磁盘。

    有关更多详细信息,请参阅 Apple 的 NSWorkspace documentation

    HTH。

    【讨论】:

    • 有什么方法可以在 C++ 中实现这一点吗?
    • @dauphic - Objective-C++ 显然是一个答案。如果您想要一个 C 函数级接口,那么您正在使用的似乎就是它。但是,您会遇到一个奇怪的错误。连接到计算机时磁盘是否打开电源应该没有区别。连接设备和安装设备之间存在区别,尽管两者通常是相互关联的。如果您尚未使用批准或其他回调进行测试,您可能需要调查一下。
    猜你喜欢
    • 2012-07-10
    • 2020-12-16
    • 2016-08-05
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多