0

少し背景がありますが、USBドライブから取り外した瞬間にタイミングを開始するUSB​​加速度計を調整しようとしていますが、タイミングが少しずれていると思われます。これが問題につながります...

デバイスが取り外された正確な時刻を確認する方法はありますか?

私はミリ秒単位の時間で行うことができますが、これはc#を使用してプログラムで解決できるものですか、それともWindows 7のどこかにログがありますか?私はどんな解決策にもオープンです。

4

1 に答える 1

1

シンプルな C# アプリを作成し、システムによるデバイス ノードの変更に関する Win API 通知をサブスクライブできます。

API 関数RegisterDeviceNotificationを使用すると、アプリケーションまたはサービスをサブスクライブして、デバイスに変更が発生したとき (つまり、ホットプラグまたはアンプラグ) に Windows から通知を受けることができます。

C# アプリケーションは、起動時に register メソッドを呼び出す必要があります。その後、アプリケーションはアプリケーションの WndProc 内でWM_DEVICECHANGEDイベントを処理する必要があります。WndProc にアクセスする方法は、WPF アプリケーションと WinForms アプリケーションのどちらを作成するかによって、若干異なります。

WM_DEVICECHANGED メッセージでは、デバイスが接続されたばかりか、取り外されているか、または完全に取り外されたかに応じて、WParam が特定の値に設定されます。あなたの場合、おそらくDBT_DEVICEREMOVECOMPLETEメッセージを使用したいと思うでしょう。

その後、デバイスが取り外された正確な時刻を C# アプリに記録させることができます。タイムスタンプの精度は、デバイスが実際に削除されてから、アプリケーションが通知を受信して​​処理するまでの遅延に依存することに注意してください。利用可能なシステムレベルのタイムスタンプがないため、それを行う必要があります。ただし、 「数」ミリ秒以内の精度である必要があります。

于 2013-02-16T18:01:56.323 に答える