Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Межпрограммный интерфейс   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
4-1092140092
serg128
2004-08-10 16:14
2004.09.26
Как программно выключить аппаратное ускорение экрана?


1-1094717450
prorok2
2004-09-09 12:10
2004.09.26
CheckListBox и перерисовка


3-1093979991
Morrison
2004-08-31 23:19
2004.09.26
Как узнать значение autoincrement поля без ApplyUpdates?


14-1094114975
Knight
2004-09-02 12:49
2004.09.26
Кто-нибудь сам мониторы фокусировал?


14-1094302969
_silver
2004-09-04 17:02
2004.09.26
ping