Actionscript 3 在flex中调用Win32 API以设置窗口显示相关性

Actionscript 3 在flex中调用Win32 API以设置窗口显示相关性,actionscript-3,winapi,apache-flex,actionscript,air,Actionscript 3,Winapi,Apache Flex,Actionscript,Air,我已经用AdobeAIR创建了一个Flex桌面应用程序。 我需要保护应用程序不被捕获。通过更改应用程序的窗口显示关联性,可以保护应用程序不被捕获。 如何在flex中使用WinAPI? 是否有其他方法保护窗口不被捕获?首先,您必须确保主窗口没有WS\u EX\u LAYERED窗口样式。这种样式使得SetWindowDisplayAffinity在代码8(ERROR\u NOT\u lower\u MEMORY)下失败,至少在我的机器上是这样(七个Pro 64位)。在-app.xml文件中,将下节

我已经用AdobeAIR创建了一个Flex桌面应用程序。 我需要保护应用程序不被捕获。通过更改应用程序的窗口显示关联性,可以保护应用程序不被捕获。 如何在flex中使用WinAPI?
是否有其他方法保护窗口不被捕获?

首先,您必须确保主窗口没有
WS\u EX\u LAYERED
窗口样式。这种样式使得
SetWindowDisplayAffinity
在代码8(
ERROR\u NOT\u lower\u MEMORY
)下失败,至少在我的机器上是这样(七个Pro 64位)。在
-app.xml文件中,将
下节点
的值设置为
false

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

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

另一种可能的方法是编码

后者似乎更可取:

  • 不需要来自外部流程的协作
  • AdobeAIR为您加载DLL
  • C/C++代码要简单得多
我使用了第一种技术,因为与AIR和动作脚本相比,我对关于DLL的原始Win32 API更为熟练


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

如果我的回答说您必须构建一个C DLL作为“Air扩展”(用于AIR3),您介意吗?如果您从其他进程调用setwindowdisplayaffinity,它将返回拒绝访问。Dll将是一个AIR扩展,在应用程序进程中运行。这里没有“拒绝访问”,实际上我使用flerry作为java和Flex之间的java桥梁。尽管java中的代码来自同一进程,但它给出了“拒绝访问”错误。我使用
FindWindow(null,title)
查找窗口以获取应用程序的HWND,然后更改窗口显示关联。有没有直接的方法让应用程序的HWND运行?顺便说一句,如果可能的话,将构建C DLL的示例链接共享为Air扩展,我不理解。你为什么要HWND?“拒绝访问”失败的API是FindWindow还是SetWindowDisplayAffinity?你应该更新你的问题。空中延伸的链接: