2011-08-03 19 views
6

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; 

Odpowiedz

11

Oto dzikie przypuszczenie. Uruchamiasz aplikację, która odbiera wiadomości jako administrator. W systemach Vista i wyższych ochrona integralności zatrzymuje procesy dostarczania komunikatów do procesów o wyższych poziomach integralności.

Z dokumentacji SendMessage:

Wysyłanie wiadomości podlega UIPI (User Interface Privilege Isolation). Wątek procesu może wysyłać komunikaty tylko do kolejek komunikatów wątków w procesach o mniejszym lub równym poziomie integralności.

+0

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

+3

Czy jesteś medium? To było super!! –

+3

@Fabricio Wiedziałem, że to powiesz! ;-) –

Powiązane problemy