我没有用过你所说的那个软件,但是我认为这应该是一个远程控制问题,我开发过类似的软件,我采用了以下的设计方法:
首先,我假设对方为服务器,自己为客户端,首先我必须将他们连接起来,为了将他们连接服务器我会这么设计,放一个ServerSocket组件在服务器端,用于监听来自客户端的请求,再在服务器端放以下组件DriveComboBox,DirectoryListBox,FileListBox,分别用来获得服务器的驱动器列表,目录列表,文件列表:
客户端设计时,放以下组件:ClientSocket,ListBox,ClientSocket用来向服务器发出请求(它的port属性应该和服务器端的ServerSocket属性相同,否则不能正确连接),执行相应的动作,listbox用来接受反馈过来的数据,
下面我给出源代码,当然是核心部分:客户端:
再你的form上加一个button它的click事件中加入如下代码:
clientsocket1.Address:=combobox1.Text ;//这是对方的ip
clientsocket1.Port:=strtoint(edit1.Text );//监听的端口和服务器相同
clientsocket1.Active:=true;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
clientsocket1.Socket.SendText('dirve');//获取驱动器列表
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 clientsocket1.Socket.sendtext('direc'+edit4.Text);//目录列表edit4.text中的内容就是你要察看的目录如'c:\',则返回服务器c:\下所有目录
end;procedure TForm1.BitBtn3Click(Sender: TObject);
begin
 clientsocket1.Socket.sendtext('files'+edit4.text);//文件列表edit4.txt中的内容为你要察看目录下的文件,如c:\temp,则返回服务器c:\temp下所有文件
end;服务器端:
procedure TForm1.FormCreate(Sender: TObject);
serversocket1.Open;
serversocket1.Active:=true;
serversocket1.Socket.Lock;
end;procedure TForm1.serversocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);//接受客户端发来的请求serversocket的read事件
var
   data,workfile:string;
begin
   data:=socket.ReceiveText ;//接受来自客户端的请求
   workfile:=copy(data,6,length(data)-5); if pos('dirve',data)=1 then   // 要求取得驱动器列表
  begin
    socket.SendText('dirve'+DriveComboBox1.Items.Text );//返回驱动器列表
  end; if pos('direc',data)=1 then
    begin
     drivecombobox1.Text :=workfile;//取得你所要求目录
     socket.Sendtext('direc'+DirectoryListBox1.Items.Text);//返回目录列表
    end;if pos('files',data)=1 then
    begin
     DirectoryListBox1.Directory:=strfile;//取得你所需要的文件列表
     socket.SendText('files'+FileListBox1.Items.Text);//返回客户端
    end;
end;然后客户端受到消息之后作相应的处理procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  serback,workfile :string;
 u : integer;
begin
 serback:=socket.ReceiveText ;//接受来自服务的消息
  workfile:=copy(strback,6,length(strback)-5);if pos('dirve',serback)=1 then
   begin
       listbox1.Items.Text:=workfile;//获得服务器的驱动器的列表
   // 盘图标
    listview1.Items.Clear ;
      with listview1 do
    begin
    for  u:=0 to listbox1.Items.Count-1  do
      begin
       ListItem := Items.Add;
       ListItem.Caption:=listbox1.Items.Strings[u];
      //listitem.ImageIndex:=4;
      end;
    end;
    //
     listbox1.Items.Add('<<<<<<目标主机的驱动器>>>>>>>') ;
  end;if pos('direc',serback)=1 then
   begin
    listbox1.Items.Text:=workfile;
    listview1.Items.Clear ;
      with listview1 do
    begin
    for  u:=0 to listbox1.Items.Count-1  do
      begin
       ListItem := Items.Add;
       ListItem.Caption:=listbox1.Items.Strings[u];
       //listitem.ImageIndex:=3;
       //listview1.PopupMenu:=PopupMenu2;
      end;
   end;
     listbox1.Items.Add('目标主机的目录') ;
   end;
if pos('files',strback)=1 then
   begin
    listbox1.Items.text:=strfile;
    listbox1.Items.Add('*************目标主机的文件****************') ;
    listview1.Items.Clear ;
      with listview1 do
    begin
    for  u:=0 to listbox1.Items.Count-1  do
      begin
       ListItem := Items.Add;
       ListItem.Caption:=listbox1.Items.Strings[u];
    //   listitem.ImageIndex:=1;
      end;
   end;
如此只要你再edit4中输入你所想察看的东西时对方计算机内容全部在listbox中被显示出来
如果你想程序和对方服务器一接通就能获得对方电脑的内容在ClientSocket的onConnect事件中加入
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   socket.SendText('dirve'+DriveComboBox1.Items.Text );//返回驱动器列表,你可以写成其他的
如:socket.SendText('dirve'+DriveComboBox1.Items.Text+'?'+DirectoryListBox1.Items.Text );
这样你在接受时以特殊字符'?'为分界线作相应的处理就能获得不同的内容.
end;
那么对方的电脑的驱动器列表就在连接上的那一刻被返回.
如果你想实时监控对方的电脑,再在服务器端加一个timer,将它的interval属性设为3000(当然你可以任意)这样
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ServerSocket1.socket.Sendtext('direc'+DirectoryListBox1.Items.Text);//返回目录列表,你可以改为其他的
end;
这样你就可以随时监视对方的变化,当然首先对方必须启动服务器程序,你必须知道对方的ip

解决方案 »

  1.   

    如果你发现这种情况:有的按钮事件不能成功响应时,清这么改一下:
    socket.SendText('dir!!'+DriveComboBox1.Items.Text );//返回驱动器列表
    socket.Sendtext('dire!'+DirectoryListBox1.Items.Text);//返回目录列表
    socket.SendText('file!'+FileListBox1.Items.Text);//返回客户端
    客户端发送请求时也这么改一下
        
        
      

  2.   

    cutelocust(风) 
    兄弟,小弟我就是遇上你说的这个问题,帮小弟去看下好吗?
    http://www.csdn.net/expert/topic/694/694660.xml?temp=.8966486