Delphi通過IE視窗控制程式碼獲取網頁介面(IWebBrowser2)
主要用到的是MSAA(Microsoft Active Accessibility) 函式:ObjectFromLResult,該函式在動態連結庫 oleacc.dll 中定義。
uses SHDocVw, MsHtml, ActiveX;
type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;
function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
hInst: HWND;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
Result := S_False;
hInst := LoadLibrary('Oleacc.dll');
@ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
if @ObjectFromLresult <> nil then begin
try
MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
if Result = S_OK then
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
finally
FreeLibrary(hInst);
end;
end;
end;
呼叫例子,以下程式碼快速關閉所有開啟的IE視窗:
procedure TForm1.Button1Click(Sender: TObject);
var
hCurWindow, hMainWnd, hTabWnd, hCldWnd:HWnd; //視窗控制程式碼
WinClsName:array[0..255] of char;
IE1: IWebbrowser2;
begin
hCurWindow := GetWindow(Handle,GW_HWNDFirst); //獲取第一個視窗的控制程式碼
while hCurWindow<>0 do
begin
GetClassName(hCurWindow, @WinClsName, 255);
if String(WinClsName) = 'IEFrame' then
begin
hMainWnd := hCurWindow;
hCldWnd := hCurWindow;
hTabWnd := 0;
repeat //迴圈查詢所有選項卡
hTabWnd := FindWindowEx(hMainWnd, hTabWnd, 'Frame Tab', nil);
if hTabWnd <> 0 then hCldWnd := FindWindowEx(hTabWnd, 0, 'TabWindowClass', nil);
if hCldWnd <> 0 then hCldWnd := FindWindowEx(hCldWnd, 0, 'Shell DocObject View', nil);
if hCldWnd <> 0 then hCldWnd := FindWindowEx(hCldWnd, 0, 'Internet Explorer_Server', nil);
if hCldWnd <> 0 then if GetIEFromHWnd(hCldWnd, IE1) = S_OK then //獲取IWebBrowser2
begin
IE1.Quit; //關閉IE,也可以執行其他操作,呵呵
end;
until hTabWnd = 0;
end;
hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT); //獲取下一個視窗的控制程式碼
end;
end;
相關文章
- Delphi獲取所有開啟的IE視窗的網頁原始碼網頁原始碼
- 根據一個點獲取視窗控制程式碼的APIAPI
- Delphi自動提交網頁表單和獲取框架網頁原始碼網頁框架原始碼
- javascript獲取視窗大小例項程式碼JavaScript
- VC 各種情況下的視窗控制程式碼的獲取
- 通過反射獲取窗體例項反射
- jQuery獲取瀏覽器視窗和文件視窗的高度程式碼jQuery瀏覽器
- jQuery獲取視窗尺寸的例項程式碼jQuery
- javascript獲取瀏覽器視窗尺寸程式碼片段JavaScript瀏覽器
- 通過 gitlab 介面獲取程式碼提交記錄和改動行數Gitlab
- js獲取瀏覽器視窗尺寸程式碼例項JS瀏覽器
- 通過EPROCESS獲取程式名
- WPF通過附加屬性控制視窗關閉
- 使用WebBrowser控制元件獲取網頁原始碼的方法Web控制元件網頁原始碼
- 如何用C語言寫一個獲取視窗控制程式碼和其他資訊的小程式.C語言
- QWebView獲取網頁原始碼WebView網頁原始碼
- JavaScript 獲取網頁尾本程式碼內容JavaScript網頁
- javascript通過class屬性獲取元素的程式碼JavaScript
- org.reflections 介面通過反射獲取實現類原始碼研究反射原始碼
- javascript獲取視窗和螢幕解析度等尺寸程式碼JavaScript
- 高效獲取網頁原始碼COM網頁原始碼
- js獲取網頁title標題程式碼例項JS網頁
- Delphi建立ActiveX控制元件,實現安全介面及無介面程式碼控制元件
- javascript獲取window視窗的尺寸JavaScript
- js如何獲取網頁尾本程式碼的內容JS網頁
- 歷史上的今天獲取介面程式碼
- 通過程式碼掛上物理頁
- iOS開發 如何通過檢視(view)獲取該檢視所在的控制器(viewController)iOSViewController
- delphi 判斷類是否實現介面,獲取類實現的介面
- 視窗屬性的獲取函式函式
- jQuery iframe子視窗獲取父視窗元素簡單介紹jQuery
- 通過PowerShell獲取Windows系統密碼HashWindows密碼
- 通過gitHub獲取vlc-Android原始碼GithubAndroid原始碼
- Web效能優化系列 – 通過提前獲取DNS來提升網頁載入速度Web優化DNS網頁
- webview獲取網頁titleWebView網頁
- 關於父視窗獲取跨域iframe子視窗中的元素跨域
- js獲取瀏覽器視窗的大小JS瀏覽器
- js獲取瀏覽器視窗屬性JS瀏覽器