本人编写一个程序需要访问其他机器的内容,就是要允许用户使用如 \\name的方式输入他想访问的机子,然后我按照他给的计算机名name 列出一个目录列表供他选择。如同资源管理器那样。
 现在的问题是如何判断用户给的计算机名是存在的并且可以连接。及只要用户在运行菜单敲\\name可以访问的,我这里一样可以。
 当前我使用的是 InternetCheckConnection('http://name', 1, 0) 这样的方式。
有的机子返回真,有的返回假。不知何故? 请指正,或提出更好的办法。

解决方案 »

  1.   

    我的局域网中大约有70台机器,我试了一下,只有该机器的80端口是开着的机器,用
    InternetCheckConnection('http://name', 1, 0) 才返回true,其他均返回false。你还是用indy控件算了,ping一下机器,如有返回,则该机开着。
      

  2.   

    主要是有的机子把ping给屏蔽了。现在使用如下的代码实现,但还有问题.
    如果该机器可以访问就不会有问题,如果该机器不存在,则在reset(f); 是会报I/O错误
    但是如果在此处设一个断点,就不会报错,何故?不解?        strTemp := 'test';
            tempfile :=  'E:\temp1999.txt';
            if fileexists(tempfile) then
               deletefile(tempfile);
            winexec(pchar('cmd /C net view \\'+ strTemp +'>>'+tempfile),sw_hide);
            while not fileexists(tempfile) do
              sleep(1000);
            try
              AssignFile(f,tempfile);
              reset(f);
              size := FileSize(f);
            finally
              closefile(f);
            end;
            if size > 0 then
      

  3.   

    I/O错误估计是这句还未退出的缘故:
    winexec(pchar('cmd /C net view \\'+ strTemp +' >> ' + tempfile ), sw_hide);sleep(1000);--加大一点就没问题,我设为5000就不出错。
      

  4.   

    非常正确,我加为3000就可以了,但是网络的速度是不定的亚,我想定时2秒然后强制把它关了,但是用如下的代码好像没有奏效,大虾们有更好的主意嘛。   hwindow : hwnd;    hwindow:=findwindow(nil,'c:\winnt2\system32\cmd.exe');
            if hwindow<>0 then begin
              postMessage(hwindow,wm_sysCommand,sc_close,0);
            // 或  sendMessage(hwindow,wm_sysCommand,sc_close,0);        end;
      

  5.   

    我觉得你用了sw_hide参数,估计难于findwindow,倒不如这样:
    while not fileexists(tempfile) do
         sleep(1000);
    sleep(1000);  //500~1000
      

  6.   

    to VeryOldMan(老者) 还是不行,该dos窗口非得运行完成才会退出。
    我还是加大点时间吧。谢谢!