我们有一个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));