ruby - 如何使用 Ruby 和 Win32API 获取 Windows 屏幕方向
问题描述
我试图让 Windows 屏幕方向将某种复活节彩蛋放入游戏中,当显示器倒置时会发生这种情况。
我知道 Fiddle 存在,但这不是我问的问题。如果它不能在 Win32API 中完成,请告诉我,我将放弃这个小功能。
另外,免责声明,Ruby 对我来说不是最熟悉的语言,但我喜欢学习和克服挑战,所以请继续使用它。
class DisplayData < Struct.new(:dmFields)
def initialize(dmFields=1); super end
end
def Win32API.orientation
data = DisplayData.new()
getDisplaySettings = Win32API.new('user32','EnumDisplaySettingsEx','%w(P I P)', 'l')
getDisplaySettings.call("", -1, (data.object_id << 1))
return data.dmFields
end
我觉得我很接近了,我只是觉得我错过了一些重要的事情或者没有正确理解一些重要的事情。
编辑 1:要检测的倒置屏幕应该是应用程序正在运行的屏幕。如果我理解正确,解析 nil 值将返回应用程序正在运行的屏幕的屏幕设置。
解决方案
在 C++ 中,代码将如下所示:
DEVMODE devMode;
RtlSecureZeroMemory(&devMode, sizeof(DEVMODE));
devMode.dmSize = sizeof(DEVMODE);
devMode.dmFields = DM_DISPLAYORIENTATION;
BOOL result = EnumDisplaySettingsEx(NULL, ENUM_CURRENT_SETTINGS, &devMode, EDS_RAWMODE);
if (result)
{
DWORD displayOrient = devMode.dmDisplayOrientation; // Get display device orientation
}
和
要确定显示方向是纵向还是横向,请检查 dmPelsWidth 与 dmPelsHeight 的比率。
推荐阅读
- javascript - 如何格式化工具提示axispointer echart中的值(角度)
- wordpress - 寻找使 mysite.com/product 成为 mysite.com/product?userid=1 的方法(WordPress 网站)
- pymol - 在 pymol 中打印或输出选定的残基
- jquery - 从 .click() 到 .on() 用于动态内容时定位多个元素
- spring-boot - 如何将变量数据传递给 Spring Custom Validator?
- reactjs - 安装反应导航版本4的问题
- c99 - 为什么我在执行 exe 时得到 Segmantation fault core dump
- c++ - 允许点击通过非透明窗口上的窗口(命中测试透明度)
- javascript - 将用户输入传递给 Javascript 变量以更改 api 结果
- tomcat - CloseNowException:此流不可写