0

我试图弄清楚我如何能够从本质上欺骗一个窗口,让它认为它有焦点。我通过一些搜索发现,我需要某种沙箱来完成此操作。操作系统和窗口之间的中间层。

我会很感激一些帮助,为我指出如何通过 C# 实现这一目标的正确方向(如有必要,使用 pinvoke 等)。从本质上从 C# 程序启动另一个可执行文件,并以某种方式将其设置为在人造桌面上,并具有恒定的窗口焦点。但是仍然能够像往常一样与窗口交互(就像一个窗口包装器,如果你愿意的话,它可以失去它想要的所有焦点,但包含在其中的窗口永远不会认为它失去焦点)。

我确信这是一项艰巨的任务(虽然,也许不会,也许有人知道一个优雅的解决方案),但我知道这是可能的,因为我在商业产品中看到过类似的事情。(我试图模仿这个沙盒产品的一种行为)。

4

2 回答 2

0

首先,尝试调用激活事件:

private void Form1_Activated(object sender, EventArgs e)
{
    //Code
}

然后在任何函数中,声明一个 eventarg:

private EventArgs ev;

最后,当你想伪造一个焦点时,调用激活函数:

Form1_Activated(this, ev);

希望有帮助!

于 2012-04-28T04:54:58.363 回答
0

您可以尝试将 WM_ACTIVATE 消息注入目标 Windows 消息队列。这可能会欺骗它认为它有焦点,即使它没有。这实际上取决于应用程序如何检查焦点。

于 2016-10-09T23:54:30.770 回答