C# 伪造窗口焦点(沙盒?、App-V?)

C# 伪造窗口焦点(沙盒?、App-V?),c#,virtualization,sandbox,C#,Virtualization,Sandbox,我想弄清楚我怎样才能从本质上欺骗一个窗口,使其认为它有焦点。我通过一些搜索发现,我需要某种沙箱来完成这项任务。操作系统和窗口之间的中间层 我希望能得到一些帮助,为我指明正确的方向,让我能够通过C#(如有必要,使用pinvoke等)实现这一目标。从C#程序中启动另一个可执行文件,并以某种方式将其设置在人造桌面上,保持窗口焦点不变。但是仍然能够像平常一样与窗口交互(就像一个窗口包装器,如果你愿意的话,它可能会失去它想要的焦点,但是其中包含的窗口永远不会认为它失去了焦点) 我确信这是一项相当大的任务(

我想弄清楚我怎样才能从本质上欺骗一个窗口,使其认为它有焦点。我通过一些搜索发现,我需要某种沙箱来完成这项任务。操作系统和窗口之间的中间层

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


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

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

private void Form1_Activated(object sender, EventArgs e)
{
    //Code
}
然后在所有函数中声明一个eventarg:

private EventArgs ev;
最后,当您想要伪造焦点时,调用激活的函数:

Form1_Activated(this, ev);

希望对你有所帮助

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

对不起,但是,这和我刚才说的那类事情并没有什么关系。我更倾向于欺骗第三方应用程序,使其相信它有焦点(比如游戏或类似的东西)。