我正在开发一个系统但我不知怎样才能搜索到与本机相连的其他机器并且能关闭它。请问关闭机器的API函数是哪个?谢谢!
解决方案 »
- FASTRESPORT公式的问题,请帮忙解答
- delphi7中如何捕获Word 中的 WindowSelectionChange 事件?请高人指点,无限感激!
- 谁知道哪里可以下载 dxdraw for delphi 6 以上版本的???
- 怎样编译一个DLL控件?
- 请推荐几本学习DELPHI的好书和经典书,谢谢,并给分100.
- 各路大侠请帮忙!
- (100分)求教如何制作自动分区间的复杂分组统计报表?
- 关于网格超出的问题(100)
- 如何在BDE Administrator中设置databases连接SQL SERVER的数据库?
- 关于 DecisionGrid的问题
- 请问代码一行写不下怎么办?在线等待!
- reportbuilder中动态报表的问题!!!(立即给分!!)
我没有办法帮你写了,只是把主要思想说一下吧
首先实现远程控制,设计主控和受控,所以采用client/server结构,采用udp协议来实现
主要用到地api函数
mapwindowpoint 此函数进行坐标转换,将一个窗口地坐标映射到另外一个窗口
mcisendstring 此函数向媒体控制接口发送指令
---- 实行远程控制,实际上就是一个服务器程序(以下简称被控程序)和一个客户程序(以下简称主控程序):被控方即为服务器程序,它监听客户的请求,并作出处理;主控方即为客户程序,它连接上服务器后,发出自己的请求,服务器便根据自已的请求进行不同的响应。
---- 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: TObject;Socket: TCustomWinSocket);
begin
ConnectFlag:=True; //表示连接成功
end;
---- 3、ClientSocket1的OnError事件代码如下:
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent:
TErrorEvent;var ErrorCode: Integer);
begin
Application.MessageBox(PChar(' 不能连接到IP地址
: ' + Edit2.Text+'。'+
#13+'可能是监听程序没有运行或网络故障!'),'
连接错误',MB_OK+MB_ICONSTOP);
ErrorCode := 0;
end;
---- 4、Button1的OnClick事件代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ClientSocket1 do begin
if Active then begin
Active := False;//在连接之前首先关闭
ConnectFlag:=False; //置连接标志为假
end;
if Length(Edit2.Text) > 0 then begin
Host := Edit2.Text; //指定IP地址或主机名
Active := True;
end;
end;
end;---- 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: TObject;Socket: TCustomWinSocket);
var
Str:PChar;
Code,V:Integer;
begin
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.Initialize;
if FindWindow('TForm1','Form1')=0 then begin
//当没有找到Form1时执行下面代码
Application.ShowMainForm:=False; //不显示主窗口
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
ExitWindowsEx(UINT uFlags, DWORD dwReserved );
其中:uint uflags 参数为:
EWX_FORCE :中止无响应进程
EWX_LOGOFF :中止进程,注销用户
EWX_POWEROFF :关闭系统电源
EWX_REBOOT :重启
EWX_SHUTDOWN :关闭计算机