--------------------------------------------------------------------------
  str:=format('cmd /k Netsh interface ip set '+
              'address "%s" static %s %s %s 1',
              ['本地连接','192.168.1.101','255.255.255.0','192.168.1.1']);  param:=pansichar(str);
  winexec('cmd /k c:\devcon.exe -disable *dev_109a*',sw_hide);//1停止连接
  winexec(param,sw_hide);                                     //2更改参数
  winexec('cmd /k c:\devcon.exe -enable *dev_109a*',sw_hide); //3启动连接
  message('更改完成');                                      //4
-------------------------------------------------------------------------
*dev_109a*,是我的网卡ID,*是通配符。这个在设备管理器中可以查到。上面语句可能完成更改IP的功能。但还存在问题:1、2、3、4好像是并发执行的,4执行完了以后,IP参数还没有改过来,还要等一会才行,等多久就不知道了。问:怎么样让1234顺序执行,保证4执行完后一切就已经正常?

解决方案 »

  1.   

    对不起,打错字了。
    以上代码不是可能,而是一定能实现改IP的功能。经过验证的,XP下面。
      

  2.   

    找到一段代码,很管用
    ------------------------------------------------
    function Run(sCommandLine: string): Boolean;
    var
      lpStartupInfo: TStartupInfo;
      lpProcessInformation: TProcessInformation;
    begin
      FillChar(lpStartupInfo, Sizeof(TStartupInfo), #0);
      lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      lpStartupInfo.wShowWindow := SW_SHOW;
      Result := CreateProcess(nil, PChar(sCommandLine),
          nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil,
          lpStartupInfo, lpProcessInformation) and
        (WaitForSingleObject(lpProcessInformation.hProcess, 3600000) <> WAIT_FAILED);
    end;
    ------------------------------------------------
    现在的问题是,dos窗口需要手动关闭。怎么才能让它自动关闭呢?????
      

  3.   

    好啦,问题解决了。调用3楼代码的时候,sCommandLine 的首部 加上“cmd /c”表示dos命令执行完后窗口自动关闭。
      

  4.   

    或者LZ可以把命令写成BAT文件,然后执行这个BAT文件.