.net(proc.MainWindowHandle)にある別のプロセスのメインウィンドウにハンドルがあります。.net内のウィンドウを最大化するにはどうすればよいですか?
20727 次
3 に答える
24
SW_SHOWMAXIMIZEDを使用して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
私はこれにいくつかの問題を抱えていて、最終的にそれを解決することができました。私の場合、WPFアプリケーションを最大化または最小化する必要のあるWinFormアプリケーションがありました。
まず、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 に答える