我正在试图弄清楚我是如何能够巧妙地欺骗窗口让它认为它具有焦点。通过一些搜索我发现的是,我需要某种沙盒才能实现这一目标。操作系统和窗口之间的中间层。
我很感激帮助指出了我如何通过C#(如果需要的话,使用pinvoke等)来实现这一目标的正确方向。基本上从C#程序启动另一个可执行文件,并以某种方式将其设置为一个虚拟桌面,具有恒定的窗口焦点。但是仍然可以像往常一样与窗口进行交互(如果你愿意的话,就像一个窗口包装器,可能会失去所有想要的焦点,但其中包含的窗口永远不会认为它没有聚焦)。
我确信这是一项非常艰巨的任务(但也许不会,也许有人知道这个优雅的解决方案),但我知道这是可能的,因为我在商业产品中看到过类似的事情。 。 (我试图模仿这个沙箱产品的一种行为)。
答案 0 :(得分:0)
首先,尝试调用激活事件:
private void Form1_Activated(object sender, EventArgs e)
{
//Code
}
然后在任何函数之外,声明一个eventarg:
private EventArgs ev;
最后,当您想伪造焦点时,请调用激活的函数:
Form1_Activated(this, ev);
希望有所帮助!
答案 1 :(得分:0)
您可以尝试将WM_ACTIVATE消息注入目标Windows消息队列。这可能会让它认为它具有焦点,即使它没有。这实际上取决于应用程序如何检查焦点。