用API实现
解决方案 »
- pos枪的使用
- 怎么获取系统版本?比如家庭版或专业版
- 如何声明颜色变量呢?
- 如何将数组名转换为指针
- tstringlist中统计问题,谢谢回复
- 像msg.cmdType的值,在哪有找到,帮助我没找到(E文也差了点)?顺便问一下任务栏图标上单击cmdType的值应该是多少?
- 用BDE链接Sybase数据库的问题!
- Delphi运行的时候,怎样用一个已经弄的的TForm作为模版,新创建的TForm对象可以继承它?
- DELPHI查询数据库SYBASE的问题
- 讨论:C/S与B/S的优缺点?
- 大家说说存储过程的最大好处是什么?
- 急!关于PostMessage(Handle,WM_NEXTDLGCTL, 0,0)焦点不转移的问题!
不过发现很多问题,执行代码后,IE窗口确实被隐藏,
用alt+tab可以切换显示,显示后任务栏会重新增加一个窗口图标。--------------------------------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SHDocVw,MSHTML,ActiveX;
type
ITaskbarList = interface(IUnknown)
['{56FDF344-FD6D-11d0-958A-006097C9A090}']
function HrInit():HRESULT;stdcall;
function AddTab(hwnd:HWND):HRESULT;stdcall;
function DeleteTab(hwnd:HWND):HRESULT;stdcall;
function ActivateTab(hwnd:HWND):HRESULT;stdcall;
function SetActiveAlt(hwnd:HWND):HRESULT;stdcall;
end; TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
ShellWindow: IShellWindows;
IE:IWebBrowser2;
IDoc:IHTMLDocument2;
spDisp:IDispatch; i : Integer;
v : Olevariant; TaskbarList:ITaskbarList;
const
CLSID_TaskbarList:TGUID='{56FDF344-FD6D-11d0-958A-006097C9A090}';
IID_ITaskbarList:TGUID='{602D4995-B13A-429b-A66E-1935E44F4317}';begin
ShellWindow := CoShellWindows.Create;
for i:=0 to ShellWindow.Count-1 do
begin
v := i;
spDisp := ShellWindow.Item(v);
if Succeeded(spDisp.QueryInterface(IWebBrowser2,IE)) then
begin
if Succeeded(IE.Document.QueryInterface(IHTMLDocument2,IDoc)) then
begin
//找到指定的IE窗口
if IDoc.url='http://www.csdn.net/' then
begin
if Succeeded(CoCreateInstance(CLSID_TaskbarList,Nil,CLSCTX_INPROC_SERVER,
IID_ITaskbarList,TaskbarList)) then
begin
TaskbarList.HrInit();
TaskbarList.DeleteTab(IE.HWND);
TaskbarList := nil;
end;
Break;
end;
end;
end;
end;
end;end.
做一个无边框的透明窗体,
用SetParent将透明窗体设置为IE窗体的父窗体
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SHDocVw,MSHTML,ActiveX, ExtCtrls;
type
ITaskbarList = interface(IUnknown)
['{56FDF344-FD6D-11d0-958A-006097C9A090}']
function HrInit():HRESULT;stdcall;
function AddTab(hwnd:HWND):HRESULT;stdcall;
function DeleteTab(hwnd:HWND):HRESULT;stdcall;
function ActivateTab(hwnd:HWND):HRESULT;stdcall;
function SetActiveAlt(hwnd:HWND):HRESULT;stdcall;
end; TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
ShellWindow: IShellWindows;
IE:IWebBrowser2;
IDoc:IHTMLDocument2;
spDisp:IDispatch; i : Integer;
v : Olevariant; TaskbarList : ITaskbarList;
dwStyleOld : DWORD;const
CLSID_TaskbarList:TGUID='{56FDF344-FD6D-11d0-958A-006097C9A090}';
IID_ITaskbarList:TGUID='{602D4995-B13A-429b-A66E-1935E44F4317}';begin
ShellWindow := CoShellWindows.Create;
for i:=0 to ShellWindow.Count-1 do
begin
v := i;
spDisp := ShellWindow.Item(v);
if Succeeded(spDisp.QueryInterface(IWebBrowser2,IE)) then
begin
if Succeeded(IE.Document.QueryInterface(IHTMLDocument2,IDoc)) then
begin
//找到指定的IE窗口
if IDoc.url='http://www.csdn.net/' then
begin
if Succeeded(CoCreateInstance(CLSID_TaskbarList,Nil,CLSCTX_INPROC_SERVER,
IID_ITaskbarList,TaskbarList)) then
begin
//用ITaskbarList隐藏任务栏图标
TaskbarList.HrInit();
TaskbarList.DeleteTab(IE.HWND);
TaskbarList := nil; //IE窗口活动时,会重新在任务栏增加一个图标
//取消WS_EX_APPWINDOW并增加WS_EX_TOOLWINDOW风格
dwStyleOld := GetWindowLong(IE.HWND,GWL_EXSTYLE);
SetWindowLong(IE.HWND,GWL_EXSTYLE,dwStyleOld or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
end;
//如果有多个IE窗口,就把Break注释掉,这样可以遍历所有窗口
//Break;
end;
end;
end;
end;
end;end.