问题标签 [getsystemmetrics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1017 浏览

c# - .Net 中 Nativemethods.GetSystemMetrics 函数的输入值

这个函数似乎是一种访问各种系统值的方法。例如 nativemethods.GetSystemMetrics(4096) 返回会话是远程的还是本地的。我在网上能找到的只是具体的例子——有谁知道我在哪里可以找到输入参数值的完整列表/它们返回的内容?似乎它可能非常有用。

0 投票
3 回答
3345 浏览

c - 如何解决 GetSystemMetrics() 的链接错误?

我正在尝试使用以下内容来获取主显示器的高度和宽度:

但是,它在未解决的外部链接错误 ( LNK1120) 上失败。我尝试链接到 user32.lib (如此所述),并收到相同的错误,以及链接到 wmbase.lib (如此处所记载,并收到 wmbase.lib 不存在的错误!我究竟做错了什么?

请注意,我只使用普通的 C,而不是 C++。这是用于获取主显示器的屏幕分辨率(以像素为单位)的正确功能吗?

我目前正在尝试在 MSVC 上编译它,但更喜欢可移植到其他编译器的解决方案。

谢谢。

编辑

所以看起来我正在寻找的参数是SM_CXSCREENand SM_CYSCREEN,而不是SM_CXBORDERand SM_CYBORDER。但是,我仍然无法编译它。

如果这澄清了任何事情(当链接到 user32.lib 时),这是实际错误:

(我正在尝试编译 Python/C 模块,这就是为什么你会看到奇怪的目录)

0 投票
1 回答
181 浏览

windows - 如何通知 Windows 有关桌面设置的更改?

如何通知 Windows 系统我的程序更改了某些外观设置?

我正在与:

HKEY_CURRENT_USER\Control Panel\Desktop -> FontSmoothing + FontSmoothingType

什么是标准方式?也许有一些信息。寄到哪里?

0 投票
1 回答
3484 浏览

excel - 在excel vba中查找外接显示器的大小

为了找到显示器的尺寸,我一直在使用:

进而:

这适用于主显示器,但我如何找到外接显示器的尺寸?

0 投票
1 回答
348 浏览

winapi - 计算包含对话框所需的最小尺寸

我想计算包含对话框的垂直和水平最小尺寸。我使用 GetClientRect 来确定宽度和高度。然后对于需要垂直滚动条时的宽度,我添加了 GetSystemMetrics (SM_CXVSCROLL) + GetSystemMetrics (SM_CXSIZEFRAME) 但我似乎少了几个像素。

对于有和没有滚动条的水平和垂直维度,我需要考虑什么 GetSysMetrics?

0 投票
2 回答
646 浏览

c# - 获取窗口的阴影尺寸

我需要知道窗口的投影尺寸。我尝试通过 GetSystemMetrics WinAPI 函数接收值,但找不到要传递的参数。关于如何全局获取此值(或单个窗口句柄)的任何想法?我知道阴影的宽度取决于窗口类型(对话框/正常/等等)。Ib 将使用 C# 实现此功能,但 C++ 也可以。

0 投票
2 回答
8012 浏览

c# - GetSystemMetrics() 为 .NET 4.5 和 .NET 4.0 返回不同的结果

在 .NET 4.0 -> .NET 4.5 应用程序迁移过程中,我发现了一个非常奇怪的行为。我已经能够将此问题追溯到这个简短的代码片段:

Target Framework = 4.0当使用(以及 2.0、3.0、3.5)编译时,它会输出8x8

当用 编译时Target Framework = 4.5,它输出4x4

使用 MSVS2012 调试器运行此示例也始终输出4x4(使用任何目标框架)。

其他选项(目标框架配置文件、目标平台、启用/禁用 Aero)不会影响结果,唯一改变输出的是目标框架和使用调试器运行。我已经能够在 3 台计算机上重现此问题,不幸的是,它们在安装的软件方面几乎相同:

  • Windows 7 Ultmate SP1(俄语,已安装所有更新)和 MSVS2012(英语/俄语)更新 1
  • Windows 8(在虚拟机上)

目前我正在考虑修补一些使用反射SystemParameters调用的 .NET 类(例如),GetSystemMetrics()但我不确定如何获得正确的度量值。

问题:

  • 我错过了什么吗?目标框架如何GetSystemMetrics()影响?
  • 有没有办法GetSystemMetrics()从 .NET 4.5 应用程序调用并获得正确的结果?

我愿意接受有关解决此问题的任何建议。此外,如果您无法重现该问题,请在评论中留下简短的系统描述。

0 投票
1 回答
1806 浏览

delphi - GetSystemMetrics 和 TScreen 返回错误值

我正在使用德尔福 XE5。我想我的笔记本电脑有问题。过了一会儿,它返回错误的值到 Screen.Width 和 GetSystemMetrics(SM_CXSCREEN) (高度相同)。我的操作系统是 Windows 7 64 位。

我的笔记本电脑的屏幕分辨率是 1920x1080 (1080p) 但我的应用程序说它是 1280x720 (720p)。我不认为有 DPI 问题,因为当我重新启动并在一段时间后启动时出现问题。兼容性设置也已关闭。以前有人遇到过这个问题吗?或者你知道解决方案吗?我还在下面添加了清单,但没有帮助

这是我编译它的方式

编辑:

好的,我编写了这个函数,这是修复它的棘手方法。我更喜欢 Screen.Width 返回正确的值:

编辑2:

我发现SetProcessDPIAware解决了我的问题,但它在 XP 中不起作用

0 投票
1 回答
144 浏览

c++ - 在 MFC C++ 中获取桌面分辨率

我继承了一些用 MFC C++ 编写的部分开发了 10 年的代码。我的任务是更新和完成应用程序。

在 CDialogChild 类中,它在 .h 文件中如下所示:

我仍在尝试找出代码及其背后的逻辑,但我决定动态获得解决方案。我从 .h 中删除了“静态”关键字以及幻数,然后我尝试在构造函数的初始化列表中定义它们:

我的分辨率是 1366x768,我在 Visual Studio 2013 调试器中得到的数字各不相同,从“无法访问内存”到数百万的数字。

然后我决定尝试在构造函数中初始化它们,而不是在初始化列表中。我从两个变量中删除了标头中的“const”关键字,然后想我会打印到调试输出它们的值。这是我的代码(我知道它不是那么优雅,但仍在弄清楚 MFC 约定):

当我运行它时,在“ss2 >> src2”上抛出一个异常,说访问冲突写入 [hex address]

那么,发生了什么以及我应该提供哪些更多信息?我遇到的问题是在对另一个问题进行故障排除期间,因此对其中一个或两个问题的帮助会很棒!

编辑

感谢 Mark 的评论,我将所有 LPTSTR 变量的初始化更改为“new TCHAR()”,从而解决了该特定问题。我能够在调试输出中运行字符串,它显示了正确的分辨率(即使它在 VS 调试器本身中是错误的),非常感谢!即使我将变量放回构造函数初始化列表并再次将它们设为“const”,这仍然有效:)

但是,我现在收到一个新错误。虽然这最终不是在这个#ifdef 块中发生的问题,但我现在得到的错误可能会在我编写的其他代码中弹出。

编码:

当运行时到达删除命令时会发生错误,并且 .exe 文件已触发断点。

0 投票
1 回答
1419 浏览

python-2.7 - 如何使用 Windows PC 防止 Python 中的 GetSystemMetrics() 返回不同/错误的值?

我正在使用这段代码从使用 Python 2.7 的 Surface Pro 1st Gen Win 8.1 PC 打印出显示器分辨率:

但问题是,通过命令提示符运行它与通过 Python shell 运行脚本,我得到了不同的结果。

只运行脚本我得到 1280x720,但通过 IDLE Shell 我得到 1920x1080。

现在,由于我在 Surface Pro 上运行它,我几乎可以肯定这与 DPI 缩放有关(有人在这里提出了类似的问题)。如果是这种情况,那一定是因为 Python IDLE 禁用了 DPI 缩放。

那么如何防止这种情况发生,以便在运行此代码时获得一致且准确的结果,无论它是如何运行的,或者运行它的机器类型是什么,或者是否禁用了 DPI 缩放?也许是 CEF Python?

任何帮助深表感谢。谢谢你。