怎样远程控制软件的启动\关闭? 用delphi5.0远程控制一个软件的启动,关闭,或更多的功能,最好举个例子! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用winsoket,发个命令过去,接收到了就关机 [Servers]DataBaseServers = 168.36.6.61TransServers = 168.36.6.61program ddc;uses Forms, DDD in 'DDD.pas' {Form1};{$R *.res}begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run;end.ddd.dfmobject 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 endendddd.pasunit 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;implementationvar 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. 俺推荐两种方式:(一)在远程计算机中“种”下一个伺服程序,利用网络间通信(比如楼上所说的SOCKET)传送打开和关闭应用程序的命令,由伺服程序来执行命令。也就是说,伺服程序必须是活的,否则就没办法打开制定的应用程序了。(二)利用COM技术。如果远端计算机允许根据需要来打开和关闭应用程序,那么可以利用注册COM组件的方式在远端计算机中“种”下相关的信息。那么本地要求打开时,由对方操作系统根据服务请求在注册表中进行查找,从而打开相应的服务程序。断开连接是则自动关闭COM服务器。简单地说,控制远端的应用程序或者操作系统是不可能的。严格地说,是发出请求,由对方计算机中的程序进行响应或者不响应。也就是说,必须有“内应”。 用winsock,自己定义不同的消息,收到不同的消息激活不同事件就行了。 问这个是BUG,还是可以这样写? 关于事件和消息的问题一个,望高手解惑! 请教高手! 关于QTINTF70.DLL 我得到FontStyle是數字類型,如何把數字轉換成fsBold,fsItalic的形式。 创业公司招了五六个人,过了一天都不来了 如何判断输入到edit中的数据是不是一个有效的日期 请教!!! 疑难杂症? 我的程序在调用了自己编写的.dll后,关闭程序会提示"kernel32.dll"发生错误 今天同事问点网络问题,自己还真是门外汉,帮点忙。呵呵 如何使这段代码通过。
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.
(一)在远程计算机中“种”下一个伺服程序,利用网络间通信(比如楼上所说的SOCKET)传送打开和关闭应用程序的命令,由伺服程序来执行命令。也就是说,伺服程序必须是活的,否则就没办法打开制定的应用程序了。
(二)利用COM技术。如果远端计算机允许根据需要来打开和关闭应用程序,那么可以利用注册COM组件的方式在远端计算机中“种”下相关的信息。那么本地要求打开时,由对方操作系统根据服务请求在注册表中进行查找,从而打开相应的服务程序。断开连接是则自动关闭COM服务器。简单地说,控制远端的应用程序或者操作系统是不可能的。严格地说,是发出请求,由对方计算机中的程序进行响应或者不响应。也就是说,必须有“内应”。