gpt4 book ai didi

c++ - 如何在 C++ 中获取浏览器地址栏的内容?

转载 作者:行者123 更新时间:2023-11-30 02:52:02 28 4
gpt4 key购买 nike

如果是 C++ 中的网络浏览器,我需要抓取事件窗口地址栏的内容。我已经想出了如何获取标题,并且可以获取记事本的内容,但我被浏览器卡住了。

我的目标是让这项工作适用于 IE、Chrome 和 Firefox。如果这需要不同的方法,我会让程序尝试每一个,直到一个返回数据。

这是我目前所拥有的:

    HWND foreground = GetForegroundWindow();
HWND hwndEdit = FindWindowEx(foreground, NULL, "EDIT", NULL);

const int bufferSize = 5024;
char textBuffer[bufferSize] = "";
SendMessage(hwndEdit, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer);

cout << textBuffer;

最佳答案

另一种适用于 IE 实例的工作方法:

#include <stdio.h>
#include <wchar.h>
#include <Windows.h>
#include <Exdisp.h>

//This imports the shell extionsions
//we disable warnings of multiple defines
#pragma warning(disable: 4192)
#pragma warning(disable: 4146)
#import <mshtml.tlb>
#import <shdocvw.dll>

void PrintBrowserInfo(IWebBrowser2 *pBrowser) {
//These functions return Unicode strings.
BSTR bstr;
//Get the window title
pBrowser->get_LocationName(&bstr);
wprintf(L"Title: %s\n", bstr);
SysFreeString(bstr);
//Detect if this is Windows Explorer (My Computer) or Internet Explorer (the internet)
IDispatchPtr spDisp;
char *type = "Windows Explorer";
if (pBrowser->get_Document(&spDisp) == S_OK && spDisp != NULL) {
MSHTML::IHTMLDocument2Ptr spHtmlDocument(spDisp);
if (spHtmlDocument != NULL) {
MSHTML::IHTMLElementPtr spHtmlElement;
spHtmlDocument->get_body(&spHtmlElement);
if (spHtmlElement != NULL) {
type = "Internet Explorer";
}
}
spDisp.Release();
}
printf(" Type: %s\n", type);
//Get the URL of the folder or web page
pBrowser->get_LocationURL(&bstr);
wprintf(L" URL: %s\n\n", bstr);
SysFreeString(bstr);
}

int main() {
CoInitialize(NULL); //We need COM
SHDocVw::IShellWindowsPtr spSHWinds;
IDispatchPtr spDisp;
//Find all explorer (Windows and Internet) and list them
if (spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) == S_OK) {
long nCount = spSHWinds->GetCount();
for (long i = 0; i < nCount; i++) {
_variant_t va(i, VT_I4);
spDisp = spSHWinds->Item(va);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
if (spBrowser != NULL) {
//spBrowser->AddRef();
PrintBrowserInfo((IWebBrowser2 *)spBrowser.GetInterfacePtr());
spBrowser.Release();
}
}
} else {
puts("Shell windows failed to initialise");
}
system("PAUSE");
return 0;
}

关于c++ - 如何在 C++ 中获取浏览器地址栏的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19281893/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com