WinXP(SP2),Visual Studio 2005,VC++,MFCは未使用
USBフラッシュメモリをPCに挿入した際、中身をモニタに表示させる行程が面倒なので、そこまでの全ての行程を常駐型プログラムにさせてしましたいと考えています。
そこでまず、PC挿入時のイベントを拾いたいと考えています。
それを可能にするAPIが存在しているという事実までは明らかになったものの、具体的にどんなものなのかは現時点では不明です。
ホットプラグ関連なのでしょうが、調べてみてもよくわかりませんでした。
挿入時、自動的にタスクトレイにバルーンが表示されることからも、やはり何らかの方法があるはずです。
何らかの情報をお持ちの方、助けて頂けないでしょうか。
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. …
この回答への補足
さっそくの回答、感謝致します。
>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;
}
//以下はメイン関数部分。
Oh-Orange様。
申し訳ありません。
お礼をするはずが、補足の方に書いてしまいました。
うっかりしてました。
お詫びします。
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>
・以上。
>#define WINVER (0x501)
コンパイルしてみましたが、やはりだめでした。
コンパイラとバージョンですが、Visual C++ 2005で、バージョンはstandard ということでよろしいでしょうか。
ちなみに、VC++2005のExpress Editionでコンパイルしてみると、当たり前ですがそのまま通りました。
何か環境設定がうまくいってないのかもしれません。
これから調べてみたいと思います。
目的は果たせたので、今回はこれでよしとします。
いろいろとありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- Windows 10 windows11が突然起動しなくなりました 3 2022/06/30 17:49
- その他(パソコン・周辺機器) pcの周辺機器について 6 2022/10/10 13:54
- モニター・ディスプレイ 自室のモニターのみ目が疲れる原因が知りたい。 3 2022/12/17 19:59
- 固定電話・IP電話・FAX PCでFAX受信するソフトのお薦めありますか? 7 2022/06/16 10:10
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- LANケーブル・USBケーブル USB端子からイヤホンプラグに変換する(のであろう)器具について。 5 2022/08/20 07:51
- プリンタ・スキャナー プリンタ壊れました。新しいの買うしかないかなと思ってます。10年以上前にmp550のキャノンのやつ買 5 2022/07/26 11:18
- ノートパソコン 故障したパソコンAを、パソコンBで作った回復ドライブを使って復活出来ますか? 15 2022/11/22 19:52
- 国産車 CDのタイトル名が表示されない 3 2022/05/15 14:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
C言語をコンパイルするとコンピ...
-
64ビットのlinuxで32ビットメモ...
-
C#で char型とstring型の比較で...
-
c言語です コンパイルした時に...
-
minGWでのopneMPコンパイルにつ...
-
gccでc++プログラムをコンパイ...
-
リトルエンディアン、ビッグエ...
-
WindowsでコンパイルできるがUN...
-
arduinoのエラーメッセージ
-
コマンドプロンプトを使ったコ...
-
latex cite, ref
-
#If VBA7 Thenに関して
-
VBAにおいて「デバッグ」と「コ...
-
Cコンパイラ(gcc)について
-
VBA と コンパイル の関係
-
プレコンパイルの意味を教えて...
-
#If True Then の # って何??
-
VC++.NET と UTF-8
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
C言語をコンパイルするとコンピ...
-
実行後にコンパイルに失敗しま...
-
math.hに含まれる関数が使えない
-
ビープ音が鳴りません・・・
-
c言語です コンパイルした時に...
-
<math.h>ヘッダを入力している...
-
C#で char型とstring型の比較で...
-
共有ライブラリの内容確認について
-
すべてのリビルド: 0 正常、 0 ...
-
[COBOL] ソースの復帰
-
64ビットのlinuxで32ビットメモ...
-
VS2010環境で2点ほど質問
-
gcc バージョン違いによるコン...
-
ヘッダーファイル『windows.h』...
-
C言語で作ったらWindowsでもMac...
-
自作DLLの中身を暗号化
-
MVSマシンで0C7でABENDしたので...
-
Verilog_HDLでのdefineとifdef
おすすめ情報