C# 或 C++ - 创建假焦点?

Posted

技术标签:

【中文标题】C# 或 C++ - 创建假焦点?【英文标题】:C# or C++ - Creating fake focus? 【发布时间】:2012-06-22 08:23:43 【问题描述】:

我想知道是否有任何方法可以通过 C# 或 C++ 发送到假的或以其他方式欺骗程序认为它有焦点?我在想你可以使用 SendMessage/PostMessage 向它发送一条消息,这会诱使它获得焦点。

【问题讨论】:

你想解决什么问题? 【参考方案1】:

没有保证方法可以欺骗它认为它有焦点,因为它可以通过多种方式检查它是否有焦点。例如,它可能正在检查WM_SETFOCUS,然后在收到WM_KILLFOCUS 时检查它是否失焦。因此,在这种情况下,您可以通过使用窗口挂钩发送拦截所有 WM_KILLFOCUS 消息来欺骗它。

但是,它也可能通过调用GetFocus 来检查它是否具有焦点。因此,要在这种情况下欺骗它,您需要绕道 GetFocus 并伪造返回值。您可以尝试这两种方法,它们可能有效,也可能无效,但我不希望它们可靠地工作。

【讨论】:

+1 用于指出可能出错的地方。此外,可能不太可能,但应用程序也可能正在使用 GetGUIThreadInfo(它也返回当前活动/聚焦的线程)、GetForegroundWindow 或返回当前、活动或聚焦的 HWND 或线程的几个 Windows API。 感谢您的信息,伙计们!我现在正在制作一个原型,尽管我必须单独测试每个原型,看看程序也会响应哪个。再次感谢!【参考方案2】:

我挂了WM_NCACTIVATE 让游戏知道它仍然是焦点。它在我工作的两个游戏上运行良好。

【讨论】:

以上是关于C# 或 C++ - 创建假焦点?的主要内容,如果未能解决你的问题,请参考以下文章

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

从本机 C++ 调用 C#,而不使用 /clr 或 COM?

在 C++ 中使用 C# 接口或在 C# 中使用 C++ 接口

创建可以从 c# 和 c++ 中使用的 c# dll

创建 C++ Dll,并从 C# 调用它

从 C# 中的 C++ 代码中获取对象功能