用delphi5.0远程控制一个软件的启动,关闭,或更多的功能,最好举个例子!

解决方案 »

  1.   

    用winsoket,发个命令过去,接收到了就关机
      

  2.   

    [Servers]
    DataBaseServers = 168.36.6.61
    TransServers = 168.36.6.61
    program ddc;uses
      Forms,
      DDD in 'DDD.pas' {Form1};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    ddd.dfm
    object Form1: TForm1
      Left = 192
      Top = 107
      Width = 544
      Height = 375
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object Memo1: TMemo
        Left = 48
        Top = 16
        Width = 441
        Height = 193
        TabOrder = 0
      end
      object TcpServer1: TTcpServer
        OnAccept = TcpServer1Accept
        Left = 8
        Top = 16
      end
      object TcpClient1: TTcpClient
        Left = 16
        Top = 64
      end
    endddd.pas
    unit DDD;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Sockets, StdCtrls,IniFiles;type
      TForm1 = class(TForm)
        TcpServer1: TTcpServer;
        Memo1: TMemo;
        TcpClient1: TTcpClient;    procedure TcpServer1Accept(Sender: TObject;
          ClientSocket: TCustomIpClient);
        procedure FormCreate(Sender: TObject);
      private    { Private declarations }
      public    { Public declarations }
      end;
    TClientDataThread = class(TThread)
      private
      public
        ListBuffer :TStringList;
        TargetList :TStrings;
        procedure synchAddDataToControl;
        constructor Create(CreateSuspended: Boolean);
        procedure Execute; override;
        procedure Terminate;
      end;
    var
      Form1: TForm1;implementation
    var   HostSend : string ;
    {$R *.dfm}function GetIniIfo_LinesServer(): String ;//获取接收服务器名称
    var s : String  ;
        Ini: TIniFile;
    begin
      Ini := TIniFile.Create(ExtractFileDir(Application.Exename)+'.\Servers.ini')   ;
      s:= Ini.ReadString('Servers','TransServers',S);
      Result := s ;
    end ;//------------- TClientDataThread impl -----------------------------------------
    constructor TClientDataThread.Create(CreateSuspended: Boolean);
    begin
      inherited Create(CreateSuspended);
      FreeOnTerminate := true;
      ListBuffer := TStringList.Create;
    end;procedure TClientDataThread.Terminate;
    begin
      ListBuffer.Free;
      inherited;
    end;procedure TClientDataThread.Execute;
    begin
      Synchronize(synchAddDataToControl);
    end;procedure TClientDataThread.synchAddDataToControl;
    begin
     //TargetList.AddStrings(ListBuffer);
    end;
    //------------- end TClientDataThread impl -------------------------------------
    procedure SendMessagessing(S: String ) ;
    begin
     Form1.TcpClient1.RemoteHost := HostSend;
     Form1.TcpClient1.RemotePort :='6000';
     try
        if  Form1.TcpClient1.Connect then
             Form1.TcpClient1.Sendln(S) ;
       finally
             Form1.TcpClient1.Disconnect ;
       end ;
    end ;procedure TForm1.TcpServer1Accept(Sender: TObject;
      ClientSocket: TCustomIpClient);
    var
      s: string;
      DataThread: TClientDataThread;
    begin
       DataThread:= TClientDataThread.Create(true);
       s := ClientSocket.Receiveln;
       DataThread.TargetList := TStrings(s) ;
       if s ='Close' then
         Application.Terminte ;
       DataThread.Resume;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
        HostSend := GetIniIfo_LinesServer() ;
        TcpServer1.LocalPort := '5000' ;
        TcpServer1.Active := True ;
    end;end.
      

  3.   

    俺推荐两种方式:
    (一)在远程计算机中“种”下一个伺服程序,利用网络间通信(比如楼上所说的SOCKET)传送打开和关闭应用程序的命令,由伺服程序来执行命令。也就是说,伺服程序必须是活的,否则就没办法打开制定的应用程序了。
    (二)利用COM技术。如果远端计算机允许根据需要来打开和关闭应用程序,那么可以利用注册COM组件的方式在远端计算机中“种”下相关的信息。那么本地要求打开时,由对方操作系统根据服务请求在注册表中进行查找,从而打开相应的服务程序。断开连接是则自动关闭COM服务器。简单地说,控制远端的应用程序或者操作系统是不可能的。严格地说,是发出请求,由对方计算机中的程序进行响应或者不响应。也就是说,必须有“内应”。
      

  4.   

    用winsock,自己定义不同的消息,收到不同的消息激活不同事件就行了。