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

Vis*_*hnu 7 apache-flex air winapi actionscript actionscript-3

我用Adobe Air创建了一个Flex桌面应用程序.我需要保护应用程序不被捕获.通过改变应用程序的窗口显示亲和性,可以保护应用程序不被捕获.如何在flex中使用win API?有没有其他方法来保护窗口不被捕获?

man*_*ell 2

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

\n\n

ERROR_ACCESS_DENIED其次,您必须选择如何在应用程序进程中注入常规 C DLL,因为如果您尝试更改不在调用者进程中的窗口的关联性,API 将失败并出现错误 5 ( )。

\n\n

一种可能的注入方法是使用SetWindowsHookExAPI。谷歌会给你很多关于这一点的点击。请随时询问一些细节。显然,您需要另一个进程的合作,在这里(以及一些 Win32 API 实践)。

\n\n

另一种可能的方法是编写\'ACTIONSCRIPT\xc2\xae Extensions for ADOBE\xc2\xae AIR\xc2\xae\' (PDF)

\n\n

后者似乎更可取:

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

我使用了第一种技术,因为我对 DLL 的原始 Win32 API 比对 AIR 和 Action Script 更熟悉......

\n\n

我使用非常简单的“Hello World”AIR 桌面应用程序成功测试了第一种技术,并在打印屏幕后获得了漂亮的“全黑”图像。

\n