2017-12-13 21 views
-2

C++コンソールアプリケーションからWindows 10のDelphi Xアプリケーションにメッセージを送信しようとしましたが、何らかの理由で機能しません。以下 は私のC++コードです:C++からDelphi Xへのメッセージの送信

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    CString dataToSend = _T("MY DATA"); 
    COPYDATASTRUCT cds; 
    cds.dwData = 1; // can be anything 
    cds.cbData = sizeof(TCHAR) * (_tcslen(dataToSend) + 1); 
    cds.lpData = (void*)dataToSend.GetBuffer(cds.cbData); 

    HWND hwndFound;   // This is what is returned to the caller. 
    hwndFound = FindWindow(_T("TMyForm"), 0); 


    if (hwndFound) 
    { 
     printf("WINDOW IS FOUND %i... Sending a message...\n", hwndFound); 
     SendMessage(hwndFound, WM_COPYDATA, (WPARAM)hwndFound, (LPARAM)(LPVOID)&cds); 
    } 
    else 
    { 
     printf("WINDOW IS NOT FOUND!\n"); 
    } 



    char* end = ""; 
    printf("Press enter to continue..."); 
    scanf(end); 

    return 0; 
} 

これは私のDelphiコードです:

private 
    procedure WMCopyData(var Msg : TWMCopyData); message WM_COPYDATA; 
.... 


procedure TMyForm.WMCopyData(var Msg: TWMCopyData); 
var 
    s : AnsiString; 
begin 
    s := PAnsiChar(Msg.CopyDataStruct.lpData) ; 
    ShowMessage(s); 
end; 

.... 

procedure TMyForm.MyButtonClick(Sender: TObject); 
begin 
    // Checking my handle 
    ShowMessage(IntToStr(Handle)); 
end 

C++アプリは、それがハンドルを見つけたと言う:

WINDOWはメッセージの送信... 3609366発見されました。 .. Enterキーを押して続行...

MyButton(3609366)を押したときに同じハンドルが表示されますが、メッセージボックスは表示されません。 何らかの理由でDelphiアプリがメッセージを受信して​​いません。

理由はありますか?

P .:これらは同じユーザーアカウントで実行されます。

+1

サイドノートでは、Delphiコードは 'AnsiChar'データを期待しているので、C++コードでは' TCHAR'を使用すべきではありません。また、VCLは 'WM_COPYDATA'を内部的に使用しているので、' lpData'を解釈する前に 'dwData'を参照する必要があります(' dwData'の値に 'RegisterWindowMessage()'を使うべきです)。そして、 'WM_COPYDATA'の' WPARAM'は、受信者ではなく送信者の 'HWND'である必要があります。 –

+0

便利な情報 - ありがとう! –

答えて

0

DelphiにWM_USER + 1メッセージを送信していますが、そのメッセージをDelphiでリッスンしていません。

+0

質問を編集した後、この回答は適用されなくなりました。 –

+0

ただ気づいた。ありがとう! –

関連する問題