none
Process.Start 如何控制窗口大小 RRS feed

  • 问题

  • 大家好,我用Process.Start来打开一个记事本程序,那么我如何控制这个打开的记事本程序窗体的大小呢?

    谢谢!

    2013年1月8日 7:04

答案

全部回复

  • 除非被调用程序支持 控制参数 否则默认应该和上一次在windows中打开的大小一致。(操作系统记录的)


    family as water

    2013年1月8日 7:15
  • 你好,這樣子呼叫,就好像你直接執行一樣,根據上次開始後再關上時的大小去決定

    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    2013年1月8日 10:40
  • 您好,
    請參考 How to set the height of a window using c#?



    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年1月8日 14:14
  • windows api CreateProcess是支持的:
    http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx
    http://msdn.microsoft.com/en-us/library/ms686331(v=vs.85).aspx
    但是。net的ProcessStartInfo里却不支持。

    2013年1月9日 3:31
  • 你好!

        如 heroboy_ywq所说,直接使用Windows API是可以做到的,就是繁琐一些:

    using System.Runtime.InteropServices;
        [System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
             public   class  SECURITY_ATTRIBUTES
            {
                 public   int  nLength;
                 public   string  lpSecurityDescriptor;
                 public   bool  bInheritHandle;
            }
    
            [StructLayout(LayoutKind.Sequential)]
             public   struct  STARTUPINFO
            {
                 public   int  cb;
                 public   string  lpReserved;
                 public   string  lpDesktop;
                 public   int  lpTitle;
                 public   int  dwX;
                 public   int  dwY;
                 public   int  dwXSize;
                 public   int  dwYSize;
                 public   int  dwXCountChars;
                 public   int  dwYCountChars;
                 public   int  dwFillAttribute;
                 public   int  dwFlags;
                 public   int  wShowWindow;
                 public   int  cbReserved2;
                 public   byte  lpReserved2;
                 public  IntPtr hStdInput;
                 public  IntPtr hStdOutput;
                 public  IntPtr hStdError;
            }
    
            [StructLayout(LayoutKind.Sequential)]
             public   struct  PROCESS_INFORMATION
            {
                 public  IntPtr hProcess;
                 public  IntPtr hThread;
                 public   int  dwProcessId;
                 public   int  dwThreadId;
            }
            [DllImport( " Kernel32.dll " , CharSet  =  CharSet.Ansi)]
             public   static   extern   bool  CreateProcess(
                StringBuilder lpApplicationName, StringBuilder lpCommandLine,
                SECURITY_ATTRIBUTES lpProcessAttributes,
                SECURITY_ATTRIBUTES lpThreadAttributes,
                 bool  bInheritHandles,
                 int  dwCreationFlags,
                StringBuilder lpEnvironment,
                StringBuilder lpCurrentDirectory,
                 ref  STARTUPINFO lpStartupInfo,
                 ref  PROCESS_INFORMATION lpProcessInformation
                ); 
                 string  argm  =   " notepad.exe " ;
    
                STARTUPINFO sInfo  =   new  STARTUPINFO();
                sInfo.dwXSize=300;
                sInfo.dwYSize=300;
                PROCESS_INFORMATION pInfo  =   new  PROCESS_INFORMATION();
    
                 if  ( ! CreateProcess( null ,  new  StringBuilder(argm),  null ,  null ,  false ,  0 ,  null ,  null ,  ref  sInfo,  ref  pInfo))
                {
                     throw   new  Exception( " 调用失败 " );
                }
                 uint  i  =   0 ;
                WaitForSingleObject(pInfo.hProcess,  int .MaxValue);            
                GetExitCodeProcess(pInfo.hProcess,  ref  i);
                CloseHandle(pInfo.hProcess);
                CloseHandle(pInfo.hThread); 







    周雪峰

    2013年1月9日 9:04
    版主