Screen.AllScreens 错误并将 WM_DISPLAYCHANGE 发布到单个 WinForm 应用程序

2024-01-08

首先,对这么长的帖子表示抱歉。

关于如何限制 WM_DISPLAYCHANGE 消息的发布范围有什么建议吗?

设想:

Screen.AllScreens返回在客户端上检测到的所有监视器的坐标和分辨率的数组。如果在工作站锁定时启动应用程序(在夜间应用程序重新启动期间),Screen.AllScreens仅返回一个详细说明单个屏幕的元素,并将所有多个显示器的尺寸作为一个元素。

随后,在这种情况下,当用户解锁工作站并开始使用应用程序时,正在使用的 Infragistics 控件 (UltraWinDock) 不允许将浮动窗口拖动到主屏幕之外,因为Screen.AllScreens属性不返回系统的真实监视器配置。基础设施控制实际上着眼于Screen.PrimaryScreen.Bounds,但是Screen.PrimaryScreen属性依次调用缓存的Screen.AllScreens数组,它返回一个巨大的主屏幕!

当应用程序正常启动时(工作站解锁),控制功能正常。

我能看到的唯一方法Screen.AllScreens被重置,并且可以通过刷新SystemEvents.DisplayChanging正在引发的事件, 此时内部字段设置为空。 (Screen.AllScreens挂钩到这个事件。)Screen.AllScreens然后将在下次调用时重新填充。

据我所知,SystemEvents.DisplayChanging事件可以通过WM_DISPLAYCHANGEWMI 消息。

我管理解决方法的方法是调用:

[DllImport("user32.dll")]
public static extern int GetSystemMetrics(int nIndex);

参数为SM_CMONITORS http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx它代表系统上的显示器数量。无论工作站是否锁定,这似乎总是返回当前显示器的实际数量。

然后我评估长度是否Screen.AllScreens数组小于结果GetSystemMetrics(SM_CMONITORS)如果是的话,我就加入SystemEvents.SessionSwitch静态事件并检查SessionSwitchEventArgs.Reason财产,价值为SessionUnlock。 当工作站解锁时,会收到此事件并且满足条件,因此我使用 P/Invoke 方法发布一条消息

[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint wMsg, UIntPtr wParam, IntPtr lParam);

具有以下参数:

PostMessage(HWND_BROADCAST, WM_DISPLAYCHANGE,UIntPtr.Zero,IntPtr.Zero)

这非常有效,并且达到了预期的结果! Screen.AllScreens已重置并且 Infragistics 控制功能正常。

在我看来,它就像一个不起眼的错误Screen.AllScreens当应用程序在锁定的工作站上启动然后解锁时,不会重新评估自身。

我承认这是一个罕见的问题,但仍然是一个问题。

For the WM_DISPLAYCHANGE http://msdn.microsoft.com/en-us/library/dd145210%28v=vs.85%29.aspxmessage、lParam 和 wParam 描述如下:

wParam


在这里给出答案可能已经晚了,但这里的另一个选择是仅 P/Invoke AllScreens 使用的相同调用。然后您将获得实际值,而不是 AllScreens 保留的缓存值。看一眼:http://www.pinvoke.net/default.aspx/user32/EnumDisplayMonitors.html http://www.pinvoke.net/default.aspx/user32/EnumDisplayMonitors.html

如果您使用 WPF,可以执行类似此处发布的操作:http://social.msdn.microsoft.com/Forums/vstudio/en-US/41e0bf65-2e96-4d0f-98aa-2c0cf31aa493/wpf-application-controls-does-not-work-when-an-external-monitor-已连接?forum=wpf http://social.msdn.microsoft.com/Forums/vstudio/en-US/41e0bf65-2e96-4d0f-98aa-2c0cf31aa493/wpf-application-controls-does-not-work-when-an-external-monitor-is-connected?forum=wpf

基本上,找到 SystemResourceNotifyWindow 并向其发送 WM_DISPLAYCHANGE 消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Screen.AllScreens 错误并将 WM_DISPLAYCHANGE 发布到单个 WinForm 应用程序 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 正则表达式部分隐藏电子邮件? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想要实现
  • 本地化 JFileChooser“所有文件”字符串

    我正在使用 JFileChooser 开发一个 java 应用程序 用户可以切换语言 Locale setDefault Locale ENGLISH JFileChooser chooser new JFileChooser choose
  • 动态更改 ASP.Net 中的用户控件

    我正在尝试创建一个网页 该网页将根据下拉列表的选定值显示适当的用户控件 基本上页面布局是这样的 下拉选择 lt 基于下拉选择创建的用户控件 gt 我已经一半工作了 当选择改变时 控件也会改变 在 OnInit 中 我动态创建最后选定的控件
  • 过滤 Pandas 数据帧而不删除行

    我正在尝试使用where在我的 Pandas DataFrame 上替换所有不符合我的标准的单元格NaN 但是 我希望以始终保留原始 DataFrame 的形状的方式进行操作 并且不会从生成的 DataFrame 中删除任何行 给定以下数据
  • 如何将qml文件重新加载到QQuickView

    将 qml 文件重新加载到 QQuickView 的正确方法是什么 我正在使用 Qt Quick 2 1 并尝试编写一个简单的程序来加载 qml 文件并显示它 目前 我正在通过创建 QQuickView 来完成此操作 当我想重新加载 qml
  • 读一剪!在序言中

    我正在阅读同时阅读 Bratko 的 人工智能 Prolog 编程 第 5 章 控制回溯 起初 剪切似乎是模仿其他编程语言中已知的 if else 子句的直接方法 例如 Find the largest number max X Y Y X
  • android:如何在我的应用程序中实现像 Go Launcher 这样的首次教程?

    Go Launcher 有一个很好的初次使用教程 它与 Stock ICS 首次运行非常相似 我想学习如何在第一次启动我的应用程序时显示类似的教程 如何在我的 Android 应用程序中实现这个透明视图 与屏幕对象交互 我试图做相似的东西
  • 如何创建根据另一列计算的列?

    我需要创建一个专栏age在 SQL Server 数据库中 该列的值应根据该列的值计算DOB 它的值也应该增加Age增加 您应该使用计算列来解决此问题 其定义与此类似 ALTER TABLE Customers ADD Age AS dat
  • 如何让div换行

    我是CSS初学者 我想像这样将新的 div 放入新行中 我尝试这样的代码 div div
  • css 内联块和引导网格系统输出

    我正在尝试有一个具体的HTML我的 div 的标记使用css and bootstrap 3 2 下图展示了我想要得到的结果 我使用了引导网格系统 以便我的页面能够响应并在小屏幕设备中正确显示 这是我尝试过的代码 我用过http www b
  • 与字符串数字匹配 - 无法访问的代码

    scala 新手 似乎无法让我的匹配表达式工作 我已经了解了语句评估方式之间的差异 例如 一个新变量与声明的变量相对 但似乎无法使反引号或大写起作用 declared inside of object val numberOne 17201
  • Jersey:将值从 ContainerRequestFilter 传递到端点

    我正在使用 Jersey 2 9 并且创建了一个过滤器 它将采用加密的标头值 对其进行解密 然后将其传递到被调用的端点 我不知道如何做到这一点 我一直在互联网上搜索 但没有真正找到我想做的事情的具体例子 过滤器被调用 我只是在将值从过滤器传
  • 有没有办法将正则表达式更改为 Ruby on Rails 中的数字范围?

    我经常需要在正则表达式中创建数字范围 所以例如 2 3 0 9 是 20 39 之间的数字范围 为了仔细检查我的范围 我通常使用 Linux 命令 对于 2 3 0 9 Linux 命令为 seq 1 40 egrep 2 3 0 9 它为
  • 绑定失败:地址已被使用

    我正在尝试将套接字绑定到以下端口 if bind socket desc struct sockaddr server sizeof server lt 0 perror bind failed Error return 1 puts bi
  • NSDateFormatter 区别

    这两种日期格式有什么区别 第一个给出实际时间 第二个给出时间购买添加时区偏移值 NSDateFormatter dateFormatter NSDateFormatter alloc init dateFormatter setTimeZo
  • 检查 boost::variant 是否为 null

    我的程序中有一个 boost variant 我想检查该变体本身是否已初始化 以及其类型之一中是否包含值 我已经尝试过对该变体使用empty 但这似乎不起作用 检查 NULL 也不行 有谁知道如何检查这个吗 编辑 好的 看起来它永远不会为空
  • 在 Firefox 中打开一个新选项卡并将 ff 保留在后台

    是否有一种方法可以在 Firefox 中以编程方式在新选项卡中打开 URL 而无需 Firefox 获得焦点 到目前为止我发现了什么 firefox new window
  • 如何使用Radio.Group Antd设置检查?

    我有无线电绘制的动态数据 有一个活动无线电的 ID 它也是动态生成的 如何比较 id 并安装与 Radio Group 的检查 最后我需要获取表单中的单选值 该代码无法正常工作 动态数据可能会更大 const dynamiclyData i
  • FontForge:将字体的单独字形批量导出到 svg 文件中?

    是否可以将单个字形从字体批量导出到 SVG 而无需手动将它们一一导出 相关 但相反 将一系列 svg 文件作为字形导入 FontForge 并输出字体文件 https stackoverflow com questions 22124130
  • Screen.AllScreens 错误并将 WM_DISPLAYCHANGE 发布到单个 WinForm 应用程序

    首先 对这么长的帖子表示抱歉 关于如何限制 WM DISPLAYCHANGE 消息的发布范围有什么建议吗 设想 Screen AllScreens返回在客户端上检测到的所有监视器的坐标和分辨率的数组 如果在工作站锁定时启动应用程序 在夜间应