いくつかのターゲットアプリケーションのウィンドウを表示/非表示にするプログラムを書いています。私は以前にそれをテストしていて、何か奇妙なことに気づきました。ターゲットアプリケーションを管理者として実行した場合(右クリック-> [プロパティ]、[互換性]タブ、[このプログラムを管理者として実行])、機能しません。
実例を示すために、「TargetApplication」という単純なGUIアプリを作成してから、このアプリケーションの表示/非表示をテストするために次のコードを作成しました。
class Program
{
static void Main(string[] args)
{
IntPtr windowPtr = FindWindow(null, "TargetApplication");
ShowWindow(windowPtr, 0); // 0 = Hide
Console.WriteLine("The window is now hidden. Press Enter to restore");
Console.ReadLine();
ShowWindow(windowPtr, 9); // 9 = Restore
Console.WriteLine("The window is now restored. Press Enter to exit.");
Console.ReadLine();
}
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}
管理者権限なしでウィンドウアプリケーションを起動すると、機能しません。
誰かが私のためにこれをテストしてくれませんか?ここに両方のアプリケーションの.exeをアップロードしました:
それらをダウンロードしてTestApplication.exeを実行してから、TestShowWindow.exeを実行するだけです。TestApplication.exeを管理者として実行するように変更すると、ShowWindowが機能しなくなることがわかります。
もちろん、私のものをダウンロードすることを信用できない場合は、いつでも私のコードをコンパイルして、互換性モードを変更できるWindowsの任意のターゲットアプリケーションでテストできます。
PS違いがあるかどうかはわかりませんが、Windows8Proを実行しています。64ビット。