
WIN32APIを使って今までプログラムを作っていましたが、CLRを使ってプログラミングをしようと思い始めたのですが要領がつかめません。
やりたいことは他のアプリケーションにメッセージを送信することです。APIのPostMessage(HWND_BROADCAST, Message, 1, 0);
のような感じでForm1の設定の内容を送りたいのですがどうすればそのようなことができるのでしょうか?
Visual C++ で新しいプロジェクトCLR Windows フォームアプリケーション を選択してプロジェクトを作りました。
そのあとどうすればよいか教えてください。
そもそもForm1のウィンドウプロシージャはどうなってるのかすらわかりません。仕組みがちんぷんかんぷんでした。
No.1ベストアンサー
- 回答日時:
こんばんは。
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をリンクするライブラリに登録する必要があるのでしょうか。いままでこのようなことを行ったおぼえがありません。あと、他に何か設定しておくライブラリってありますか?
No.2
- 回答日時:
こんにちは。
補足頂きました。おお、書き忘れておりました。必要なライブラリをリンクしなければいけませんでした。
それぞれの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
辺り迄、リンクしてあれば後先楽にはなりそうです。
丁寧な回答ありがとうございます。やはりCLRの開発では基本的にAPIは使わないのですね、となるとまたいろいろ覚えなければならないのか。。。
でもAPIも問題なく使えるようになったので安心です。
とりあえずライブラリの設定はしておきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- docomo(ドコモ) ドコモからのSMSについて 2 2022/12/03 22:03
- その他(プログラミング・Web制作) Visual StudioでDjangoのプロジェクト配下のappを作成する方法 1 2022/05/01 03:47
- その他(メールソフト・メールサービス) thunderbirdのメッセージフィルター 2 2022/08/16 19:43
- 片思い・告白 送信取り消ししてもいいですか? 2人とも同じバイト先で、相手はフリーターでアルバイトのみの実家暮らし 8 2023/03/29 20:59
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- UNIX・Linux redmineにメールを飛ばす方法 1 2022/09/13 22:02
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
exeファイルはどのdllを参照す...
-
インポートライブラリ(.lib)フ...
-
error LNK2001: 外部シンボル "...
-
スタティックライブラリ関係の...
-
gccでの共有ライブラリのver指定
-
C++Builder2007でGdiPlus
-
VC++6.0からVC++.NET2005へ移植
-
VC++ 2010のエラーについて
-
BorlandC++Builder5.0でリンカ...
-
VC++2010の「#include <」
-
MP3の再生
-
fatal error LNK1104: ファイル...
-
make中に起こられた、tbbに関す...
-
'stdafx.h'のエラーに関して
-
DirectXのdmusici.libについて
-
VS2010にて、依存関係とビルド順
-
C言語のPathFileExistsについて
-
python エラー
-
エクセルのエラーメッセージ「4...
-
VBAを何回も作り直して、容量が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的/動的リンクライブラリにつ...
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
visual studio community2017 O...
-
【VS2008 C++】2つのプロジェ...
-
C/C++の.libについて教えてくだ...
-
exeファイルはどのdllを参照す...
-
#pragma commentの相対パス指定
-
C++Builder リンカエラーとは?
-
error LNK2019: 未解決の外部シ...
-
スタティックライブラリの使い方
-
音楽再生についてのVC++のプロ...
-
VS2010にて、依存関係とビルド順
-
Visual Studio 2022の『#define...
-
C++によるPostgreSQLの接続
-
スタティックリンクライブラリ...
-
インポートライブラリ(.lib)フ...
-
VC++でビルド時の、リンク警告 ...
-
Makefileと共有ライブラリ
-
dllかlibか
おすすめ情報