1

我在 C# 中创建了一个小应用程序,它从窗口中删除边框和标题,然后将大小设置为用户的分辨率并将其居中。当我想在窗口模式下玩游戏而不被边框烦恼时,它是我使用的实用程序。大多数游戏一切正常,但我尝试在最近发布的游戏 Alpha Protocol 上使用它,但它不起作用。我几乎可以说游戏还原了我的更改,但我不确定如何判断这是否属实。我正在使用导入的 API 函数 MoveWindow、SetWindowLong 和 SetWindowPos。

片段:

Win32.MoveWindow(hWnd, 0, 0, Convert.ToInt32(sizeXText.Text), Convert.ToInt32(sizeYText.Text), true);
Win32.SetWindowLong(hWnd, GWL_STYLE, Win32.GetWindowLong(hWnd, GWL_STYLE) & ~WS_CAPTION & ~WS_BORDER);
Win32.SetWindowPos(hWnd, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_DRAWFRAME);
4

2 回答 2

1

每次调用 SetWindowPos 时,它都会向WM_WINDOWPOSCHANGING窗口发送一条消息:带有 SetWindowPos 参数的可写副本。这使窗口有机会验证和更改参数。许多窗口会自动对重新定位和调整大小做出反应,以“智能”管理它们的非客户端装饰——我猜这就是这里发生的事情。OnWindowPosChanging 代码在处理 DRAWFRAME 之前重新设置非客户端装饰。

于 2010-05-31T10:06:46.790 回答
0

您应该使用 Spy++ 来调查游戏的窗口结构。

于 2010-05-30T23:21:22.017 回答