可以控制其他程序/ Windows

我想知道是否可以调整除实际应用程序本身之外的程序。 IE,我想resize并移动Word和我的应用程序分别填充屏幕的70%和30%。

Private Sub MinimiseButton_Copy_Click(sender As Object, e As RoutedEventArgs) Handles MinimiseButton_Copy.Click Me.Left = SystemParameters.PrimaryScreenWidth - Me.Width + 14 Me.Top = -14 Me.Height = SystemParameters.PrimaryScreenHeight Dim parry As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("winword") Dim word As System.Diagnostics.Process = parry(0) SetWindowPos(word.Handle, 0, 0, 0, SystemParameters.PrimaryScreenWidth - Me.Width, SystemParameters.PrimaryScreenHeight - 28, &H10) End Sub  Public Shared Function SetWindowPos(hWnd As IntPtr, hWndInsertAfter As IntPtr, X As Integer, Y As Integer, W As Integer, H As Integer, uFlags As UInteger) As Boolean End Function 

这确实可行,试试这个function:

 [DllImport("user32.dll")] private static extern bool GetWindowRect(IntPtr hwnd, ref Rectangle rectangle); [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, uint msg, int WPARAM, int LPARAM); [DllImport("user32.dll", SetLastError = true)] internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int, Y, int cx, int cy, uint uFlags); public const uint WM_SYSCOMMAND = 0x0112; public const int SC_NEXTWINDOW = 0xF040; public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); public static readonly IntPtr HWND_TOP = new IntPtr(0); public static readonly IntPtr HWND_BOTTOM = new IntPtr(1); public const UInt32 TOPMOST_FLAGS = 0x0002 | 0x0001; Public void resisezeWindow(String procesname, int Width, int Height, Boolean bringtofront) { foreach (Process proc in Process.GetProcesses()) { IntPtr id = proc.MainWindowHandle; Rectangle rect = new Rectangle(); GetWindowRect(id, ref rect); if (proc.MainWindowTitle.Contains(procesname)) { PostMessage(proc.Handle, WM_SYSCOMMAND, SC_NEXTWINDOW, 0); MoveWindow(id, 0, 0, Width, Height, true); if(bringtofront) SetWindowPos(id, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); proc.Refresh(); } } } 

如果有问题,请通知我!