• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リムーバブルディスクをPCへ挿入を監視したいのです)

PCへのリムーバブルディスク挿入を監視する方法

このQ&Aのポイント
  • PCへのリムーバブルディスク挿入を監視するには、常駐型プログラムを使用します。USBフラッシュメモリを挿入した際に、モニタに中身を表示させるための行程を自動化することができます。
  • PC挿入時のイベントを取得するAPIが存在しており、これを使用することで挿入を検知することができます。ただし、具体的なAPIの詳細はわかっていません。
  • PCへのリムーバブルディスク挿入時には、タスクトレイにバルーンが表示されるため、何らかの方法があるはずです。情報を持っている方は、教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス ・API 関数とは SHChangeNotifyRegister() でしょうか。  使ったことがないので詳しくありませんが、API 関数以外にも WM_DEVICECHANGE メッセージで  検出できるようです。 ・次に参考になりそうなリンクを貼って置きます。  http://support.microsoft.com/kb/163503/ja→『CD-ROM 挿入-取り出しの通知を取得する方法』  http://oshiete1.goo.ne.jp/qa1815976.html→『リムーバブルドライブの検出』 ※『WM_DEVICECHANGE』キーワードでネット検索すればいろいろと情報が見つかると思います。 ・以上。

参考URL:
http://search.msdn.microsoft.com/search/Default.aspx?brand=msdn&locale=ja-jp&query=WM_DEVICECHANGE
kirishima8
質問者

お礼

Oh-Orange様。 申し訳ありません。 お礼をするはずが、補足の方に書いてしまいました。 うっかりしてました。 お詫びします。

kirishima8
質問者

補足

さっそくの回答、感謝致します。 >SHChangeNotifyRegister() さっそく調べてみましたが、資料が少ないですね。 WM_DEVICECHANGEは知りませんでした。 調べてみると、随分な数の関連サイトがありました。 ありがとうございました。 そこで、さっそく簡単なプログラムを書いてみましたが、コンパイルが通りません。 リムーバブルディスクの挿入と取り外しを検知するプログラムです。 >'DBT_DEVICEARRIVAL' : 定義されていない識別子です。 >case 式は、整数型定数でなければなりません。 >'DBT_DEVICEREMOVECOMPLETE' : 定義されていない識別子です。 >case 式は、整数型定数でなければなりません。 >'DBT_DEVNODES_CHANGED' : 定義されていない識別子です。 >case 式は、整数型定数でなければなりません。 このようなエラーが出てしまいます。 他のサイトのリファレンスを参考にしても、ほぼ同じ手法をとっています。 念のため、SDKのdbt.hを確認したところ、 #define DBT_DEVICEARRIVAL 0x8000 と、しっかり定義してあります。 もちろん、以下のコードのDBT_DEVICEARRIVALの部分を0x8000に置き換えるとコンパイルされるし、ちゃんと動作します。 なぜこうなってしまうのでしょうか。 お答え頂けたら幸いです。 #include <windows.h> #include <dbt.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg){ case WM_COMMAND: //... break; case WM_DESTROY: PostQuitMessage(0); return 0; break; case WM_DEVICECHANGE: //0x219: TCHAR str[512]; switch(wParam){ case DBT_DEVICEARRIVAL: wsprintf(str,TEXT("ドライブが追加もしくはディスクが挿入されました。W=0x%x , L=0x%x"),wParam,lParam); break; case DBT_DEVICEREMOVECOMPLETE: wsprintf(str,TEXT("ドライブが削除もしくはディスクが排出されました。W=0x%x , L=0x%x"),wParam,lParam); break; case DBT_DEVNODES_CHANGED: wsprintf(str,TEXT("ドライブがシステムにより追加or削除されました。W=0x%x , L=0x%x"),wParam,lParam); break; default: wsprintf(str,TEXT("デバイスに変化あり。W=0x%x , L=0x%x"),wParam,lParam); break; } MessageBox(hWnd,str,TEXT("確認"),MB_OK); return TRUE; break; default: return DefWindowProc(hWnd, msg, wParam, lParam); } return 0; } //以下はメイン関数部分。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・私も簡単なソースでコンパイルしてみましたが問題なくコンパイルできました。  下にそのサンプルを載せておきます。→本当に単純です。 サンプル: #include <stdio.h> #include <windows.h> #include <dbt.h> // テスト int main( void ) {  printf( "0x%04X\n", DBT_DEVICEARRIVAL );  printf( "0x%04X\n", DBT_DEVICEREMOVECOMPLETE );  printf( "0x%04X\n", DBT_DEVNODES_CHANGED );  return 0; } その他: ・私は VC++.NET 2003 を使っています。  お使いのコンパイラとそのバージョンは何でしょうか? ・windows.h の前に次に1行を挿入してもコンパイルできないかどうか確認して下さい。  #define WINVER (0x501)  ↑  windows.h より前に定義すること。    #include <stdio.h>  #include <windows.h>  #include <dbt.h> ・以上。

kirishima8
質問者

お礼

>#define WINVER (0x501) コンパイルしてみましたが、やはりだめでした。 コンパイラとバージョンですが、Visual C++ 2005で、バージョンはstandard ということでよろしいでしょうか。 ちなみに、VC++2005のExpress Editionでコンパイルしてみると、当たり前ですがそのまま通りました。 何か環境設定がうまくいってないのかもしれません。 これから調べてみたいと思います。 目的は果たせたので、今回はこれでよしとします。 いろいろとありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • USBのホットプラグについて

    USBのホットプラグについての質問です。 Windows2000でUSBを抜くときはタスクトレイ内のアイコンをクリックしてから「安全に取り外せます。」というようなメッセージが出てからケーブルを抜きますが、WindowsXPの場合刺すときも抜くときも常時普通に出来ます。 この時に”ポケッ”というような音が鳴りますがこれで大丈夫ですか? 2000の時のようにタスクトレイに取り外しアイコン自体が無いので XPでは完全なホットプラグが実現しているという事でしょうか?

  • ディスクへの書き込みが…が頻繁にでるようになった

    Windows7(32ビット)です。 最近PCを起動あるいは途中でタスクトレイに書きメッセージが出るようになり、困っています。 「ディスクへの書き込みの準備ができたファイルがあります。 ファイルをここで表示するには、このバルーンをクリックしてください」 表示の度に「×」や表れたE:ドライブ(CD/DVD)のファイル一覧ダイアログを閉じています。 面倒です、いちいち表示するのを止めたいので、その方法を教えてください。

  • VC++でタスクバーに表示させない方法。(非MFC)

    VC++6.0 で常駐アプリの開発をしているのですが、 MFCを使わずにダイアログを作成し、 タスクトレイにアイコンを表示するのはできたのですが、タスクバーには表示が残ってしまいます。 タスクバーに表示させない方法を教えてください。 よろしくお願いします。

  • タスクトレイからのバルーン表示

    タスクトレイ(タスクバーの横)にアイコンが並んでいますが、 ここからバルーンを表示する方法を教えてください。 これは、「Windowsアップデートの通知」などで使われているものです。 Windows初回使用時のスタートボタンに対しての「ここから始めます」みたいなものも同様です。 タスクトレイからメッセージボックスを表示すると そのようになるのかなと思ったのですが、そうではないようです。 バルーンと書きましたが、きちんとした名称も分からず 検索もうまくいきません。 以上、よろしくお願いします。

  • タスクトレイに実行中のアイテムが表示されたりされなかったり・・・

    xpPROです。 タスクトレイ(右下の時計の横)に常駐タスクが表示されたりされなかったりして困っています。 この症状は以前からで、変だなあ、とは思っていたのですが・・・ Meの時には電源管理(電池のようなアイコン)ATIドライバのアイコン、等々すべていつも表示されていました。隣においてある2000PCではそのようなことはないです。それらが、起動時に表示されたりされなかったりするわけです。 起動してないかといえばそういうわけではなくて、ctr+shift+escでタスクマネージャを見るとすべて動いています。 で、終了させて起動させるとタスクトレイに出てきます・・・ 何に困っているかというと、常駐タスクをタスクトレイから終了できないことと、タスクトレイに表示されたボリュームアイコンにマウスカーソルを合わせてホイールで音量調整できるソフトを使い始めたのですが・・・案の定表示しなくて(はじめのうちは表示していた)使い物になりません・・・ これはどういうことなのでしょうか? 対策を教えてください

  • PC起動時のRealPlayer

    Windows2000 RealPlayerは殆んど使用しないので常駐さしたくありません。 PC起動時にタスクトレイにアイコンを表示させたくないのです。 必要な時はスタートメニューから起動さします。 レジストリーを次の通り編集しました。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run の下層にある RealTray (Realplay.exe SYSTEMBOOTHIDEPLAYER)を削除しました。 PCを再起動してみるとタスクトレイにRealPlayerのアイコンは無くなって自分の望み通りになっていますが、スタートメニューでRealPlayerを起動した後にPCを終了し再び起動するとRealPlayerは以前の状態に戻ってタスクトレイにアイコンが表示されています。 レジストリーを覗いて見ますと削除した筈のRealTray (Realplay.exe SYSTEMBOOTHIDEPLAYER)が勝手に書き込まれています。 PCの起動直後にRealPlayerのアイコンをタスクトレイに表示させないようにするには何をどのように編集すればよいでしょうか。

  • ディスク空き容量監視ソフト探しています!

    ディスク空き容量監視ソフトをVector、その他サイトで探していますが、 下記要件を満たすものが中々見つかりません。 要件 1.パーティション(Cドライブ、Dドライブ・・・)ごとの監視が可能 2.PCに常駐するが普段はタスクトレイに隠れている 3.予め指定した空き容量(例えば80%)を超えたときに警告を出すが その際、外部のEXEを実行する 4.シェアソフトウェアでも構わない 3.について、警告として「ビープ音を出す」 「ポップアップメニューを画面表示する」「メールを出す」 という処理が行えるソフトはいくつか見つかりましたが、 当方が望んでいるアラート発報時に 「外部のEXEを実行する」というものは見つかりませんでした。 自社開発しても良いのですが、なるべく工数を削減するために 上記要件を満たすソフトがあれば活用したいと思います。 宜しくお願い致します。

  • DetailsViewで挿入後、挿入したレコードを表示

    Visual Studio 2008でWebサイト作成に関する質問です。 DetailsViewコントロールでレコード挿入をおこなった場合、 挿入直後に表示される画面は、挿入レコードではなく、 挿入作業の前に表示していた既存レコードになってしまいます。 Webのユーザ(一般人)から見たら、新規作成で送信したはずの 情報がすぐ表れるのが自然であり、そうではない情報が出てくるのは心外かと思います。 DetailsViewコントロールで挿入確認ボタンを押したら、挿入レコードをすぐ表示する方法はないでしょうか。

  • 常駐ソフトについて

    窓の杜でshrink picという画像ソフトをインストールしました。 常駐ソフトのはずなのですが、pcを立ち上げるたびにタスクトレイから消えてしまっています。 デスクトップにはショートカットが作成されているので、そこから起動させるとタスクトレイに表示されます。 常に常駐させるにはどうすればいいのでしょうか。

  • WindowsXP 常駐アイコン消える・・・

    ウイルスバスターをインストールし直し、 再起動したところ WindowsXpのタスクトレイより 常駐アイコンが表示されなくなりました。 タスクトレイに常駐アイコンを再表示させる為には どうしたらよろしいのでしょうか お教えください。 よろしくお願いいたします。