2011-05-24 114 views
9

如何發送&從其他Delphi創建的應用程序接收命令?
我想發送命令給我的其他應用程序。
Delphi:如何發送命令給其他應用程序?

+1

你在問什麼是一個複雜的問題。首先,你的其他應用程序使用哪些輸入管道?它是基於命令行接受stdin輸入嗎?你只是想用一些開關來啓動它嗎?還是它有一些你可以打電話的API?也許它使用信號量或信號?如果不先確定管道,則無法確定如何通信。 – 2011-05-24 18:58:25

+0

它並不複雜。 = p我只是不那麼聰明。 – 2011-05-24 19:04:03

+0

我並不是想暗示任何東西。我只是覺得你的其他應用程序已經寫好了,在這種情況下拋出通信建議並不會很有幫助。如果你沒有API進行交互,那麼解釋如何使用它的答案是無關緊要的。 – 2011-05-24 19:08:15

回答

21

發件人:

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls; 

const 
    WM_MY_MESSAGE = WM_USER + 1; 

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    h: HWND; 
begin 
    h := FindWindow(nil, 'My Second Window'); 
    if IsWindow(h) then 
    SendMessage(h, WM_MY_MESSAGE, 123, 520); 
end; 

end. 

接收機:

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs; 

const 
    WM_MY_MESSAGE = WM_USER + 1; 

type 
    TForm1 = class(TForm) 
    private 
    { Private declarations } 
    protected 
    procedure WndProc(var Message: TMessage); override;  
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.WndProc(var Message: TMessage); 
begin 
    inherited; 
    case Message.Msg of 
    WM_MY_MESSAGE: 
     ShowMessageFmt('The other application sent the data %d and %d.', [Message.WParam, Message.LParam]); 
    end; 
end; 

end. 

確保接收形式的標題是 '我的第二個窗口'。

+0

這是低調,因爲...? – 2011-05-24 19:32:48

+0

...重寫WndProc並不理想。 – 2011-05-24 19:38:04

+3

@userNN:是的,但我*真的*不認爲它激勵downvote。另外,如果你沒有解釋你爲什麼低估了,沒有人會理解這是它的原因,所以你的低估將被完全浪費!真的,如果你想爲那些幾乎不值得做評論的小事情付出代價,那麼你需要對所有的答案都下決心...... – 2011-05-24 19:38:52

3

查找進程間通信。你一些輕量級適當的選項可以是:

  • 定義自己的自定義窗口 消息
  • 使用WM_COPYDATA
5

Windows消息可能是一個解決方案 - 一個有趣的文章可以在這裏找到:http://delphi.about.com/od/windowsshellapi/a/aa020800a.htm

+0

這是*解決方案。沒有理由downvote。補償,+1。 – 2011-05-24 19:00:00

+0

@robrok你很快就會暈倒。這樣做會使我們不那麼熱衷於回答。如果我是你,我會集中注意力。我個人從來沒有對自己的問題冷落。我把它留給別人。 – 2011-05-24 19:31:28

+0

你是什麼意思*編輯答案*?你問了一個問題,我提供了一個答案,這對你所問的問題就足夠了。它沒有代碼,但這並不意味着它是錯誤的。你還沒有要求代碼。我鏈接的文章將幫助你理解消息傳遞的主題,這是一個複雜的話題,在使用Delphi或Windows進行編程時非常值得了解。 EOT。 – Sorrow 2011-05-24 19:41:13

7

以下是關於此主題的完整教程,您可以在此處找到它:

http://delphi.about.com/od/windowsshellapi/a/wm_copydata.htm

+1

鏈接不是答案! – 2011-05-24 19:07:15

+3

爲什麼你看不懂? – opc0de 2011-05-24 19:28:12

+1

@Robrok,你提出的問題對於其複雜的主題同樣微小且不確定。閱讀[this](http://msdn.microsoft.com/en-us/library/aa365574(VS.85).aspx)並返回有關您選擇的特定方法的問題。 – 2011-05-24 19:31:42

1

如果你正在編寫這兩個應用程序,TCP/IP可以是一個比windows消息更清潔的解決方案。這兩個應用程序甚至可以位於網絡中的不同計算機上。

相關問題