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?