Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Межпрограммный интерфейс [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо