User ID:
Password:
Remember Me:
Forgot Password?
Not a member?
Click here for more information and to register.

    Getting Shortcuts (.lnk) - Target and Arguments



    Environment: VC6.0 SP2

    I saw Michael Taupitz's idea of creating Links (shortcuts) and I realized that there are many times when we stumble across a link in command prompt mode and we have no idea what this .lnk file points to.

    Here's a function I wrote which returns the Target and Arguments of a .lnk file in a CString. Hope you find it helpful.

    
    CString GetShortcutTarget(const CString LinkFileName)
    {
    	HRESULT hres;
    	
    	CString Link, Temp = LinkFileName;
    	Temp.MakeLower();
    	if (Temp.Find(".lnk")==-1)           //Check if the name ends with .lnk
    		Link = LinkFileName + ".lnk";   //if not, append it
    	else
    		Link = LinkFileName;
    
    	CString Info;
    	Info.Empty();
    	
    	IShellLink* psl;
    
    	//Create the ShellLink object
    	hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
    				IID_IShellLink, (LPVOID*) &psl);
    	
    	if (SUCCEEDED(hres))
    	{
    		IPersistFile* ppf;
    		//Bind the ShellLink object to the Persistent File
    		hres = psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);
    		if (SUCCEEDED(hres))
    		{
    			WORD wsz[MAX_PATH];
    			//Get a UNICODE wide string wsz from the Link path
    			MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Link, -1, wsz, 					    MAX_PATH);
    			
    			//Read the link into the persistent file
    			hres = ppf->Load(wsz, 0);
    			
    			if (SUCCEEDED(hres))
    			{
    				//Read the target information from the link object
    				//UNC paths are supported (SLGP_UNCPRIORITY)
    				psl->GetPath(Temp.GetBuffer(1024), 1024, NULL, 				             SLGP_UNCPRIORITY);
    				Temp.ReleaseBuffer();
    				Info = Temp;
    
    				//Read the arguments from the link object
    				psl->GetArguments(Temp.GetBuffer(1024), 1024);
    				Temp.ReleaseBuffer();
    				Info += " " + Temp;
    			}
    		}
    	}
    	psl->Release();
    	//Return the Target and the Argument as a CString
    	return Info;
    }
    
    
    

    Date Posted: 13/02/99


    IT Offers


    Top Authors