如何使用Ruby和Win32API获得Windows屏幕方向

时间:2019-03-19 12:16:22

标签: ruby winapi

我试图使Windows屏幕方向,以便在显示器翻转时会出现某种复活节彩蛋。

我知道小提琴存在,但这不是我问的问题。如果不能在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值将返回应用程序正在运行的屏幕的屏幕设置。

1 个答案:

答案 0 :(得分:0)

在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的比率。