dポイントプレゼントキャンペーン実施中!

常駐し、USBメモリなど追加された場合を検出したいです。
どうしたらいいでしょうか?
次のソースでwin32空きプロジェクトを作成します。

#include<windows.h>

int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
LPSTR lpCmdLine ,
int nCmdShow ) {

return 0;
}


ON_WM_DEVICECHANGE()
というメッセージを受け取るそうですがどうしたらいいでしょうか?
例えば、USBドライブを検出した場合、メッセージを表示するようにしたいです。

A 回答 (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プログラムは受け身で物を考えないといけません。
このプログラムは×で閉じます。だから「常駐」ではありません。
★のところは別途調べてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
MFCからではメッセージの受け取りに成功し、プレークポイントで
確認できました。

このソース確かめてみます。
結果は連休明けになってしまいます。すみません。

ウインドウを表示しない。
タスクバーにも表示させなければそれでいいんですよね。

調べていたら、プロセス隠蔽というテクニックもあるみたいですね。
タスクマネージャのプロセスに表示さらせない方法も。

お礼日時:2008/11/21 18:06

ウィンドウプロシージャでWM_DEVICECHANGEというメッセージを


処理します。
http://forums.microsoft.com/MSDN-JA/ShowPost.asp …
>常駐
この手のプログラムですと、サービスとして常駐させるのが普通です。
サービスの開始エントリで、非表示ウィンドを作り、それのウィンドウ
プロシージャでWM_DEVICECHANGEを扱います。
サービスの終了エントリでWM_CLOSEを自Windowに投げるようにします。
    • good
    • 0
この回答へのお礼

ダイアログベース物で昔、ウインドウ初期化前にいろいろ処理してしまい、
終了させてしまう。というのをやったことがあります。
動くには動きましたが・・・これじゃ本来ダメですよね。

MSサイトとか見たのですが知識が古い物でして。
MFCを使わないプログラムはやったことありません。

どうすればメッセージをとれるか?がわかりません。

お礼日時:2008/11/20 20:10

>ON_WM_DEVICECHANGE()


>というメッセージを受け取るそうですがどうしたらいいでしょうか?
CWnd::OnDeviceChange()のマクロなので、OnDeviceChange()を実装する。

とりあえず確認ですが、Windowsアプリの作成経験と、メッセージハンドラの捕まえ方とか知ってますか?
質問のように、ウイザードで作成されたWinMain()の空関数提示されるたげじゃ丸投げに見えますよ。
    • good
    • 0
この回答へのお礼

MFCを使った物であればVC6まで経験あるのでわかるんですが、
.NETに変わって関数ウイザードとか無くなったのでわかりません。

WM_のとらえ方もわかりません。

お礼日時:2008/11/20 20:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!