Desktop shortcuts

BlitzPlus Forums/BlitzPlus Beginners Area/Desktop shortcuts

MarkyV(Posted 2005) [#1]
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


WolRon(Posted 2005) [#2]
I'm not quite sure what you mean by 'desktop shortcut' but have you checked out the HotKeyEvent command?


Lattyware(Posted 2005) [#3]
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.


MarkyV(Posted 2005) [#4]
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


Lattyware(Posted 2005) [#5]
Try going into Command Prompt and type 'Set'. I can't find one - The closest is the users folder.

Print "Desktop: "+GetEnv$("userprofile")
WaitKey


Kuron(Posted 2005) [#6]
Here is a DLL to create shortcuts. Desktop Shortcut DLL

It is for another language, but should be easy to convert over. ;c)


MarkyV(Posted 2005) [#7]
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


xlsior(Posted 2005) [#8]
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.


Grey Alien(Posted 2005) [#9]
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;



asdfasdf(Posted 2005) [#10]
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)