プロが教える店舗&オフィスのセキュリティ対策術

WIN32APIを使って今までプログラムを作っていましたが、CLRを使ってプログラミングをしようと思い始めたのですが要領がつかめません。
やりたいことは他のアプリケーションにメッセージを送信することです。APIのPostMessage(HWND_BROADCAST, Message, 1, 0);
のような感じでForm1の設定の内容を送りたいのですがどうすればそのようなことができるのでしょうか?
Visual C++ で新しいプロジェクトCLR Windows フォームアプリケーション を選択してプロジェクトを作りました。
そのあとどうすればよいか教えてください。
そもそもForm1のウィンドウプロシージャはどうなってるのかすらわかりません。仕組みがちんぷんかんぷんでした。

A 回答 (2件)

 こんばんは。



 PlatformSDKさえインストールされていれば、「共通言語ランタイムサポート」をONにして、windows.hをインクルードして、普通にPostMessage()を呼び出せると思います。

 逆にForm1でメッセージを受け取りたいのであるならば、WndProcをオーバーライドして
 http://msdn.microsoft.com/ja-jp/library/system.w …

 virtual void WndProc(Message% m) override
 {
  switch(m.Msg)
  {
  case WM_???://引っ掛ける
  }
  this->Form::WndProc(m);
 }

 と言った具合だと思います。

 通常はイベントで受け取ります。
 http://msdn.microsoft.com/ja-jp/library/system.w …

 イベントには存在しないメッセージを受け取りたい時など、余程の理由が無い限りWndProcをオーバーライドする事は無く、普段はWndProcの存在すら気にされていない感じです。

この回答への補足

回答ありがとうございます。Form1でもメッセージを受け取れるんですね。自分でユーザー定義のメッセージをたくさんつかうので役立ちそうです。
あとPostMessage()の問題ですが、普通に使えるんですね。
でも、自分の環境で使うと未解決のトークンというエラーでコンパイルできませんでした。それでネットで調べたところhttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?p …
で同じような問題のスレがあり
#pragma comment(lib, "user32.lib")
を追加したところ実行することができました。
それで質問なのですが、なぜuser32.libをリンクするライブラリに登録する必要があるのでしょうか。いままでこのようなことを行ったおぼえがありません。あと、他に何か設定しておくライブラリってありますか?

補足日時:2009/05/09 03:37
    • good
    • 0

 こんにちは。

補足頂きました。

 おお、書き忘れておりました。必要なライブラリをリンクしなければいけませんでした。
 それぞれのAPIが収められたライブラリはMSDNの一番下「対応情報」に書かれているので一目瞭然です。
 http://msdn.microsoft.com/ja-jp/library/cc410952 …

 「何故リンクを追加するハメに陥ったか」と言う事ですが、WIN32プロジェクトを作成すると、「基本的なWIN32APIのリンクは行ってくれる設定にしてくれる」からではないでしょうか。
 CLRの方はWIN32を使用する事が前提に無いので、「使用する場合は任意で」と言った解釈で良いと思います。
 要は本来必要な設定をプロジェクトの種類に応じてVCが自動で行ってくれると言う事なのでは。

 例えば当方が使用しているVC2005Expressは、WIN32プロジェクト自体が作成出来ないので、作成出来る様にする為に設定を行いました。
 更にWIN32プロジェクトを作成するにも、必要となるリンクは全て自分で行う必要があります。
 製品版ではないので其処までしてくれませんでした。他社のコンパイラを使用するともなれば、フォルダの構成から何から、1から全てを書く必要があります。
 この辺りは「環境」による違いに左右される事ですので、チョッと一言では説明出来ません・・・。

 で、肝心な「この先何が必要になるか」と言う事ですが

 kernel32.lib
 user32.lib
 gdi32.lib
 winspool.lib
 comdlg32.lib
 advapi32.lib
 shell32.lib
 ole32.lib
 oleaut32.lib
 uuid.lib
 winmm.lib

 辺り迄、リンクしてあれば後先楽にはなりそうです。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。やはりCLRの開発では基本的にAPIは使わないのですね、となるとまたいろいろ覚えなければならないのか。。。
でもAPIも問題なく使えるようになったので安心です。
とりあえずライブラリの設定はしておきます。
ありがとうございました。

お礼日時:2009/05/09 13:47

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