WTLATLVisual C++ 7.1Visual C++ 8.0Visual C++ 7.0Windows 2003Windows 2000Visual C++ 6.0Windows XPMFCIntermediateDevVisual StudioWindowsC++
Open a URL in a new window






4.88/5 (22 votes)
Jul 11, 2003

187752

1563
An article showing how to launch a URL in a new browser window
Introduction
Ever wanted to open a URL without blatting the contents of an existing browser window? Here's how - and it will only take you seconds.
First, include the header file:
#include "url.h"
Then simply declare a CURL
object and call the Open
method:
CURL url;
url.Open(_T("http://www.codeproject.com/"));
If you want to re-use an existing browser window, then pass false
as the second parameter:
CURL url;
url.Open(_T("http://www.codeproject.com/"), false);
That's it! Easy - and you can use this code with any CString
friendly framework (MFC, WTL, ATL7).
CURL
#pragma once class CURL { private: // The default browser CString m_strBrowser; public: // Open a URL void Open(LPCTSTR lpszURL, bool bNewWindow = true) { if (bNewWindow) ::ShellExecute(NULL, NULL, GetBrowser(), lpszURL, NULL, SW_SHOWNORMAL); else ::ShellExecute(NULL, NULL, lpszURL, NULL, NULL, SW_SHOWNORMAL); } // Get the default browser from the registry LPCTSTR GetBrowser(void) { // Have we already got the browser? if (m_strBrowser.IsEmpty()) { // Get the default browser from HKCR\http\shell\open\command HKEY hKey = NULL; // Open the registry if (::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("http\\shell\\open\\command"), 0, KEY_READ, &hKey) == ERROR_SUCCESS) { // Data size DWORD cbData = 0; // Get the default value if (::RegQueryValueEx(hKey, NULL, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS && cbData > 0) { // Allocate a suitable buffer TCHAR* psz = new TCHAR [cbData]; // Success? if (psz != NULL) { if (::RegQueryValueEx(hKey, NULL, NULL, NULL, (LPBYTE)psz, &cbData) == ERROR_SUCCESS) { // Success! m_strBrowser = psz; } delete [] psz; } } ::RegCloseKey(hKey); } // Do we have the browser? if (m_strBrowser.GetLength() > 0) { // Strip the full path from the string int nStart = m_strBrowser.Find('"'); int nEnd = m_strBrowser.ReverseFind('"'); // Do we have either quote? // If so, then the path contains spaces if (nStart >= 0 && nEnd >= 0) { // Are they the same? if (nStart != nEnd) { // Get the full path m_strBrowser = m_strBrowser.Mid(nStart + 1, nEnd - nStart - 1); } } else { // We may have a pathname with spaces but // no quotes (Netscape), e.g.: // C:\PROGRAM FILES\NETSCAPE\COMMUNICATOR\PROGRAM\NETSCAPE.EXE -h "%1" // Look for the last backslash int nIndex = m_strBrowser.ReverseFind('\\'); // Success? if (nIndex > 0) { // Look for the next space after the final // backslash int nSpace = m_strBrowser.Find(' ', nIndex); // Do we have a space? if (nSpace > 0) m_strBrowser = m_strBrowser.Left(nSpace); } } } } // Done return m_strBrowser; } };