在所有虚拟桌面上显示表单

时间:2017-06-23 18:49:26

标签: c# windows winforms

我正在创建一个小型调用应用程序,因此当用户没有注释时会出现一个窗口,并通知您需要指定要执行的活动,但是所有虚拟桌面都应该看到该窗口用户拥有。

我在SO中找到了两个帖子,但它们只告诉您如何更改工作区的默认行为,例如左右,右侧,创建,删除和在它们之间传输项目。

这些是帖子:

但正如我所说,我需要在所有工作区域都能看到窗口。我还看到当您按Alt + Tab并右键单击所需的窗口时,本机窗口有一个选项,您可以选择在所有工作区中保持打开状态。 here

那么如何在所有桌面上打开Windows窗体的情况下用C#编写应用程序?

示例:

这是第一个桌面开放视觉工作室。 Desktop 1 但是,当我更改桌面时,应用程序仍然在前台。 Desktop 2

1 个答案:

答案 0 :(得分:0)

通过将值0x00080080添加到WS_EX_STYLES枚举中,可以最轻松地完成此操作。并使用下面的样式。我能够使用here可用的Autohotkey脚本“ checkstyles”来获取此枚举,并检查vs 2019初始屏幕的样式。

IntPtr hwnd = WinAPI.CreateWindowEx2(
    0,
    WinAPI.RegisterClassEx2(ref wndClass),
    null,
    Win32Enums.WindowStylesEx.WS_EX_OVERLAPPEDWINDOW
    ,
    -5, //x
    0 - WinAPI.GetSystemMetrics(Win32Enums.SystemMetric.SM_CYCAPTION) - 7, //y
    ScreenInfo.GetDisplays().MaxWidth  + 10, //width
    ScreenInfo.GetDisplays().MaxHeight + WinAPI.GetSystemMetrics(Win32Enums.SystemMetric.SM_CYCAPTION) + 15, //height
    IntPtr.Zero,
    IntPtr.Zero,
    wndClass.hInstance,
    IntPtr.Zero);


var ExStyle = WinAPI.GetWindowLongPtr(hwnd, (IntPtr)Win32Enums.GWL.GWL_EXSTYLE);
WinAPI.SetWindowLongPtr(hwnd, Win32Enums.GWL.GWL_EXSTYLE, (IntPtr)((int)ExStyle | (int)Win32Enums.WindowStylesEx.WS_EX_VisualStudioEmulation));