Delphi程序中怎样调用别的可执行程序?

Delphi程序中怎样调用别的可执行程序?,第1张

在 Delphi 程序中调用别的散知可执运腊行程序,可以使用三种方法:

1、冲悄消WinExec

示例代码

WinExec('Notepad.exe Readme.txt', SW_SHOW)//运行记事本

2、ShellExecute

//调用记事本 

ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL)

3、CreateProcess

WinSock是一组API,用于在网络上传输数据和交换信息。虽然现在有很多工具如FTP 程序可以在网络上传输数据和文件,但是通过WinSock编程有更大的灵活性,它不需要关心网络连接的细节,不过用WinSock编程却很复杂。在Delphi中我们并不需要直接与 WinSock的API打交道,因为TClientSocket元件和TServerSocket元件(在Internet页)封装了WinSock的大部分API,使得对WinSock的访问大大简化。下面这个远程控制的例子就很清楚地说明了这个问题,它可以发送一个消息给对方,并能够使对方的电脑关闭、重新启动或重新登录。

一实现原理

实行远程控制,实际上就是一个服务器程序(以下简称被控程序)和一个客户程序(以下简称主控程行散悄序):被控方即为服务器程序,它监听客户的请求,并作出处理;主控方即为客户程序,它连接上服务器后,发掘陆出自己的请求,服务器便根据自已的请求进行不同的响应。

二编写主控程序

1.新建一个项目Client.dpr,并把一个TClientSocket元件放到Form上,它的属性设置如下:Port设为100(端口号可任意设置,只要求双方统一),其他属性按默认值。在窗体上添加两个TEdit:Edit1,用来输入发送的字符,Edit2用来输入IP地址;档渣添加两个TButton:Button1,点击后用来连接被控机,Button2点击后用来发送字符,然后声明一个私有变量ConnectFlag,表示双方是否连接好:

private ConnectFlag:Boolean

2.ClientSocket1的OnConnect事件代码如下:

procedure TForm1.ClientSocket1Connect (Sender: TObjectSocket: TCustomWinSocket)begin ConnectFlag:=True//表示连接成功 end

3.ClientSocket1的OnError事件代码如下:

procedure TForm1.ClientSocket1Error(Sender: TObjectSocket: TCustomWinSocketErrorEvent: TErrorEventvar ErrorCode: Integer)begin Application.MessageBox(Pchar (‘不能连接到IP地址 : ' + Edit2.Text+‘。'+ #13+‘可能是监听程序没有运行或网络故障!'), ‘连接错误',MB_OK+MB_ICONSTOP)ErrorCode := 0end

4.Button1的OnClick事件代码如下:

procedure TForm1.Button1Click(Sender: TObject)begin with ClientSocket1 do begin if Active then begin Active := False//在连接之前首先关闭 ConnectFlag:=False//置连接标志为假 endif Length(Edit2.Text) >0 then begin Host := Edit2.Text//指定IP地址或主机名 Active := Trueendendend

5.Button2的OnClick事件代码如下:

procedure TForm1.Button2Click(Sender: TObject)begin if ConnectFlag then ClientSocket1.Socket.SendText(Edit1.Text) //如果连接成功则发送字符串 else Application.MessageBox(PChar(‘没有连接到地址 : ' + Edit2.Text+‘。'+#13+‘检查IP地址是否 存在或是否已经连接!'),‘提示信息',MB_OK+MB _ICONSTOP)end

三编写被控程序

1.新建一个项目Server.dpr,并把一个TServerSocket元件放到Form上,它的属性设置如下:Active设为True;Port设为100,其他属性按默认值。

2.ServerSocket1的OnClientRead事件代码如下:

procedure TForm1.ServerSocket1ClientRead (Sender: TObjectSocket: TCustomWinSocket)var Str:PCharCode,V:Integerbegin Str:=PChar(Socket.ReceiveText)//接收字符串 Val(Str,V,Code)//处理接收的字符串,首先转换字符串为整数 if Code<>0 then Application.MessageBox(Str, ‘提示信息',MB_OK+MB_ICONINFORMATION) //如果转换后的数据不是一个整型数 //就通过消息框来显示字符串 else if (V=0)or(V=1)or(V=2) then ExitWindowsEx(V,0) //调用Windows的API函数(V=0表示重新登录、 //V=1表示关机、V=2表示重启动) else Application.MessageBox (Str,‘提示信息',MB_OK+MB_ICONINFORMATION)//转换后数据不为0、1、2时在消息框内显示字符串 end

3.修改项目文件,不让窗口显示并且防止它运行两次,修改begin和end之间的代码如下:

begin Application.Initializeif FindWindow(‘TForm1',‘Form1')= 0 then begin //当没有找到Form1时执行下面代码 Application.ShowMainForm:=False//不显示主窗口 Application.CreateForm(TForm1, Form1)Application.Runendend.

四注意事项

1.网络要装配正确并安装TCP/IP协议,且要正常运行。

2.首先要运行被控程序。

3.必须知道对方的IP地址或主机名。

上述程序用Delphi5.0编写,在Windows98对等网、 WindowsNT4.0局域网以及Internet上运行通过。最后要声明的是此程序由于能够控制对方的计算机,在实验时要事先经过他人同意,不要给别人造成影响。 


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12420093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存