
常駐し、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で質問しましょう!
似たような質問が見つかりました
- Windows 10 回復ドライブを作成できない 3 2023/02/07 02:51
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- CPU・メモリ・マザーボード このコンピューターはBIOSを使用しています 6 2022/07/06 14:13
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでコントロールのハンドルを...
-
VBA 複数セルが空白なら印刷さ...
-
DEVICECHANGE() の受け取り
-
vbaから他のアプリを終了
-
msgboxの表示位置
-
VB.netでFindWindowExやると・...
-
WM_CTLCOLORDLG
-
他のウィンドウのボタンを自動...
-
VBA アクティブウインドウの取...
-
キーボード・フックのアプリを...
-
グラフの交点の求め方(Excel)
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
コントロールの書式設定で、“コ...
-
勝手にウィンドウが開いて止ま...
-
コンボボックス内の文字サイズ変更
-
エクセルのコントロールツール...
-
ダイアログの上のテキストボッ...
-
.NETでチャートにスクロールバ...
-
マインクラフト(pc版)で座標...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
msgboxの表示位置
-
メッセージボックスの選択ボタ...
-
SetWindowText関数について
-
他のウィンドウのボタンを自動...
-
VB.netでFindWindowExやると・...
-
デスクトップ上のアイコンの位...
-
メッセージハンドラ
-
VBAでコントロールのハンドルを...
-
システム例外のメッセージを変...
-
VBでRegisterWindowMessage関数...
-
VC++(MFC)でタスクバーに常駐し...
-
VBA 複数セルが空白なら印刷さ...
-
16進数入力制限方法
-
グローバルフック(SetWindowsH...
-
マウスホイールをフックしたい
-
WM_NCLBUTTONUPについて
-
キーボード入力をHSPでさせたい...
-
点滅で知らせる方法
-
チェックボックスのキーダウン...
おすすめ情報