2010-03-02 88 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)); 
相关问题