gpt4 book ai didi

c# - 在所有屏幕上克隆窗口

转载 作者:行者123 更新时间:2023-11-30 17:05:39 26 4
gpt4 key购买 nike

我在我的操作系统中使用双 View 设置(1 个 View 扩展到 2 个屏幕)。在我的 winforms 应用程序中,我可以将特定窗口移动到辅助屏幕,例如:

foreach (Screen s in Screen.AllScreens)
{
if (!s.Primary) {
myform.Bounds = s.Bounds;
break;
}
}

当我可以看到这个辅助屏幕时,一切都很好。如果我看到它,我就可以使用这种窗口形式提供的任何功能,例如我可以通过单击相应的按钮将其关闭。

但是如果我看不到这个辅助屏幕怎么办,例如这是显示在另一个房间墙上的投影图像?那时我不能使用我被遗弃的形式。如何应对这种不舒服的情况(不能搬到同一个房间)?

我想要的是制作一个完全相同的表格副本,以显示在我的主屏幕和辅助屏幕上。我真的很想拥有同一窗口的多个实例,精确的副本,其中一个实例反射(reflect)另一个实例的变化,反之亦然。我可以使用放置在远程位置的主屏幕来控制辅助屏幕(对某些弹出信息使用react等)。我不知道如何使用 winforms 在 .Net 中实现类似的东西。怎么做?

顺便说一句:如果这很难实现,从概念的角度可以做什么?我知道我可以定义一些键盘快捷键,但这不是我想要的。有什么想法吗?

最佳答案

从概念上讲,您可以使用第二个窗口(称之为“镜像窗体”)来复制主窗体。 Capture the screen for the primary form并将捕获的部分显示在镜像上。

那部分是简单的部分。如果您希望能够与镜像窗体进行实际交互,则需要捕获所有用户输入,例如鼠标移动、悬停、单击事件和键盘事件,并将它们重播到主窗体上。

您可以通过捕获所有事件处理程序并在主窗体上重放它们来使用镜像窗体上的事件处理程序来做到这一点。但是,我会考虑在镜像表单上捕获消息。这可能更全面,也可能是一种更简洁的代码方式,可以明智地“监视”事件并将它们发送到主要表单。您还可以“吃掉”消息进入镜像形式,这会导致焦点发生变化(例如,如果输入焦点突然从主要形式转移到镜像形式,而用户认为他们正在与主要形式进行交互,则可能会出现问题).

有关消息的更多信息,请查看重写 WndProc of the Form (实际上是 Control.WndProc )和 here .一篇不错的概述文章是 Deliver The Power Of Spy++ To Windows Forms With Our New Tool .它还处理不相关的跨进程通信,但解释了有关消息和拦截消息的很多细节。

关于c# - 在所有屏幕上克隆窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com