process.start只是按指定的參數來運行一個程序,而這個程序自己運行起來是什么樣子的就不是Process所能處理的了,不過當程序運行起來后倒是可以通過Process的MainWindowHandle來得到運行程序的主窗口的名柄.而通過這個句柄利用API函數MoveWindow來移動程序的主窗口.
[DllImportAttribute("user32.dll", EntryPoint = "MoveWindow")] public static extern bool MoveWindow(System.IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
ProcessStartInfo psi = new ProcessStartInfo(@"D:\EXE\FileControl.exe");
p = Process.Start(psi); Thread.Sleep(100);//讓程序停一會 MoveWindow(p.MainWindowHandle, 100, 100, 500, 200, true);
PS:測試了很久,發現直接在程序啟動后就去執行MoveWindow函數,始終無法成功,最后想到一點會不會是窗口句柄還未生成,就讓程序停了一會再跑 Thread.Sleep(100) 還真就成功了,提醒朋友們在使用時記得加上這句,或者還有其他機制我沒發現的,也請高手幫忙指點一二,因為可能這種方法不一定能適應所有程序窗口。