暂停网页中的Flash
如何暂停网页中的Flash?原理很简单,就是屏蔽Flash的消息即可。屏蔽右键也可以通过此方法
直接贴代码吧,加了注释,很容易就能懂了
新建工程,加一个WebBrowser,再加两个按钮。Flash 11.7.700.169 测试通过
[delphi]
unit Unit1;
inte易做图ce
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
WebBrowser1: TWebBrowser;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
function GetFlashHwnd: HWND;
public
end;
var
Form1: TForm1;
// Flash组件窗口句柄
FlashHwnd: HWND = 0;
// 控制“暂停”的开关变量
FlashPause: Boolean = False;
implementation
{$R *.dfm}
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
// 处理Flash窗口消息
if (FlashHwnd <> 0) and (Msg.hwnd = FlashHwnd) then
begin
if FlashPause then
begin
// 仅仅保留窗口重绘相关消息,其余的消息全部过滤掉
if not(Msg.message in [WM_PAINT, WM_WINDOWPOSCHANGED]) then
begin
Handled := True;
Exit;
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FlashPause := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FlashPause := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// 设置进程消息处理过程
Application.OnMessage := AppMessage;
WebBrowser1.Navigate('http://www.4399.com/flash/90302_3.htm');
end;
function TForm1.GetFlashHwnd: HWND;
begin
Result := FindWindowEx(WebBrowser1.Handle, 0, 'Shell DocObject View', nil);
if Result = 0 then
Exit;
Result := FindWindowEx(Result, 0, 'Internet Explorer_Server', nil);
if Result = 0 then
Exit;
Result := FindWindowEx(Result, 0, 'MacromediaFlashPlayerActiveX', nil);
end;
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
// 等页面加载完毕再取得其中的Flash窗口句柄
if pDisp = WebBrowser1.Application then
FlashHwnd := GetFlashHwnd;
end;
end.
unit Unit1;
inte易做图ce
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
WebBrowser1: TWebBrowser;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
function GetFlashHwnd: HWND;
public
end;
var
Form1: TForm1;
// Flash组件窗口句柄
FlashHwnd: HWND = 0;
// 控制“暂停”的开关变量
FlashPause: Boolean = False;
implementation
{$R *.dfm}
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
// 处理Flash窗口消息
if (FlashHwnd <> 0) and (Msg.hwnd = FlashHwnd) then
begin
if FlashPause then
begin
// 仅仅保留窗口重绘相关消息,其余的消息全部过滤掉
if not(Msg.message in [WM_PAINT, WM_WINDOWPOSCHANGED]) then
begin
Handled := True;
Exit;
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FlashPause := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FlashPause := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// 设置进程消息处理过程
Application.OnMessage := AppMessage;
WebBrowser1.Navigate('http://www.4399.com/flash/90302_3.htm');
end;
function TForm1.GetFlashHwnd: HWND;
begin
Result := FindWindowEx(WebBrowser1.Handle, 0, 'Shell DocObject View', nil);
if Result = 0 then
Exit;
Result := FindWindowEx(Result, 0, 'Internet Explorer_Server', nil);
if Result = 0 then
Exit;
Result := FindWindowEx(Result, 0, 'MacromediaFlashPlayerActiveX', nil);
end;
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
// 等页面加载完毕再取得其中的Flash窗口句柄
if pDisp = WebBrowser1.Application then
FlashHwnd := GetFlashHwnd;
end;
end.
补充:软件开发 , Delphi ,