いつも参考にさせていただいております。
環境はDelphi2006です。
exeが異なるプログラム間で、
editに入力された値をPGM1からPGM2へ受け渡す
処理を行っています。
同じPGM内でフォームが異なる場合は
分かるのですが、(当たり前ですみません)
上記の場合の方法が分からず困っています。
もしお分かりの方がいらっしゃいましたら、
宜しくお願い致します。
http://mrxray.on.coocan.jp/Delphi/plSamples/650_SendText.htm
http://mrxray.on.coocan.jp/Halbow/Notes/N012.html
http://www2.big.or.jp/~osamu/Delphi/tips.cgi?index=90
こんなところで。
wm_userを調べると幸せになれるかもしれません(^^)
わたしは初心者のころには
WM_COPYDATA を使ったプロセス間通信を使ってました。
初心者のころはここ(TIPS)をよく見てまねてました。
はじめのころはこういったサイトを知っていると意外と役に立ちます。
http://www.wwlnk.com/boheme/delphi/tips/
該当するプロセス間通信はこれですね。
http://www.wwlnk.com/boheme/delphi/tips/tec1630.htm
皆様、ご解答本当にありがとうございました。
返事が遅くなり、申し訳ありません。
提示してくださったURLを参考に
開発を行ったのですが、受け取る側のFormを
うまく探しにいけていないようです。
ためしに自分自身を呼び出して処理を流したところ
うまくいったので、流れ自体は出来ていると思われます。
どやささんのURLに書かれている以外に
何か付け足すことはあるでしょうか。
作ったアプリケーションはどちらも同じ環境です。
よろしくお願い致します。
<どやささんのURLに書かれている以外>のはなぜ参考にしないのかを教えてください。 >DDDさん
送信側と受信側で同じクラス名のフォームだとFindWindowは使えないのでそれが原因なのではないかなぁ、と。
もしそうなら送信側と受信側のクラス名を違うものにするか、あるいはFindWindowではなくEnumWindowsを使って受信側のフォームを探すとかでしょうか。
function ClassNameGet(hHandle: HWND): String;
//ウィンドウハンドルhHandleのクラス名を返す
const
lci_LEN = 256;
var
lp_Buff: PChar;
begin
Result := '';
lp_Buff := AllocMem(lci_LEN +1);
try
GetClassName(hHandle, lp_Buff, lci_LEN);
Result := String(lp_Buff);
finally
FreeMem(lp_Buff);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
function FindReceiver(hWindow: HWND; hHandle: LPARAM): BOOL; stdcall;
begin
Result := True;
if (hWindow <> HWND(hHandle)) then begin
if (ClassNameGet(hWindow) = 'TForm1') then begin
{
送信処理を書く
}
Result := False; //複数に送信するならコメントアウト
end;
end;
end;
begin
EnumWindows(@FindReceiver, LPARAM(Handle));
end;
こんな感じで。
訂正。
function FindReceiver(hWindow: HWND; hHandle: LPARAM): BOOL; stdcall;
begin
Result := True;
if (hWindow <> HWND(hHandle)) then begin
if (ClassNameGet(hWindow) = 'TForm1') then begin
{
送信処理を書く
}
Result := False; //複数に送信するならコメントアウト
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@FindReceiver, LPARAM(Handle));
end;
FindWindowはクラス名かwindow名が分かっているときにそのハンドルを探す関数ですから、送信相手のクラス名、Window名が同じ時は別の方法でハンドルを取得しないといけません。
テストするだけならWindow名を適当に変えたらどうですか?
ツイート | ![]() |