使用StartupInfo的参数设置窗口的启动位置的大小

在后台运行DOS程序,退出后不在系统任务栏中  
   
  出现winoldap进程的实现  
   
  下面是我在大富翁上拉下来的一个例子,测试非常成功   -   真是不留一点痕迹!  
   
  1.功能函数  
   
  function   WinExecAndWait32(FileName:String;   Visibility   :   integer):   DWORD;  
  var  
  zAppName:array[0..512]   of   char;  
  zCurDir:array[0..255]   of   char;  
  WorkDir:String;  
  StartupInfo:TStartupInfo;  
  ProcessInfo:TProcessInformation;  
  begin  
  StrPCopy(zAppName,FileName);  
  GetDir(0,WorkDir);  
  StrPCopy(zCurDir,WorkDir);  
  FillChar(StartupInfo,Sizeof(StartupInfo),#0);  
  StartupInfo.cb   :=   Sizeof(StartupInfo);  
  StartupInfo.dwFlags   :=   STARTF_USESHOWWINDOW;  
  StartupInfo.wShowWindow   :=   Visibility;  
  if   not   CreateProcess(  
  nil,  
  zAppName,   {   pointer   to   command   line   string   }  
  nil,   {   pointer   to   process   security   attributes   }  
  nil,   {   pointer   to   thread   security   attributes   }  
  false,   {   handle   inheritance   flag   }  
  CREATE_NEW_CONSOLE   or   {   creation   flags   }  
  NORMAL_PRIORITY_CLASS,  
  nil,   {   pointer   to   new   environment   block   }  
  nil,   {   pointer   to   current   directory   name   }  
  StartupInfo,   {   pointer   to   STARTUPINFO   }  
  ProcessInfo   {   pointer   to   PROCESS_INF   }  
  )  
  then   Result   :=   $FFFFFFFF   else   begin  
  WaitforSingleObject(ProcessInfo.hProcess,INFINITE);  
  GetExitCodeProcess(ProcessInfo.hProcess,Result);  
  end;  
  end;  
   
  2.使用例程  
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
    WinExecAndWait32('COMMAND.COM   /C   COPY   C:/AUTOEXEC.BAT   D:/',SW_NORMAL);  
    showmessage('ok');  
  end;  
   
  3.下载例程  
   
  4.   补充说明   没翻译完在win32.hlp中输入StartupInfo,CreateProcess自己查看吧.  
   
     
   
    翻译的Win32API帮助,   E文很臭,有误人子弟的地方请参考帮助.  
   
   
  TStartupInfo一些说明:  
   
    StartupInfo结构被CreateProcess函数用来指定一个新建立的线程主  
  窗口的属性,对于GUI(Graphics   User   Interface)线程来说,这些信息  
  影响CreateWindow函数建立和ShowWindow函数显示的第一个窗口.而对  
  控制台程序,这些信息影响线程建立的新的控制台程序.当一个线程建  
  立后,能够利用GetStartupInfo函数获取一些StartupInfo的信息.   
    

如果要指定外部程序的启动位置和窗口大小,需要对 StartupInfo的参数进行设定。
StartupInfo.dwFlags :=  STARTF_USESHOWWINDOW or STARTF_USESIZE or  STARTF_USEPOSITION   ; 

Size 与Postion 才有作用。如果不起作用,请参考http://blog.csdn.net/wjw806/archive/2008/05/04/2386073.aspx的说明注意事项。


  typedef   struct   _STARTUPINFO   {   //   si    
      DWORD   cb;                     //指定该结构的大小(字节数)  
      LPTSTR   lpReserved;   //保留.在该结构通过CreateProcess之前,  
                                            //设置该成员为NULL.  
      LPTSTR   lpDesktop;     //仅仅Windows   NT支持.  
      LPTSTR   lpTitle;         //对控制台程序来说,lpTitle在新建的控制台程序  
                                      //窗口标题栏中显示.如果lpTitle=NULL,可执行文  
                                      //件的名字显示在标题栏中.如果为GUI程序或不建立  
                                      //新窗口控制台程序,lpTitlel的值一定要设置为Null    
   
      DWORD   dwX;                             //当dwFlags为STARTF_USEPOSITION才起作用.控制窗口  
                                      //左上角相对屏幕的位置.单位是像素.对GUI程序来说,  
                                      //新程序调用CreateWindow(参数x=CW_USEDEFAULT)建  
                                      //立一个OverLap窗口时,首先使用指定的位置.  
      DWORD   dwY;                             //见上.  
      DWORD   dwXSize;             //当dwFlags为STARTF_USESIZE才起作用.指定窗口的长宽  
                                      //单位是像素.对GUI程序来说,新程序调用CreateWindow  
                                      //(参数nWidth=CW_USEDEFAULT)建立一个OverLap窗口时,首先使  
                                      //用指定的长宽.                        
      DWORD   dwYSize;           //见上.  
      DWORD   dwXCountChars;    
      DWORD   dwYCountChars;    
      DWORD   dwFillAttribute;    
      DWORD   dwFlags;      
      WORD   wShowWindow;    
      WORD   cbReserved2;    
      LPBYTE   lpReserved2;    
      HANDLE   hStdInput;    
      HANDLE   hStdOutput;    
      HANDLE   hStdError;    
   
    }   STARTUPINFO,   *LPSTARTUPINFO;    
   
  /////////////////////////////////////  
  TStartupInfo   这个结构中有一个   sShowWindow   栏位,   将之设为   SW_HIDE即可,  
  同时,   dwFlags   标志中至少需含有   STARTF_USESHOWWINDOW,   否则CreateProcess  
  时,   sShowWindow   栏位的设定会无效,   以下是修改过的程式:  
   
  var  
        sCommandLine:   string;  
        bCreateProcess:   boolean;  
        lpStartupInfo:   TStartupInfo;  
        lpProcessInformation:   TProcessInformation;  
  begin  
        //   sCommandLine   的内容请视您的情况修改  
        sCommandLine   :='Xcopy   d:/temp/temp1/*.*   d:/temp/temp2   /v/y';  
        lpStartupInfo.dwFlags   :=   STARTF_USESHOWWINDOW;  
        lpStartupInfo.wShowWindow   :=   SW_HIDE;  
        bCreateProcess   :=   CreateProcess(nil,   PChar(sCommandLine),nil,nil,True,   
                                 

你可能感兴趣的:(使用StartupInfo的参数设置窗口的启动位置的大小)