![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Межпрограммный интерфейс [D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
bit © (2004-08-14 22:00:00)Мне нужно переслать строку из одного приложения в другое, для этого я использовал следующий код:
type
PKeyData=^TKey;
tkey=string[16];
var
msg_sendkey:integer;
key:tkey;
procedure TForm1.FormCreate(Sender: TObject);
begin
msg_sendkey:=registerwindowmessage('sendkey');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h:hdc;
begin
key:='0100000000000100';
h:=findwindow(nil,'project1');
if h=0 then exit;
postmessage(h,msg_sendkey,integer(self.Handle),cardinal(@key));
end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
key:tkey;
begin
if msg.message=msg_sendkey then
begin
handled:=true;
if pkeydata(msg.lParam)<>nil then
key:=pkeydata(msg.lParam)^;
caption:=key;
end;
end;
Если прием и передача осуществляется в одном приложении, все работает нормально. Если в разных - вместо нужной строки принимается 'ЙА'.
Что я делаю неправильно?
TUser (2004-08-15 11:14:00) [1]Принимать так
procedure TScanerWindow.WMCOPYDATA(var Msg:TMessage);
var p:PCopyDataStruct;
begin
p:=PCopyDataStruct(Msg.lParam);
copy(PChar(p^.lpData),1,p^.cbData) - это переданная строка
end;
А передавать так
procedure NewEvent(S:string);
var h:hWND;
ac:PAnsiChar;
cd:TCopyDataStruct;
begin
h:=FindWindow('TScanerWindow','PDB Scaner ['+InCaption+']');
if h <> 0 then begin
ac:=PAnsiChar(S);
cd.cbData:=length(S);
cd.lpData:=ac;
SendMessage(h,WM_COPYDATA,Application.MainForm.Handle,integer(@cd))
end;
end;
Мастер (2004-08-15 00:58:00) [2]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1089261647&n=5
Прочитай всю ветку и
см. последний постинг от Тимохова. п.3
Используй WM_COPYDATA.