我在 .net (proc.MainWindowHandle) 中有另一个进程的主窗口的句柄。如何最大化.net内部的窗口?
问问题
20727 次
3 回答
24
您可以使用 SW_SHOWMAXIMIZED pinvoke 到 ShowWindow 以最大化窗口。
Pinvoke.net 在此处有一个 ShowWindow 条目。
例如,
// Pinvoke declaration for ShowWindow
private const int SW_SHOWMAXIMIZED = 3;
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
// Sample usage
ShowWindow(proc.MainWindowHandle, SW_SHOWMAXIMIZED);
于 2010-12-30T22:10:02.950 回答
3
我遇到了一些问题,最后设法解决了。就我而言,我有一个 WinForm 应用程序需要最大化或最小化 WPF 应用程序。
首先,我们需要导入 InteropServices
using System.Runtime.InteropServices;
然后我们需要方法来执行我们需要的操作:
[DllImport("user32.dll")]
private static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
接下来,我们可以通过进程名称检查进程,获取其窗口位置,然后更新其窗口位置:
/// <summary>
/// WINDOWPLACEMENT showCmd - 1 for normal, 2 for minimized, 3 for maximized, 0 for hide
/// </summary>
public static void MaximizeProcessWindow(string processName)
{
foreach (Process proc in Process.GetProcesses())
{
if (proc.ProcessName.Equals(processName))
{
try
{
WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
GetWindowPlacement(proc.MainWindowHandle, ref wp);
// Maximize window if it is in a normal state
// You can also do the reverse by simply checking and setting
// the value of wp.showCmd
if (wp.showCmd == 1)
{
wp.showCmd = 3;
}
SetWindowPlacement(proc.MainWindowHandle, ref wp);
break;
}
catch(Exception ex)
{
// log exception here and do something
}
}
}
}
您还可以通过窗口标题获取该过程:
if (proc.MainWindowTitle.Equals(processTitle))
根据流程,您的应用程序可能需要在管理员权限下执行。这可以通过添加清单文件然后添加以下管理员权限来完成:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
于 2016-06-10T20:14:18.463 回答
1
您也可以使用SetWindowPlacement。Pinvoke.net 上有关于它的更多信息。
于 2010-12-30T22:31:28.123 回答