2010-03-02 93 views
1

我們有一個C#應用程序,可以在Windows XP和Windows Vista上正常工作,但不顯示任務欄(僅限於Vista)。在Windows Vista中,應用程序在底部工具欄中沒有圖標,即如果我打開應用程序,然後轉到另一個應用程序,我可以返回到應用程序的唯一方法是通過alt + tab通過,我無法單擊圖標在底部。Windows應用程序未顯示在Vista上的任務欄中

該應用程序的其他功能在XP中工作相同& Vista。請告知如何將其恢復到Vista?

問候,

回答

1

我們通過將form屬性showintaskbar屬性設置爲true來修復它。

怪異的是,所有的Windows操作系統不以同樣的方式運行應用程序!

1

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)); 
相關問題