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

时间:2015-06-09 05:21:43

标签: actionscript-3 winapi flex actionscript air

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

1 个答案:

答案 0 :(得分:1)

首先,您必须确保主窗口没有WS_EX_LAYERED Windows样式。该样式使SetWindowDisplayAffinity失败,代码为8(ERROR_NOT_ENOUGH_MEMORY),至少在我的机器上(Seven Pro 64位)。在-app.xml file中,将false下的节点<transparent>的值设置为<initialWindow>

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

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

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

后者似乎更可取:

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

我使用了第一种技术,因为我对关于DLL的原始Win32 API更流畅,而不是使用AIR和Action Script ......

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