Mam dwie aplikacje, komunikują się z wiadomościami, wszystko działa zgodnie z oczekiwaniami, jeśli uruchomię dwa skompilowane exe. Ale kiedy uruchamiam (debuguję) nadawcę z delphi ide (bds2006, próbowałem z delphi 7 bez szczęścia), sendmessage nie wysyła niczego.Delphi IDE zapobiega wysyłaniu wiadomości
Wygląda na to, że idea uniemożliwia wysyłanie wiadomości do innej aplikacji. Używam WM_COPYDATA, na Win7 64bit i Borland 2006.
jakiś pomysł?
Nadawca:
procedure TForm1.Button1Click(Sender: TObject);
var dst: THandle;
stringToSend : string;
copyDataStruct : TCopyDataStruct;
begin
stringToSend := 'Hello';
copyDataStruct.dwData := 0; //use it to identify the message contents
copyDataStruct.cbData := 1 + Length(stringToSend) ;
copyDataStruct.lpData := PChar(stringToSend) ;
SendData(copyDataStruct) ;
end;
procedure TForm1.SendData(const copyDataStruct: TCopyDataStruct) ;
var
receiverHandle : THandle;
res : integer;
begin
receiverHandle := findwindow(pchar('TForm2'), pchar('Form2'));
if receiverHandle = 0 then
begin
ShowMessage('CopyData Receiver NOT found!') ;
Exit;
end;
res := SendMessage(receiverHandle, WM_COPYDATA, Integer(Handle), Integer(@copyDataStruct)) ;
end;
end.
Odbiornik część:
TForm2 = class(TForm)
private
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
public
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TReceiver }
procedure TForm2.WMCopyData(var Msg: TWMCopyData);
begin
ShowMessage('Received');
end;
W rzeczywistości sytuacja była odwrotna, uruchomiłem program exe jako administrator (ponieważ mój totalcommander został uruchomiony jako administrator), a debugger jako zwykły użytkownik ... bardzo dobrze dzikie domysły, dziękuję. :) – balazs
Czy jesteś medium? To było super!! –
@Fabricio Wiedziałem, że to powiesz! ;-) –