我們有一個C#應用程序,可以在Windows XP和Windows Vista上正常工作,但不顯示任務欄(僅限於Vista)。在Windows Vista中,應用程序在底部工具欄中沒有圖標,即如果我打開應用程序,然後轉到另一個應用程序,我可以返回到應用程序的唯一方法是通過alt + tab通過,我無法單擊圖標在底部。Windows應用程序未顯示在Vista上的任務欄中
該應用程序的其他功能在XP中工作相同& Vista。請告知如何將其恢復到Vista?
問候,
我們有一個C#應用程序,可以在Windows XP和Windows Vista上正常工作,但不顯示任務欄(僅限於Vista)。在Windows Vista中,應用程序在底部工具欄中沒有圖標,即如果我打開應用程序,然後轉到另一個應用程序,我可以返回到應用程序的唯一方法是通過alt + tab通過,我無法單擊圖標在底部。Windows應用程序未顯示在Vista上的任務欄中
該應用程序的其他功能在XP中工作相同& Vista。請告知如何將其恢復到Vista?
問候,
我們通過將form屬性showintaskbar屬性設置爲true來修復它。
怪異的是,所有的Windows操作系統不以同樣的方式運行應用程序!
Windows使用擴展樣式位決定一個窗口是否應該有一個任務欄圖標,這些樣式是不是在C#直接訪問,而應正確設置,當您的形式是一種正常的申請表格。
控制此功能的標誌是WS_EX_APPWINDOW
,它設置在頂級窗體的擴展樣式中。來自CreateWindowEx
文檔
WS_EX_APPWINDOW
當窗口可見時,強制頂層窗口放到任務欄上。
您可以使用Spy ++查看是否爲您的窗口設置了該標誌。我知道確定設置它的唯一方法就是使用interop。
[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
const int GWL_EXSTYLE = -20;
const int WS_EX_APPWINDOW = 0x00040000;
int ExStyle = GetWindowLong(form.Handle, GWL_EXSTYLE);
SetWindowLong(form.Handle, GWL_EXSTYLE, new IntPtr(ExStyle | WS_EX_APPWINDOW));