Creating File Links | CodeGuru

Creating File Links

For a new Project I needed the function, to create Links to a File (in Startmenu and Autostart). But that is the Point to take a look on the MFC-Classes. But there is not so many Info about. The Old-Version (for Win 3.11) with DDE was nice and runs fine. But that is not the […]

Written By
CodeGuru Staff
CodeGuru Staff
Feb 7, 1999
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

For a new Project I needed the function, to create Links to a File (in
Startmenu and Autostart).
But that is the Point to take a look on the MFC-Classes. But there is
not so many Info about.
The Old-Version (for Win 3.11) with DDE was nice and runs fine. But that
is not the way to
write it under WinNT 4.0.

Okay, the right book at the right time, and every problem can be
solved…

The Solution I found under a small chapter about IShellLink. But not much
Info, and so i tried
it out.

At First is the boring COM –

	CoInitialize(NULL);
	hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
	IID_IShellLink, (LPVOID*) &psl);

If it was successful, you can set Path, Description and so on.
But to create the link in real (on Harddisk) we need IPersistFile

	hres = psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);

and save the File…

	hres = ppf->Save(, TRUE);

Thats all.

So, if anybody need it complete:

// Creating a Link with IShellLink
// strPathObj  = Object with Path
// strPathLink = Path where the Link will appear
// strDesc = Link-Decription (the text under the Icon)
// CoInitialize(NULL) wird vorausgesetzt !!

HRESULT MyMainClass::CreateLink(const CString strPathObj,const CString
strPathLink, const CString strDesc)
{
HRESULT hres;
IShellLink* psl;

	CString strMyPath = strPathLink;

	hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID*) &psl);
	if (SUCCEEDED(hres))
	{
		IPersistFile* ppf;

		psl->SetPath(strPathObj);
		psl->SetDescription(strDesc);

		hres = psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);

		if (SUCCEEDED(hres))
		{
			strMyPath += ".lnk";  // Important !!!

			WORD wsz[MAX_PATH];
			MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, strMyPath, -1, wsz,
MAX_PATH);

			hres = ppf->Save(wsz, TRUE);
			if (hres != S_OK )
				MessageBox(NULL, "IPersistFile->Save() Error", "Error", MB_OK);

			ppf->Release();
		}
		psl->Release();
	}
	return hres;
}

Okay, lets take a look on the Function above :

What you need to make the link is only to know where is the File for the Link, where you want to create
the Link, and what a Name should appear under the Icon.

The Path where comes in the Link must be added with the Name for the Link ( under the Icon) and needs
(its Important) a .lnk extension.

C:.lnk

Now call the Function :

FileLink([Source-Path with File],
	 [Destination-Path with an allowed Name and .lnk as Extension]
         (like C:[Path][Name you want].lnk ]);

And if you would like to try a complete Sample you can download FileLinkDemo.zip (only Win NT4.0 tested) (19KB)

Date Posted: 10/5/98

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.