Я с нетерпением жду, чтобы найти способ получить URL от Firefox с помощью MFC.На самом деле я использовал способ получения URL от Firfox, который называется DDE (Dynamic Data Exchange) .Это хорошо работает в Firefox версии 49, но не работает в Firefox версии 50+.
Я хотел бы получить идеи по этой проблеме.Ниже приведено следующее:
1) Существуют ли большие различия между Firefox версии 49 и 50?
2) Почему DDE не работает в Firefox 50?
3) Чтонаилучший способ найти URL из Firefox с помощью MFC?(К сожалению, Я не могу использовать другие языки программирования , такие как C #.)
Вот код, который я недавно использовал.Пожалуйста, посмотрите на этот код и постарайтесь помочь мне найти ответы на мои три вопроса.Спасибо!
wchar_t szApp[] = L"Firefox";
wchar_t szTopic[] = L"WWW_GetWindowInfo";
//DDE Initialization
DWORD idInst=0;
UINT iReturn;
iReturn = DdeInitialize(&idInst, (PFNCALLBACK)DdeCallback,
APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0 );
if (iReturn!=DMLERR_NO_ERROR)
{
_TM(L"DDE Initialization Failed: 0x%04x\n", iReturn);
Sleep(1500);
break;
}
//DDE Connect to Server using given AppName and topic.
HSZ hszApp, hszTopic;
HCONV hConv;
hszApp = DdeCreateStringHandle(idInst, szApp, 0);
hszTopic = DdeCreateStringHandle(idInst, szTopic, 0);
hConv = DdeConnect(idInst, hszApp, hszTopic, NULL);
DdeFreeStringHandle(idInst, hszApp);
DdeFreeStringHandle(idInst, hszTopic);
if (hConv == NULL)
{
_TM(L"DDE Connection Failed.\n");
Sleep(1500); DdeUninitialize(idInst);
break;
}
wchar_t szItem1[100];
wchar_t szDesc1[DDEREQUEST_ITEM_LENGTH];
memset(szItem1,0,sizeof(szItem1));
memset(szDesc1,0,sizeof(szDesc1));
wsprintf(szItem1,L"URL");
//Execute commands/requests specific to the DDE Server.
DDERequest(idInst, hConv, szItem1, szDesc1);
//DDE Disconnect and Uninitialize.
DdeDisconnect(hConv);
DdeUninitialize(idInst);
CString strData;
strData.Format(L"%s",szDesc1);
strData.MakeLower();
_TM(L"firefox Start : %s\n",strData);
int nStartPos = strData.Find(L"http");
if (nStartPos!=-1)
{
int nEndPos = strData.Find(L"\"",nStartPos+1);
if (nEndPos!=-1)
{
strReturnUrl = strData.Mid(nStartPos,nEndPos-1);
}
else
{
nEndPos = strData.Find(L"/",nStartPos+9);
strReturnUrl = strData.Mid(nStartPos,nEndPos-1);
}
}
_TM(L"firefox End : %s\n",strReturnUrl);
if (strReturnUrl.IsEmpty())
{
_TM(L"firefox chrome Start\n");
strReturnUrl = GetChromeWndAddress(hWnd);
_TM(L"firefox chrome End : %s\n",strReturnUrl);
}