Desktop shortcuts
BlitzPlus Forums/BlitzPlus Beginners Area/Desktop shortcuts
| ||
I am wanting to create a desktop shortcut from mu Blitz+ program - I assume that I will need to use the windows api functions, but I have no idea where to start looking. Can anyone give me any pointers? All I need to do is create a desktop shortcut back to the program that is being executed. Cheers, MarkyV |
| ||
I'm not quite sure what you mean by 'desktop shortcut' but have you checked out the HotKeyEvent command? |
| ||
He means a windows shortcut. I know the file extension for them is a hidden .Ink but apart from that, I don't know the insides. |
| ||
Yes - sorry, I do mean windows (.lnk) shortcut - which I want to put on the desktop (is there an environment variable that contains the path to the desktop?) Cheers, MarkyV |
| ||
Try going into Command Prompt and type 'Set'. I can't find one - The closest is the users folder. Print "Desktop: "+GetEnv$("userprofile") WaitKey |
| ||
Here is a DLL to create shortcuts. Desktop Shortcut DLL It is for another language, but should be easy to convert over. ;c) |
| ||
I forgot to say - I found a way of doing this - alas not directly in blitz - so if anyone is interested: I used the following line in Blitz+ (executable is called "Menu.exe"): ExecFile(mydir$+"shortcut.vbs "+mydir$+"Menu.exe") Then created the file "shortcut.vbs" which contained the following: Dim ws, fso, arFldrs, Fldr, Index, Menu, Title, Usage, Src Set ws = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") Tgt = ws.SpecialFolders("Desktop") Src = WScript.Arguments.Item(0) With ws.CreateShortcut(Tgt & "\" & fso.GetBaseName(Src) & ".lnk") .TargetPath = Src .Description = "Description of program" .Save End With ws.Popup "Menu shortcut created on the desktop.", 5, Title, 64 Set ws = Nothing Set fso = Nothing WScript.Quit ----------------------------- Just in case anyone was wondering :) Cheers, MarkyV http://www.my3d.co.uk |
| ||
Of course it wouldn't always work, since may computers have VBS scripting disabled since a large portion of VBS scripts these days do some pretty nasty stuff. |
| ||
This is the proper way to do it BUT the code is in Delphi 3. If anyone has the time to make it into a DLL then away you go.procedure ccCreateDesktopShortcut(ObjectPath, Description: String; HotKey: Word); //JB var MyObject : IUnknown; MySLink : IShellLink; MyPFile : IPersistFile; Directory : String; WFileName : WideString; MyReg : TRegIniFile; begin //Hotkey ... Best to pass an Ord('Key') and let this function apply Ctrl+Alt to it //Open up a COM Object to create the shell link (shortcut) MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; with MySLink do begin //SetArguments(''); //not used If HotKey<>0 then //don't create a blank hotkey! JB 09/10/00 SetHotKey(HotKey+HOTKEYF_ALT*256+HOTKEYF_CONTROL*256); //*256 to get high order byte SetPath(PChar(ObjectPath)); SetWorkingDirectory(PChar(ExtractFilePath(ObjectPath))); //sensible end; //Open the Registry to find out the Desktop Path MyReg := TRegIniFile.Create( 'Software\MicroSoft\Windows\CurrentVersion\Explorer'); Try Directory := MyReg.ReadString('Shell Folders','Desktop',''); //Create the Link ! WFileName := Directory + '\' + Description + '.lnk'; MyPFile.Save(PWChar(WFileName),False); Finally MyReg.Free; End; end; ///////////////////////////// procedure ccCreateStartMenuShortcut(ObjectPath, ShortcutSubPath, Description: String); //JB var MyObject : IUnknown; MySLink : IShellLink; MyPFile : IPersistFile; Directory : String; WFileName : WideString; MyReg : TRegIniFile; begin //Specify the ShortcutSubPath like this: Program Files\My Folder //Open up a COM Object to create the shell link (shortcut) MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; with MySLink do begin //SetArguments(''); //not used SetPath(PChar(ObjectPath)); SetWorkingDirectory(PChar(ExtractFilePath(ObjectPath))); //sensible end; //Open the Registry to find out the Start Menu Path MyReg := TRegIniFile.Create( 'Software\MicroSoft\Windows\CurrentVersion\Explorer'); Try //Make Start Menu sub-folder Directory := MyReg.ReadString('Shell Folders','Start Menu','') + '\' + ShortcutSubPath; CreateDir(Directory); //Create the Link ! WFileName := Directory + '\' + Description + '.lnk'; MyPFile.Save(PWChar(WFileName),False); Finally MyReg.Free; end; end; |
| ||
I created a dll using the Desktop Shortcut DLL. Get it http://www.angelfire.com/nc3/filestorage1/Desktop.zip <-- There You need to copy and paste it into the address bar. CreateShortCut(Shortcut to,Shortcut name, Description) |