C# 通过任务栏最大化启动外部应用程序(全屏)

C# 通过任务栏最大化启动外部应用程序(全屏),c#,c++,fullscreen,taskbar,C#,C++,Fullscreen,Taskbar,如何以“全屏”模式启动外部应用程序(无边框和任务栏)?是否可以只使用.Net Framework库来实现这一点?谢谢您的帮助。尝试使用“下一步” this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Maximized; this.Bounds = Screen.PrimaryScreen.Bounds; this.TopMost = true; 如果是PInvoke,请尝试此代码 pub

如何以“全屏”模式启动外部应用程序(无边框和任务栏)?是否可以只使用.Net Framework库来实现这一点?谢谢您的帮助。

尝试使用“下一步”

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;
如果是PInvoke,请尝试此代码

public static IntPtr HWND_TOPMOST = (IntPtr)(-1);
public const int SWP_SHOWWINDOW = 0x0040;

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,int x,int y,int cx,int cy, UInt32 uFlags);
叫这个

 IntPtr handle = this.Handle // or Handle to another window
 SetWindowPos(handle, HWND_TOPMOST, 0, 0, Screen.PrimaryScreen.Bounds.Right,
                    Screen.PrimaryScreen.Bounds.Bottom, SWP_SHOWWINDOW);
如前所述,创建覆盖任务栏的全屏窗口的最佳方法就是创建一个没有边框的全屏窗口

因为你的问题被标记为C++,所以我假设你可以把这个代码翻译成.NET的等价:

HWND CreateFullscreenWindow(HWND hwnd)
{
    HMONITOR hmon = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
    MONITORINFO mi = { sizeof(mi) };

    if (!GetMonitorInfo(hmon, &mi)) return NULL;

    return CreateWindow(TEXT("static"),
                        TEXT("something interesting might go here"),
                        WS_POPUP | WS_VISIBLE,
                        mi.rcMonitor.left,
                        mi.rcMonitor.top,
                        mi.rcMonitor.right - mi.rcMonitor.left,
                        mi.rcMonitor.bottom - mi.rcMonitor.top,
                        hwnd, NULL, g_hinst, 0);
}

你是用C语言还是C++开发的?将根据问题的解决情况进行选择。@Stecya这不会隐藏OP想要的任务栏。创建了新项目,将此代码添加到构造函数中,并明确隐藏taskbar@Stecya,我需要更改外部应用程序窗口的窗口样式,而不是我自己的。@Stecya Oops!它确实隐藏了任务栏。抱歉。@archer-那么您应该使用
WINAPI
来更改
Windows样式
。在C++中或C语言中,你可以通过<代码> PInvoke < /COD>来启动外部应用程序,而不是我自己的窗口。但是你可以让它填满整个屏幕,让边框保持原样,使用我在回答中展示的逻辑。获取窗口当前所在监视器的坐标,并更改窗口的大小以填充整个监视器。@archer:否。将其完全按所写内容传递给该函数将创建一个窗口。因为您希望为外部应用程序自定义窗口,所以不希望这样做。取而代之的是,您需要得到窗口的句柄,获取窗口当前所在的监视器的坐标,并调整窗口大小(使用<代码> StWistWOPOS < /Cuff>函数,如果您在C++中,没有人知道您想使用哪种语言)填写监视器的坐标。对于让我们猜测细节的问题,很难提供高质量的答案。您想使用哪种编程语言?您试图启动的外部应用程序是什么?为什么需要更改边框样式和窗口位置以覆盖任务栏?如果您打算将其替换为shell,那么以这种方式使用它将比使用
explorer.exe
容易得多。这是一个简单的注册表编辑,比试图隐藏任务栏要安全得多。@archer:右键单击任务栏,选择“属性”,然后取消选中标记为“将任务栏置于其他窗口之上”的框。无需申请。