编辑:更多信息我已将其范围缩小到某些计算机上的某些应用程序。我正在尝试在某个显示器上以全屏模式启动 chrome。这在我测试过的大多数系统上都能完美运行,但是我们遇到了一组运行 Windows 7 Pro 32bit 的计算机,这些计算机正在正确移动和调整大小,但它们的边框和按钮仍然完好无损。
我意识到 chrome 窗口都在单个 chrome 进程下生成,并且它们的生命周期是易变的,但是我们已经能够使用单独的数据目录来解决这个问题,该目录使每个 chrome 实例以这种方式在它自己的父进程中启动。Chrome 似乎是唯一一个我们在启动全屏且仅在一组计算机上时遇到问题的应用程序。例如,在运行 calc.exe 时,它会在我们测试过的所有系统上最大化并移除边框,而不会出现任何问题。我已经确认在每个系统上运行的 chrome 版本是相同的。如果有人对这个问题或进一步解决问题的方法有更深入的了解,我将不胜感激。
我正在尝试使用 SetWindowLong 在全屏模式下运行应用程序,并且在我尝试使用的最新计算机之前它运行良好。我基本上使用这个问题中引用的代码:Removing window border?
这在我的两台笔记本电脑(Windows 7 Ultimate)和我测试过的几个工作箱(Windows 7 POS Embedded)上都可以正常工作,但它不能在另一台工作的计算机(Windows 7 Professional)上工作。SetWindowLong 调用返回的预期值向我表明它应该可以工作,并且对 SetWindowPos 的调用可以正常工作,因为它可以正确调整窗口大小,但边框和按钮仍然存在!它的功能就好像根本没有调用 SetWindowLong 一样。我将非常感谢一些帮助,因为此时我没有想法。
编辑:这是凌晨 1 点红眼荣耀的代码。几乎是链接问题的直接副本。
int lStyle = GetWindowLong(process.MainWindowHandle, GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
_logger.Debug(String.Format("Style: {0}", lStyle)); // 369295360
var swlResult = SetWindowLong(process.MainWindowHandle, GWL_STYLE, lStyle);
_logger.Debug(String.Format("SetWindowLong: {0}", swlResult)); // 382664704
int lExStyle = GetWindowLong(process.MainWindowHandle, GWL_EXSTYLE);
lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE);
SetWindowLong(process.MainWindowHandle, GWL_EXSTYLE, lExStyle);
Screen screen = GetDisplay(display);
return SetWindowPos(
process.MainWindowHandle,
HWND_TOPMOST,
screen.WorkingArea.Left,
screen.WorkingArea.Top,
screen.WorkingArea.Width,
screen.WorkingArea.Height,
SetWindowPosFlags.SWP_FRAMECHANGED);