actionscript 3 -调用Win32 API在flex设置窗口显示亲和力



我用Adobe Air创建了一个Flex桌面应用程序。我需要保护应用程序不被捕获。通过更改应用程序的窗口显示关联,可以保护应用程序不被捕获。如何在flex中使用win API ?还有其他办法保护窗户不被占领吗?

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

第二,你必须选择如何在应用程序进程中注入一个常规的C DLL,因为如果你试图改变一个不在调用者进程中的窗口的亲和力,API将失败,错误5 (ERROR_ACCESS_DENIED)。

一种可能的注射方法是使用SetWindowsHookEx API。谷歌会给你很多关于这个的搜索结果。请随意询问一些细节。你显然需要另一个进程的配合,这里(和一些Win32 api的实践)。

另一种可能的方法是编写"ADOBE®AIR®的ACTIONSCRIPT®扩展"(PDF)。

后者似乎更可取:

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

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

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

最新更新