在 flex 中调用 Win32 API 来设置 Window Display Affinity

call Win32 API in flex to set Window Display Affinity

我已经使用 Adob​​e Air 创建了一个 Flex 桌面应用程序。 我需要保护应用程序不被捕获。通过更改应用程序的window显示亲和力,可以保护应用程序不被捕获。 如何在 flex 中使用 win API? 有没有其他方法可以保护 window 不被捕获?

首先你要确保主window没有WS_EX_LAYEREDWindows风格。这种风格使 SetWindowDisplayAffinity 以代码 8 (ERROR_NOT_ENOUGH_MEMORY) 失败,至少在我的机器上是这样(Seven Pro 64 位)。在您的 -app.xml file 中,将 <initialWindow> 下的节点 <transparent> 的值设置为 false

其次,您必须选择如何在应用程序进程中注入常规 C DLL,因为如果您尝试更改a window 不在调用者进程中。

一种可能的注入方法是使用 SetWindowsHookEx API。 Google 会给你很多关于那个的点击率。随时询问一些细节。你显然需要另一个进程的合作,在这里(和一些 Win32 APIs 实践)。

另一种可能的方法是编码 'ACTIONSCRIPT® Extensions for ADOBE® AIR®' (PDF)

后者似乎更可取:

  • 不需要外部流程的协作。
  • Adobe AIR 会为您加载 DLL。
  • C/C++ 代码更简单。

我使用了第一种技术,因为我对有关 DLL 的原始 Win32 APIs 比我对 AIR 和 Action Script 更流利...

我用一个非常简单的 "Hello World" AIR 桌面应用程序成功地测试了第一种技术,并在打印屏幕后得到了一个漂亮的 "All Black" 图像。