📄 hxhypnv.cpp
字号:
CHXString strPreferredBrowser; if(m_pPreferences) { IHXBuffer* pPreferredBrowser = NULL; if(m_pPreferences->ReadPref("PreferredBrowser", pPreferredBrowser) == HXR_OK) strPreferredBrowser = (const char*)pPreferredBrowser->GetBuffer(); HX_RELEASE(pPreferredBrowser); } if(!strPreferredBrowser.IsEmpty()) { if (BrowserOpenURL(pURL, pTarget, strPreferredBrowser)) { return HXR_OK; } else if (LaunchBrowserWithURL(pURL, strPreferredBrowser)) { return HXR_OK; } } if (BrowserOpenURL(pURL, pTarget)) { return HXR_OK; } else if (LaunchBrowserWithURL(pURL)) { return HXR_OK; }#endif /*(defined (_WINDOWS) || defined (_WIN32)) && !defined(_WINCE)*/#if defined (_MACINTOSH) || defined(_MAC_UNIX) BOOL bBringToFront = TRUE; if (GetKeepTargetBehind()) { bBringToFront = FALSE; } if(LaunchMacBrowserWithURLOrdered(pURL, m_pPreferences, bBringToFront)) //in pnmisc/mac/hurl.cpp { return HXR_OK; }#endif /*defined (_MACINTOSH)*/ #if defined(_UNIX) && !defined(_VXWORKS) && !defined(_MAC_UNIX) SendHurlRequest(pURL); return HXR_OK;#endif return HXR_FAILED;}#if (defined (_WINDOWS) || defined (_WIN32)) && !defined(_WINCE)BOOL GetAOLBrowserCmdLine(char* lpLaunchCmd){ if(GetProfileString("WAOL", "AppPath", "", lpLaunchCmd, _MAX_PATH) > 0) { if(lpLaunchCmd[strlen(lpLaunchCmd) - 1] != '\\') { SafeStrCat(lpLaunchCmd, "\\", _MAX_PATH); } SafeStrCat(lpLaunchCmd, "waol.exe -u%1", _MAX_PATH); return TRUE; } return FALSE;}// This function is called by LaunchBrowserWithURL below. I removed// this chunk of code from that function, so that this function could// also be called rpmisc (via rpclsvc) to get the browser to send // to techsupport via rphurlerror in error messages.BOOL GetBrowserFromRegistry(char* lpLaunchCmd) // lpLaunchCmd should point to a buffer of _MAX_PATH+1 size{ BOOL bBrowserFound = FALSE; BOOL bFoundAOLBrowser = FALSE; // Can't use FindWindow because it waits if a window is doing activity inside of its WndProc and if the window is waiting // on some event deadlock occurs. Enumerate windows instead. ::EnumWindows(FindAOLWindowProc,(LPARAM)&bFoundAOLBrowser); if(bFoundAOLBrowser) { bBrowserFound = GetAOLBrowserCmdLine(lpLaunchCmd); } if(!bBrowserFound) { char* lpSubKey = new char[_MAX_PATH+1]; HKEY hkProtocol; LONG lBuffLen; BOOL bTypeNameFound = FALSE; SafeStrCpy(lpSubKey, ".HTM", _MAX_PATH+1); if (RegOpenKey(HKEY_CLASSES_ROOT, lpSubKey, &hkProtocol) == ERROR_SUCCESS) { lBuffLen = _MAX_PATH; if (RegQueryValue(hkProtocol, NULL, lpLaunchCmd, &lBuffLen) == ERROR_SUCCESS) { bTypeNameFound = TRUE; } RegCloseKey(hkProtocol); } if (!bTypeNameFound) { SafeStrCpy(lpSubKey, ".HTML", _MAX_PATH+1); if (RegOpenKey(HKEY_CLASSES_ROOT, lpSubKey, &hkProtocol) == ERROR_SUCCESS) { lBuffLen = _MAX_PATH; if (RegQueryValue(hkProtocol, NULL, lpLaunchCmd, &lBuffLen) == ERROR_SUCCESS) { bTypeNameFound = TRUE; } RegCloseKey(hkProtocol); } } // Ok, we figured out the "name" of HTML documents, this will help us find the // application that thinks it will launch them... if (bTypeNameFound) { SafeStrCpy(lpSubKey,lpLaunchCmd, _MAX_PATH+1); if (RegOpenKey(HKEY_CLASSES_ROOT, lpSubKey, &hkProtocol) == ERROR_SUCCESS) { lBuffLen = _MAX_PATH; if (RegQueryValue(hkProtocol, "shell\\open\\command", lpLaunchCmd, &lBuffLen) == ERROR_SUCCESS) { bBrowserFound = TRUE; } RegCloseKey(hkProtocol); } } } if(!bBrowserFound) { bBrowserFound = GetAOLBrowserCmdLine(lpLaunchCmd); } return bBrowserFound;}BOOL CALLBACK FindAOLWindowProc(HWND hwnd, LPARAM lParam){ char pWindowText[32] = ""; /* Flawfinder: ignore */ DWORD dwResult = 0; ::SendMessageTimeout(hwnd, WM_GETTEXT, (WPARAM)sizeof(pWindowText), (LPARAM)pWindowText, SMTO_BLOCK, 500, &dwResult); if (!strcmp("America Online", pWindowText)) { BOOL* pBool = (BOOL*)lParam; *pBool = TRUE; return FALSE; } return TRUE;}#endif /*(defined (_WINDOWS) || defined (_WIN32)) && !defined(_WINCE)*/BOOL HXHyperNavigate::LaunchBrowserWithURL(const char* pURL, const char* pDefBrowser){#if (defined (_WINDOWS) || defined (_WIN32)) && !defined(_WINCE) BOOL bHandled = FALSE; char* lpLaunchCmd = new char[_MAX_PATH+1]; char* lpActualLaunch = new char[_MAX_PATH+1]; BOOL bBrowserFound = FALSE; if(pDefBrowser) { char* pName = strrchr(pDefBrowser, '\\'); if(pName) { pName++; if(!stricmp(pName, "waol.exe")) { SafeSprintf(lpLaunchCmd,_MAX_PATH+1,"%s -u%%1", pDefBrowser); } else { SafeSprintf(lpLaunchCmd,_MAX_PATH+1,"%s %%1", pDefBrowser); } bBrowserFound = TRUE; } } if(!bBrowserFound) bBrowserFound = GetBrowserFromRegistry(lpLaunchCmd); // Ok, we got a browser "launch" entry... if (bBrowserFound) { // Now we want to find out if it's a reasonable format... char* pParam = (char*)HXFindString(lpLaunchCmd, "%1"); if (pParam) { if ( (strlen(lpLaunchCmd)+strlen(pURL)) >= _MAX_PATH) { bHandled = FALSE; } else { // Replace %1 with %s to use format! pParam++; *pParam = 's'; SafeSprintf(lpActualLaunch,_MAX_PATH+1,lpLaunchCmd,pURL); if(WinExec(lpActualLaunch, #ifdef _WIN32 SW_SHOWDEFAULT #else SW_SHOWNORMAL #endif ) > 31) { bHandled = TRUE; } // If we failed, we should try without the URL.... else { SafeSprintf(lpActualLaunch,_MAX_PATH+1,lpLaunchCmd,""); if(WinExec(lpActualLaunch, #ifdef _WIN32 SW_SHOWDEFAULT #else SW_SHOWNORMAL #endif ) > 31) { if (BrowserOpenURL(pURL, NULL, pDefBrowser)) { bHandled = TRUE; } } } // end if Launch with URL failed. } // launchCmd+Url too long } // If we didn't find a paramter, try to launch the browser // then do DDE to it... else { if(WinExec(lpLaunchCmd, #ifdef _WIN32 SW_SHOWDEFAULT #else SW_SHOWNORMAL #endif ) > 31) { if (BrowserOpenURL(pURL, NULL, pDefBrowser)) { bHandled = TRUE; } } } // end if we found a parameter... } if (lpLaunchCmd) { delete [] lpLaunchCmd; lpLaunchCmd = 0; } if (lpActualLaunch) { delete [] lpActualLaunch; lpActualLaunch = 0; } return bHandled;#else return FALSE;#endif /*(defined (_WINDOWS) || defined (_WIN32)) && !defined(_WINCE)*/}/************************************************************************ * Method: * IHXHyperNavigate2::Execute * Purpose: * * Parameters: * pURL: URL (absolute or relative) * pTargetInstance: * pTargetApplication: * pTargetRegion: * pParams: */STDMETHODIMP HXHyperNavigate::Execute(const char* pURL, const char* pTargetInstance, const char* pTargetApplication, const char* pTargetRegion, IHXValues* pParams){ return GoToURL(pURL, pTargetInstance);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -