Creating Internet Shortcuts

Environment: VC6 SP2, 95/98/NT

This article shows you how to create an Internet shortcut for Windows 95, 98, and NT computers. Creating internet shortcut is little different than the general shortcut, so the code for Internet shortcut creation is shown.

Before you see the code, you should understand the variables I'm using:
pszURL - url location e.g 'http://www.sample.com/index/html' Note: You can use a syntax such as file://Arguments for local files.
pszURLFileName - shortcut filename, should have extension of .url otherwise does not work. e.g ;"C:\test.url"
LPCSTR szDescription - description of the shortcut
LPCTSTR szIconFile - icon file(could any .exe ot .dll)
int index - index of the icon resource in above .exe or .dll



HRESULT CreateInterShortcut (LPCSTR pszURL, LPCSTR pszURLfilename,
	LPCSTR szDescription,LPCTSTR szIconFile = NULL,int nIndex = -1)
{
 HRESULT hres;

 CoInitialize(NULL); 

 IUniformResourceLocator *pHook;

 hres = CoCreateInstance (CLSID_InternetShortcut, NULL, CLSCTX_INPROC_SERVER,
  IID_IUniformResourceLocator, (void **)&pHook);

 if (SUCCEEDED (hres))
 {
  IPersistFile *ppf;
  IShellLink *psl;

  // Query IShellLink for the IPersistFile interface for 
  hres = pHook->QueryInterface (IID_IPersistFile, (void **)&ppf);
  hres = pHook->QueryInterface (IID_IShellLink, (void **)&psl);

  if (SUCCEEDED (hres))
  { 
   WORD wsz [MAX_PATH]; // buffer for Unicode string

   // Set the path to the shortcut target.
   pHook->SetURL(pszURL,0);

   hres = psl->SetIconLocation(szIconFile,nIndex);

   if (SUCCEEDED (hres))
   {
    // Set the description of the shortcut.
    hres = psl->SetDescription (szDescription);

    if (SUCCEEDED (hres))
    {
     // Ensure that the string consists of ANSI characters.
     MultiByteToWideChar (CP_ACP, 0, pszURLfilename, -1, wsz, MAX_PATH);

     // Save the shortcut via the IPersistFile::Save member function.
     hres = ppf->Save (wsz, TRUE);
    }
   }

   // Release the pointer to IPersistFile.
   ppf->Release ();
   psl->Release ();
  }

  // Release the pointer to IShellLink.
  pHook->Release ();

 }
 return hres;
} 

Downloads

Download function source code - 1 Kb


Comments

  • With Outlook verified and working

    Posted by Legacy on 02/18/2003 12:00am

    Originally posted by: Gangadaran M

    Dear sir,

    It's wright that will work under outlook only. Not from outlook express.

    It's fine. I have small query, NT or windows2000 does not have any tool to control the cunncurrent connections. Is there any code to control the no. of user in the Gigabit ethernet network.

    We have problem of users logging from several computers so we are experiencing the problems, let me know is there any solutions...

    Thanks,

    M.Gangadaran
    Bangalore

    Reply
  • an easier way

    Posted by Legacy on 05/28/2001 12:00am

    Originally posted by: Jocas

    //This code is a simpler version that does not require IE4.
    
    //
    //Make everything as simple as possible and no more. -Albert Einstein

    int CreateInterShortcut(const char *pszURL_c, const char *pszFileName_c,
    const char *pszIconFile_c = NULL, const int nIndex_c = -1)
    {
    //Create file in memory.
    CString sFileContents;
    sFileContents.Format("[InternetShortcut]\r\nURL=%s\r\n", pszURL_c);

    if(pszIconFile_c)
    {
    CString sTmp;
    sTmp.Format("IconFile=%s\r\n", pszIconFile_c);
    sFileContents += sTmp;
    }

    if(nIndex_c!=-1)
    {
    CString sTmp;
    sTmp.Format("IconIndex=%i\r\n", nIndex_c);
    sFileContents += sTmp;
    }

    //Write to disk.
    try
    {
    CFile vShortcut;
    if(!vShortcut.Open(pszFileName_c, CFile::modeCreate | CFile::modeWrite))
    return 0;
    vShortcut.Write(sFileContents, sFileContents.GetLength());
    vShortcut.Close();
    }
    catch(CFileException *err)
    {
    err->Delete();
    return 0;
    }

    return 1;
    };

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: November 20, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT Are you wanting to target two or more platforms such as iOS, Android, and/or Windows? You are not alone. 90% of enterprises today are targeting two or more platforms. Attend this eSeminar to discover how mobile app developers can rely on one IDE to create applications across platforms and approaches (web, native, and/or hybrid), saving time, money, and effort and introducing apps to market faster. You'll learn the trade-offs for gaining long …

  • Live Event Date: October 29, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Are you interested in building a cognitive application using the power of IBM Watson? Need a platform that provides speed and ease for rapidly deploying this application? Join Chris Madison, Watson Solution Architect, as he walks through the process of building a Watson powered application on IBM Bluemix. Chris will talk about the new Watson Services just released on IBM bluemix, but more importantly he will do a step by step cognitive …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds