一、原理 它的原理很简单的。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编辑过]