外部プログラムにメッセージを送信します:
SendMessage(Handle, WM_CHAR, Ord('A'), 0);
しかし、別のプログラムでこのメッセージを受信する方法がわかりません。(WndProcなどを使用して)誰かが私にそれを説明してもらえますか?
ありがとうございました
外部プログラムにメッセージを送信します:
SendMessage(Handle, WM_CHAR, Ord('A'), 0);
しかし、別のプログラムでこのメッセージを受信する方法がわかりません。(WndProcなどを使用して)誰かが私にそれを説明してもらえますか?
ありがとうございました
カスタム Windows メッセージを送信および処理する方法を参照してください。
テストされていないコード:
const
WM_REFRESHSOMETHING = WM_USER + 6;
メッセージをキャッチするフォームでは、次のようなものが必要です。
...
procedure WMRefreshsomething(var ppbMsg : TMessage); message WM_REFRESHSOMETHING;
...
procedure YourForm.WMRefreshsomething(var ppbMsg : TMessage);
begin
//Actions...
end;
そして、次のようなメッセージを送信できます。
SendMessageToAll(Handle, WM_REFRESHSOMETHING, 0, 0);
メッセージ WM_REFRESHSOMETHING を持つすべてのフォームに対して。
このコンパイル可能な例を参照してください
一連のプログラムで次のコードを使用します。1 つのプログラムがプログラムを起動し、各プログラムが終了すると、終了したことを示すメッセージをランチャーに送り返します。プログラムの鍵は、HWND_BROADCAST パラメーターを使用することです。メッセージは、コンピューター上で実行中のすべてのプログラムに送信されますが、もちろん、正しいメッセージ ハンドラーを持っている人だけが処理します。メッセージを送信する必要があるプログラムで、次のように記述します。
SendMessage (HWND_BROADCAST, RegisterWindowMessage ('メッセージ'), 0, 0);
明らかに、'message' を、両方のプログラム (送信するプログラムと受信するプログラム) で一定の文字列に置き換えることになります。
受信プログラムにデータを渡すために SendMessage の lparam パラメータを使用することはお勧めしません。これはポインターであると想定されており、もちろん、プログラム 1 のデータへのポインターは、プログラム 2 のガベージを指します。倍長整数をポインターにキャストして送信することもできますが、受信側で逆参照する必要があります。
受信プログラムでは、
type
TWMMYMessage = record
Msg: Cardinal; // ( first is the message ID )
Handle: HWND; // ( this is the wParam, Handle of sender)
Info: Longint; // ( this is lParam, pointer to our data)
Result: Longint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
wm_Launcher:= RegisterWindowMessage ('message')
// wm_launcher is a private member of TForm
.
.
.
end;
procedure TForm1.DefaultHandler(var Message);
var
ee: TWMMYMessage;
begin
with TMessage (Message) do
begin
if (Msg = wm_Launcher) then
begin
ee.Msg:= Msg;
ee.Handle:= wParam;
ee.Info:= lParam;
// Checking if this message is not from us
if ee.Handle <> Handle then WmMyMessage(ee);
end
else inherited DefaultHandler(Message);
end;
end;
procedure TForm1.WmMyMessage(var Msg: TWMMYMessage);
begin
startbtnclick (nil) // here we actually do something when the message is received
end;