WindowsAPI查找flash句柄问题
我用下面的代码获取WebBrowser中的flash句柄,如果访问地址是“http://v.youku.com/v_show/id_XNDI4NjE4Mzk2.html”的话,代码工作正常,可以正确地返回宽和高。但如果是访问QQ游戏“http://user.qzone.qq.com/25907516/infocenter#!app=607”,获取的flash句柄对应的宽和高就是“1*1”,不是真实的宽和高。这两个地址的差别在于,优酷flash插件是直接写在HTML里的,而QQ游戏是通过HTML中的iframe嵌套进来。
private static string IES_CLASS_NAME = "Internet Explorer_Server";
private static IntPtr IES_CLASS_NAME_HWND = IntPtr.Zero;
private static string MMFPAX_CLASS_NAME = "MacromediaFlashPlayerActiveX";
private static IntPtr MMFPAX_CLASS_NAME_HWND = IntPtr.Zero;
private void btnInjectPlugin_Click(object sender, EventArgs e)
{
User32.EnumChildWindows(this.browserClient.Handle, EnumChildWindowsCallBack, IntPtr.Zero);
if (!IntPtr.Zero.Equals(IES_CLASS_NAME_HWND))
{
this.log("IES_CLASS_NAME_HWND is not null!");
//User32.EnumChildWindows(IES_CLASS_NAME_HWND, EnumChildWindowsCallBack, IntPtr.Zero);
MMFPAX_CLASS_NAME_HWND = User32.FindWindowEx(IES_CLASS_NAME_HWND, IntPtr.Zero, MMFPAX_CLASS_NAME, null);
while (!IntPtr.Zero.Equals(MMFPAX_CLASS_NAME_HWND))
{
StringBuilder className = new StringBuilder(100);
StringBuilder windowsName = new StringBuilder(100);
User32.GetClassName(MMFPAX_CLASS_NAME_HWND, className, className.Capacity);
User32.GetWindowText(MMFPAX_CLASS_NAME_HWND, windowsName, windowsName.Capacity);
RECT winRect = new RECT();
User32.GetWindowRect(MMFPAX_CLASS_NAME_HWND, ref winRect);
RECT cltRect = new RECT();
User32.GetClientRect(MMFPAX_CLASS_NAME_HWND, out cltRect);
INSTANCE.log("Handle:" + MMFPAX_CLASS_NAME_HWND + "|windowsname:" + windowsName + "|classname:" + className + "|width:" + (winRect.right - winRect.left) + "/" + (cltRect.right - cltRect.left) + "|height:" + (winRect.bottom - winRect.top) + "/" + (cltRect.bottom - cltRect.top));
if (winRect.right - winRect.left > 400)
{
break;
}
MMFPAX_CLASS_NAME_HWND = User32.FindWindowEx(IES_CLASS_NAME_HWND, MMFPAX_CLASS_NAME_HWND, MMFPAX_CLASS_NAME, null);
}
}
User32.PostMessage(MMFPAX_CLASS_NAME_HWND, (uint)MouseMessages.WM_RBUTTONDOWN, IntPtr.Zero, (IntPtr)((0 << 16) | (0 & 0xffff)));
User32.PostMessage(MMFPAX_CLASS_NAME_HWND, (uint)MouseMessages.WM_RBUTTONUP, IntPtr.Zero, (IntPtr)((0 << 16) | (0 & 0xffff)));
}
日志输出内容为:
2012-07-18 8:01:47 :: Handle:330018|windowsname:|classname:MacromediaFlashPlayerActiveX|width:1/1|height:1/1
2012-07-18 8:01:47 :: IES_CLASS_NAME_HWND is not null!
2012-07-18 8:01:47 :: Handle:330018|windowsname:|classname:MacromediaFlashPlayerActiveX|width:1|height:1
2012-07-18 8:01:47 :: Handle:461064|windowsname:|classname:Internet Explorer_Server|width:1680|height:838
2012-07-18 8:01:47 :: Handle:1050662|windowsname:|classname:Shell DocObject View|width:1680|height:838
相关推荐
c# 闪烁的窗体 windowsAPI FlashWindow .NET
在.NET框架中,C#作为主要的编程语言之一,提供了丰富的功能来构建Windows应用程序。然而,有时我们需要实现一些更底层的交互,这时Windows API(应用程序接口)就派上用场了。本篇将深入探讨如何在
fengmian123
fengmian123
QYR-18900-2026-2032全球与中国智能旋转导向钻井系统市场现状及未来发展趋势 Sample-shijunzhong.docx
QYR-18900-2026-2032全球与中国智能旋转导向钻井系统市场现状及未来发展趋势 Sample-shijunzhong.docx
XERJ 是一款受到社区信赖的本地 AI 搜索引擎
XERJ 是一款受到社区信赖的本地 AI 搜索引擎,能自动为任意文件夹建立索引,让编程智能体直接检索所需代码,省去逐个读取文件消耗的 token。它的主要用途是参考现有实现来写代码(reference coding):接到任务后,智能体下载与任务相关的开源仓库,建立索引,再查阅这些项目的解决方法。 在一项对照研究中,这种做法让智能体的输出 token 用量降至原来的约 1/2.7,同时保持 16/16 的任务完成率(案例研究)。用户在日常开发中报告的用量约为原来的 1/5(使用反馈)。有了可检索的参考实现,较小、较便宜的模型也可能胜过只凭记忆工作的昂贵模型,减少反复修改的次数。把下面这段提示词交给智能体即可开始
DocRes.Vulkan.WinForms.VS2022-Source-r1.1-20261016-102846-206.zip
DocRes.Vulkan.WinForms.VS2022-Source-r1.1-20261016-102846-206.zip 博客地址:https://blog.csdn.net/lw112190/article/details/168119884


