在 flex 中调用 Win32 API 来设置 Window Display Affinity
call Win32 API in flex to set Window Display Affinity
我已经使用 Adobe Air 创建了一个 Flex 桌面应用程序。
我需要保护应用程序不被捕获。通过更改应用程序的window显示亲和力,可以保护应用程序不被捕获。
如何在 flex 中使用 win API?
有没有其他方法可以保护 window 不被捕获?
首先你要确保主window没有WS_EX_LAYERED
Windows风格。这种风格使 SetWindowDisplayAffinity
以代码 8 (ERROR_NOT_ENOUGH_MEMORY
) 失败,至少在我的机器上是这样(Seven Pro 64 位)。在您的 -app.xml file
中,将 <initialWindow>
下的节点 <transparent>
的值设置为 false
。
其次,您必须选择如何在应用程序进程中注入常规 C DLL,因为如果您尝试更改a window 不在调用者进程中。
一种可能的注入方法是使用 SetWindowsHookEx
API。 Google 会给你很多关于那个的点击率。随时询问一些细节。你显然需要另一个进程的合作,在这里(和一些 Win32 APIs 实践)。
另一种可能的方法是编码 'ACTIONSCRIPT® Extensions for ADOBE® AIR®' (PDF)。
后者似乎更可取:
- 不需要外部流程的协作。
- Adobe AIR 会为您加载 DLL。
- C/C++ 代码更简单。
我使用了第一种技术,因为我对有关 DLL 的原始 Win32 APIs 比我对 AIR 和 Action Script 更流利...
我用一个非常简单的 "Hello World" AIR 桌面应用程序成功地测试了第一种技术,并在打印屏幕后得到了一个漂亮的 "All Black" 图像。
我已经使用 Adobe Air 创建了一个 Flex 桌面应用程序。 我需要保护应用程序不被捕获。通过更改应用程序的window显示亲和力,可以保护应用程序不被捕获。 如何在 flex 中使用 win API? 有没有其他方法可以保护 window 不被捕获?
首先你要确保主window没有WS_EX_LAYERED
Windows风格。这种风格使 SetWindowDisplayAffinity
以代码 8 (ERROR_NOT_ENOUGH_MEMORY
) 失败,至少在我的机器上是这样(Seven Pro 64 位)。在您的 -app.xml file
中,将 <initialWindow>
下的节点 <transparent>
的值设置为 false
。
其次,您必须选择如何在应用程序进程中注入常规 C DLL,因为如果您尝试更改a window 不在调用者进程中。
一种可能的注入方法是使用 SetWindowsHookEx
API。 Google 会给你很多关于那个的点击率。随时询问一些细节。你显然需要另一个进程的合作,在这里(和一些 Win32 APIs 实践)。
另一种可能的方法是编码 'ACTIONSCRIPT® Extensions for ADOBE® AIR®' (PDF)。
后者似乎更可取:
- 不需要外部流程的协作。
- Adobe AIR 会为您加载 DLL。
- C/C++ 代码更简单。
我使用了第一种技术,因为我对有关 DLL 的原始 Win32 APIs 比我对 AIR 和 Action Script 更流利...
我用一个非常简单的 "Hello World" AIR 桌面应用程序成功地测试了第一种技术,并在打印屏幕后得到了一个漂亮的 "All Black" 图像。