我有一個應用程序需要在用戶單擊按鈕時激活Outlook(如果它正在運行)。我嘗試了以下,但它不工作。以編程方式激活Outlook
在窗口類中聲明:
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern bool IsIconic(IntPtr hWnd);
中的按鈕Click
處理程序:
// Check if Outlook is running
var procs = Process.GetProcessesByName("OUTLOOK");
if(procs.Length > 0) {
// IntPtr hWnd = procs[0].MainWindowHandle; // Always returns zero
IntPtr hWnd = procs[0].Handle;
if(hWnd != IntPtr.Zero) {
if(IsIconic(hWnd)) {
ShowWindowAsync(hWnd, SW_RESTORE);
}
SetForegroundWindow(hWnd);
}
}
這並不不論工作的展望當前是否被最小化到任務欄或最小化到系統托盤或最大化。如何激活Outlook窗口?
不幸的是,不能正常工作。我試過'SetWindowPos(hWnd,IntPtr.Zero,0,0,500,500,SWP_NOMOVE | SWP_NOSIZE)'。即使Outlook最小化,「SetForegroundWindow」和「SetWindowPos」的返回值都表示成功,並且「IsIconic」總是返回false。我開始認爲這是Outlook 2010的一些怪癖。 – Praetorian 2011-06-08 15:29:40
哎喲......奇怪的行爲。作爲一種潛在的解決方法,可以嘗試啓動用戶的默認電子郵件應用程序,而不是直接關注Outlook。 (假設Outlook是他們的默認...) – 2011-06-10 13:27:12
我該怎麼做? – Praetorian 2011-06-10 14:32:28