【发布时间】:2017-08-18 14:09:23
【问题描述】:
我正在用 C# 编写 Alt+Tab 替换,但在全屏应用程序中遇到了问题。
有没有办法检测SetForegroundWindow(hWnd) 调用是否会改变屏幕分辨率?或者等效地,如果hWnd 是全屏应用程序?我想等到分辨率更改完成,或者如果没有更改,请立即进行。
屏幕分辨率更改是异步完成的,函数调用在它发生之前就返回了,所以我的代码过早运行,并将我的应用程序绘制到全屏应用程序的表面上,尺寸错误,然后在分辨率更改后,它看起来特别丑。
如果有人感兴趣,我的申请来源是https://bitbucket.org/FrigoCoder/frigotab/src。
为了澄清,我更感兴趣的是事先知道分辨率是否发生变化,而不是稍后检测它。我已经知道了一个半解决方案,我在GetDesktopWindow() 或其他窗口上调用SetForegroundWindow() 并观看SystemEvents.DisplaySettingsChanging 和DisplaySettingsChanged。但是,如果发生分辨率更改,这只会给我一个延迟的异步通知,并且不会告诉我是否没有。
【问题讨论】:
-
您正在尝试解决错误的问题。只需在一个地方处理分辨率更改,一切都会好起来的。当分辨率改变时,只需重新绘制您的 UI。无需任何黑客攻击。
标签: c# winapi resolution alt-tab setforegroundwindow