我的應用程序構建爲在Shell模式下運行(通過註冊表更改)。當我的應用程序處於Shell模式時,如何訪問手動啓動的Explorer的句柄?
允許用戶定義定製「按鈕」來調用實用程序,如CMD,註冊表編輯器,資源管理器...
當用戶按下被打開一個窗口,其指定的工具的按鈕。
按下應用程序窗口的最小化按鈕,驅動應用程序代碼縮小並將窗口移動到屏幕底部,隨後可由用戶移動或展開。
這適用於Explore.exe的例外。
在以下代碼中,proc.MainWindowHandle爲Emplorer.exe爲空/零。
瞭解這是一個'特例'程序,有沒有什麼辦法來確定Explorer.exe的MainWindowHandle,以便程序也可以管理它呢?
// Minimize all utility windows
Process[] procs = Process.GetProcesses();
Process currentProcess = Process.GetCurrentProcess();
IntPtr hWnd;
foreach (Process proc in procs)
{
if (proc.Id != currentProcess.Id)
{
if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero)
{
WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
GetWindowPlacement(hWnd, ref wp);
if (wp.showCmd != (int)ShowWindowCommand.ShowMinimized || wp.showCmd != (int)ShowWindowCommand.Minimize || wp.showCmd != (int)ShowWindowCommand.ShowMinNoActive)
{
ShowWindowAsync(hWnd, (int)ShowWindowCommand.ShowMinimized);
}
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SetWindowPosFlags.IgnoreMove | SetWindowPosFlags.DoNotActivate | SetWindowPosFlags.IgnoreResize);
}
}
}
Explorer創建*許多*窗口。你想成爲哪一個「主」的?一個合適的shell使用一個鉤子來發現Windows,SetWindowsHookEx()和WH_SHELL。 C#是這種鉤子的錯誤語言。 –