| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1053 人关注过本帖
标题:"QQ魔法表情"模拟器(1)---原理
只看楼主 加入收藏
zero_one
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2005-2-12
收藏
 问题点数:0 回复次数:2 
"QQ魔法表情"模拟器(1)---原理

一、原理 它的原理很简单的。QQ在显示魔法表情(以下简称魔)时。会调用一个叫做MagicFlash.exe的程序。这个程序会打开一个窗口,在窗口中有一个WebBorwer控件,用来显示一个网页,而这个网页里的FLash就是我们看到的魔,那么为什么我们看到是在桌面上显示的呢。很简单,网页的背景图片就是窗口所蔽住那一块,这样看起来就好像在桌面上显示一样,那只不过是一个假像。 1。网页源代码如下 <html>

<head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> </head>

<body background="bg.jpg" style="overflow:hidden" border= "0">

<SCRIPT LANGUAGE="JavaScript">

function ID1_DoFSCommand(command, args) { if(command=="window" && args=="closeResult close")

{ document.getElementById('V1').innerHTML = ''; }

}

</SCRIPT>

<SCRIPT LANGUAGE="VBScript">

On Error Resume Next

Sub ID1_FSCommand(ByVal command, ByVal args) Call ID1_DoFSCommand(command, args)

End Sub

</SCRIPT>

<DIV ID="V1">

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="ID1" width="400" height="400" align="middle"> <param name="movie" value="E:\school\QQ_Magic\QQ_Magic\QQ_Magic\bin\Debug\temp.swf"/> <param name="quality" value="high" /> <param name="wmode" value="transparent" /> <param name="bgcolor" value="#ffffff" /> <param name="allowScriptAccess" value="sameDomain" /> <param name="scale" value="showall" /> </object> </DIV> </body> </html> 2。如何截图。在C#不能直接实现,要用API函数。(//是注释) 在调用API函数时,要引明System.Runtime.InteropServices这个名字空间 [DllImport("gdi32.dll", EntryPoint="BitBlt")] //这句是必要的 public static extern int BitBlt ( IntPtr hDestDC, //IntPtr我查过MSDN中说是转换句柄的。在BitBlt这个API函数中这个成员是一个int类,如果用int类型好像出错。 int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, int dwRop ); 以下是载图: //获得当前屏幕的大小 Rectangle rect = new Rectangle() ; rect = Screen.GetWorkingArea (this) ; //创建一个以当前屏幕为模板的图象 Graphics g1 = this.CreateGraphics() ; //创建以屏幕大小为标准的位图 Image MyImage = new Bitmap (this.Width,this.Height , g1 ) ; Graphics g2 = Graphics.FromImage ( MyImage ) ; //得到屏幕的DC IntPtr dc1 = g1.GetHdc() ; //得到Bitmap的DC IntPtr dc2 = g2.GetHdc() ; //调用此API函数,实现屏幕捕获 BitBlt ( dc2 , 0 , 0 ,this.Width,this.Height, dc1 ,0 ,0 , 13369376 ) ; //释放掉屏幕的DC g1.ReleaseHdc ( dc1 ) ; //释放掉Bitmap的DC g2.ReleaseHdc ( dc2 ) ; //以JPG文件格式来保存 MyImage.Save ( @Application.StartupPath+"\\bg.jpg" , ImageFormat.Jpeg );

[此贴子已经被作者于2005-2-12 19:44:07编辑过]

搜索更多相关主题的帖子: 魔法 原理 模拟 
2005-02-12 18:58
yongyuan
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-2-21
收藏
得分:0 
没有弄明白..
2005-02-21 11:51
ZGQ520
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2005-11-10
收藏
得分:0 
楼主,我弄过了,怎么不行啊
能发份源程序吗?谢谢咯
qunhuaqing@163.com
2006-04-30 12:16
快速回复:"QQ魔法表情"模拟器(1)---原理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047033 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved