
常駐し、USBメモリなど追加された場合を検出したいです。
どうしたらいいでしょうか?
次のソースでwin32空きプロジェクトを作成します。
#include<windows.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
LPSTR lpCmdLine ,
int nCmdShow ) {
return 0;
}
ON_WM_DEVICECHANGE()
というメッセージを受け取るそうですがどうしたらいいでしょうか?
例えば、USBドライブを検出した場合、メッセージを表示するようにしたいです。
No.3ベストアンサー
- 回答日時:
#include <windows.h>
static LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);
static void reg();
int WINAPI WinMain(HINSTANCE ci,HINSTANCE pi,LPSTR cp,int sw)
{
MSG m;
reg();
while(GetMessage(&m,NULL,0,0)) {
TranslateMessage(&m);
DispatchMessage(&m);
}
return 0;
}
static void reg() {
WNDCLASSEX w;
char c[] = {"a"};
memset(&w,0,sizeof(w));
w.cbSize = sizeof(WNDCLASSEX);
w.lpfnWndProc = (WNDPROC)WndProc;
w.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
w.lpszClassName = c;
RegisterClassEx(&w);
HWND h = CreateWindow(c,"監視",WS_OVERLAPPEDWINDOW,
0,0,0,0,NULL,NULL,NULL,NULL);
ShowWindow(h,SW_MINIMIZE);
}
static LRESULT WINAPI WndProc(HWND h,UINT m,WPARAM w,LPARAM l)
{
switch(m)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_DEVICECHANGE:
//★ここに処理を書く
return 戻り値;
}
return DefWindowProc(h,m,w,l);
}
>どうすればメッセージをとれるか?
メッセージは勝手に飛び込んでくるのです。それを待ち構えます。
WindowsのGUIプログラムは受け身で物を考えないといけません。
このプログラムは×で閉じます。だから「常駐」ではありません。
★のところは別途調べてください。
ありがとうございます。
MFCからではメッセージの受け取りに成功し、プレークポイントで
確認できました。
このソース確かめてみます。
結果は連休明けになってしまいます。すみません。
ウインドウを表示しない。
タスクバーにも表示させなければそれでいいんですよね。
調べていたら、プロセス隠蔽というテクニックもあるみたいですね。
タスクマネージャのプロセスに表示さらせない方法も。
No.2
- 回答日時:
ウィンドウプロシージャでWM_DEVICECHANGEというメッセージを
処理します。
http://forums.microsoft.com/MSDN-JA/ShowPost.asp …
>常駐
この手のプログラムですと、サービスとして常駐させるのが普通です。
サービスの開始エントリで、非表示ウィンドを作り、それのウィンドウ
プロシージャでWM_DEVICECHANGEを扱います。
サービスの終了エントリでWM_CLOSEを自Windowに投げるようにします。
ダイアログベース物で昔、ウインドウ初期化前にいろいろ処理してしまい、
終了させてしまう。というのをやったことがあります。
動くには動きましたが・・・これじゃ本来ダメですよね。
MSサイトとか見たのですが知識が古い物でして。
MFCを使わないプログラムはやったことありません。
どうすればメッセージをとれるか?がわかりません。
No.1
- 回答日時:
>ON_WM_DEVICECHANGE()
>というメッセージを受け取るそうですがどうしたらいいでしょうか?
CWnd::OnDeviceChange()のマクロなので、OnDeviceChange()を実装する。
とりあえず確認ですが、Windowsアプリの作成経験と、メッセージハンドラの捕まえ方とか知ってますか?
質問のように、ウイザードで作成されたWinMain()の空関数提示されるたげじゃ丸投げに見えますよ。
MFCを使った物であればVC6まで経験あるのでわかるんですが、
.NETに変わって関数ウイザードとか無くなったのでわかりません。
WM_のとらえ方もわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージボックスの選択ボタ...
-
Excel VBA で外部アプリケーシ...
-
メッセージハンドラ
-
WINDOWを最前面に出したい!!
-
vbaから他のアプリを終了
-
「アイテムは収集されました」...
-
グラフの交点の求め方(Excel)
-
エクセルで作った新しいウイン...
-
コントロールの書式設定で、“コ...
-
[VB.net] DataGridViewの列ヘッ...
-
ActiveXコントロールを.NETにイ...
-
以下のプログラムは重心を求め...
-
勝手にウィンドウが開いて止ま...
-
コンボボックス内の文字サイズ変更
-
EXCELVBA リストボックスで選択...
-
DateTimePickerでに年月までし...
-
VB.NET2005 TextBox 高さ(Heig...
-
Microsoft Visual C++ 6.0でダ...
-
MFCタブコントロールのグラデー...
-
エクセルで回転する座標の出し方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスの選択ボタ...
-
vbaから他のアプリを終了
-
msgboxの表示位置
-
VBAでコントロールのハンドルを...
-
他のウィンドウのボタンを自動...
-
デスクトップ上のアイコンの位...
-
SendMessage で ESC など
-
SetWindowText関数について
-
メッセージハンドラ
-
Excel VBA で外部アプリケーシ...
-
点滅で知らせる方法
-
windowsメールスロットについて...
-
マウスホイールをフックしたい
-
DLL VB Wheel ホイール
-
WM_NCLBUTTONUPについて
-
VB.netでSendMessageを使用して...
-
チェックボックスのキーダウン...
-
有効でないウインドウハンドル...
-
コールバック関数とは…(C言語)
-
キーボード・フックのアプリを...
おすすめ情報