Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизМежпрограммный интерфейс Найти похожие ветки
← →
bit © (2004-08-14 22:00) [0]Мне нужно переслать строку из одного приложения в другое, для этого я использовал следующий код:
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;
Если прием и передача осуществляется в одном приложении, все работает нормально. Если в разных - вместо нужной строки принимается "ЙА".
Что я делаю неправильно?
← →
Мастер © (2004-08-15 00:58) [1]http://delphimaster.net/view/4-1089261647/
Прочитай всю ветку и
см. последний постинг от Тимохова. п.3
Используй WM_COPYDATA.
← →
TUser © (2004-08-15 11:14) [2]Принимать так
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;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c