我用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桌面应用程序成功地测试了第一种技术,并在打印屏幕后得到了一个漂亮的"全黑"图像。