「Xamarin.Macでリムーバブルメディアの着脱を検知する」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
[[Xamarin.Mac]]で[[CD-ROM]]や[[DVD-ROM]]、[[USBメモリ]]の挿入などを検出できると何かと嬉しい。
+
MonoMacで[[CD-ROM]]や[[DVD-ROM]]、[[USBメモリ]]の挿入などを検出できると何かと嬉しい。
  
 
==実装例==
 
==実装例==
NSWorkspace.SharedWorkspace.NotificationCenterを使うと検出できるようだ。この通知で飛んでくるのは「変化のあったデバイスのパスのみ」なので、そのパスをNSWorkspace.SharedWorkspace.GetFileSystemInfoに投げて「[[CD-ROM]]なのか」「[[USBメモリ]]なのか」などを判別する。なお、GetFileSystemInfoの結果は[[CD-ROM]]や[[DVD-ROM]]の場合はディスクフォーマットごとに返ってくる値が違うようだ。どんな種類があるのか全部はまだ把握していない。
+
NSWorkspace.SharedWorkspace.NotificationCenterを使うと検出できるようだ。この通知で情報として飛んでくるのはデバイスのパスのみなので、そのパスをNSWorkspace.SharedWorkspace.GetFileSystemInfoを使い[[CD-ROM]]なのか[[USBメモリ]]なのかなどを判別する。なお、CD-ROMやDVD-ROMの場合はディスクフォーマットごとに返ってくる値が違うようだ。どんな種類があるのか全部はまだ把握していない。
  
 
通知には種類があるようで、この例では以下を実装している。
 
通知には種類があるようで、この例では以下を実装している。
 +
* NSWorkspaceDidMountNotification - マウント直後
 +
* NSWorkspaceWillUnmountNotification - アンマウント直前
 +
NSWorkspaceDidUnmountNotification(WillではなくDid)も実装すればアンマウント直前のみならずアンマウント直後も検出できる。ただしアンマウント後なのでデバイスパスしか取得できない。アンマウント失敗時を考慮するとこちらの方が確実かもしれないが詳しくは知らない。
  
*NSWorkspaceDidMountNotification - マウント直後
+
なお、いわゆる自動実行(autorun.inf)などとは違うので起動していないアプリが起動するわけではない。あくまでアプリが立ち上がっている状態でのみ機能する。
*NSWorkspaceWillUnmountNotification - アンマウント直前
 
 
 
NSWorkspaceDidUnmountNotification(WillではなくDid)も実装すればアンマウント直前のみならずアンマウント直後も検出できる。ただしアンマウント後なのでデバイスパスしか取得できない。アンマウント失敗時を考慮するとこちらの方が確実かもしれないが詳しくは知らない。
 
  
 
<source lang="csharp">
 
<source lang="csharp">
 
     using System;
 
     using System;
     using Foundation;
+
     using MonoMac.Foundation;
     using AppKit;
+
     using MonoMac.AppKit;
  
 
     public class RemovableMediaNotificationEventArgs : EventArgs
 
     public class RemovableMediaNotificationEventArgs : EventArgs
54行目: 54行目:
 
             if (_mountObserver == null)
 
             if (_mountObserver == null)
 
             {
 
             {
 
+
                 _mountObserver = notification.AddObserver("NSWorkspaceDidMountNotification", DidMount);
                 _mountObserver = notification.AddObserver(NSWorkspace.DidMountNotification, DidMount);
 
 
             }
 
             }
  
61行目: 60行目:
 
             if (_unmountObserver == null)
 
             if (_unmountObserver == null)
 
             {
 
             {
 
+
                 _unmountObserver = notification.AddObserver("NSWorkspaceWillUnmountNotification", WiilUnmount);
                 _unmountObserver = notification.AddObserver(NSWorkspace.WillUnmountNotification, WiilUnmount);
 
 
             }
 
             }
 
         }
 
         }
115行目: 113行目:
  
 
             var workspace = NSWorkspace.SharedWorkspace;
 
             var workspace = NSWorkspace.SharedWorkspace;
             workspace.GetFileSystemInfo(devicePath, out isRemovable, out isWritable, out isUnmountable, out description, out fileSystemType);
+
             workspace.GetFileSystemInfo(devicePath, out isRemovable, out isWritable,out isUnmountable, out description, out fileSystemType);
  
             var args = new RemovableMediaNotificationEventArgs
+
             var args = new RemovableMediaNotificationEventArgs {
            {
 
 
                 DevicePath = devicePath,
 
                 DevicePath = devicePath,
 
                 IsRemovable = isRemovable,
 
                 IsRemovable = isRemovable,
132行目: 129行目:
  
 
==関連項目==
 
==関連項目==
* [[Xamarin.MacでCDやDVDなどの光学メディアを排出する]]
+
*[[Xamarin.Mac/CDやDVDなどの光学メディアを排出する]]
* [[Xamarin.Macで接続されているリムーバブルメディアの一覧を取得する]]
+
 
 +
==参考文献==
 +
{{reflist}}
 +
 
 +
{{stub}}
  
 
[[category:MonoMac]]
 
[[category:MonoMac]]
 
[[category:Xamarin.Mac]]
 
[[category:Xamarin.Mac]]

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)