回 帖 发 新 帖 刷新版面

主题:[讨论]紧急求助xp下如何用delphi实现远程关机。。。。。。

急啊!
  要在xp下用delphi实现远程关机、重启,锁定机子或解琐
各位大哥帮帮忙!急。。。。。。。。。。。。。。。

回复列表 (共8个回复)

沙发

关机函数 ExitWindowsEx其他的没有注意

板凳

好像那是98的,xp下不能用啊

3 楼

那我也不知道,我没有再xp下试过

4 楼

到msdn搜索gina编程

5 楼

2000以后版本要先取得权限,在调用关机函数 ExitWindowsEx

6 楼

编写主控程序 
新建一个项目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; 


7 楼

编写被控程序 

  ---- 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.   

8 楼


注意事项 

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

  ---- 2、首先要运行被控程序。    

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

以上代码稍做修改就能实现销定   

我来回复

您尚未登录,请登录后再回复。点此登录或注册