Creates a Windows Explorer Shortcut file.
In addition to the BlitzMax source, a C++ source is also needed, which is here: xsystem.cpp:
#include "windows.h"
extern "C" {
int xsystem( const char *args ){
int res;
STARTUPINFO si={sizeof(si)};
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi={0};
if( !CreateProcess( 0,(char*)args,0,0,1,0,0,0,&si,&pi ) ) return -1;
WaitForSingleObject( pi.hProcess,INFINITE );
res=GetExitCodeProcess( pi.hProcess,(DWORD*)&res ) ? res : -1;
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
return res;
}
} |
Strict
Import "xsystem.cpp"
CreateShortcut(GetEnv("USERPROFILE")+"\Start Menu\My Program.lnk","c:\windows\notepad.exe","My Program","CTRL+ALT+SHIFT+X","notepad.exe, 0","","c:\")
End
Extern "C"
Function xsystem(command:Byte Ptr)
EndExtern
Function CreateShortcut(linkfile$,exefile$,title$,hotkey$,icon$,exeargs$,workdir$)
Local filename$=GetEnv("TEMP")+"\creascut.vbs"
Local f:TStream
f=WriteStream(filename)
WriteLine(f,"set objWSHShell = CreateObject(~qWScript.Shell~q)")
WriteLine(f,"set objSC = objWSHShell.CreateShortcut(~q"+linkfile+"~q)")
WriteLine(f,"objSC.Description = ~q"+title+"~q")
WriteLine(f,"objSC.HotKey = ~q"+hotkey+"~q")
WriteLine(f,"objSC.IconLocation = ~q"+icon$+"~q") ' 0 is the index
WriteLine(f,"objSC.TargetPath = ~q"+exefile+"~q")
WriteLine(f,"objSC.Arguments = ~q"+exeargs+"~q")
WriteLine(f,"objSC.WindowStyle = 1") ' 1 = normal; 3 = maximize window; 7 = minimize
WriteLine(f,"objSC.WorkingDirectory = ~q"+workdir+"~q")
WriteLine(f,"objSC.Save")
CloseStream(f)
xsystem("cscript.exe ~q"+filename+"~q")
DeleteFile filename
EndFunction
Extern "Win32"
Function GetEnvironmentVariable(lpName$z, lpBuffer:Byte Ptr, nSize) = "GetEnvironmentVariableA@12"
End Extern
Function GetEnv$(envVar$)
Local buff@[64]
Local rtn = GetEnvironmentVariable(envVar$, buff@, buff.length)
If rtn > buff.length
buff@ = buff@[..rtn]
rtn = GetEnvironmentVariable(envVar$, buff@, buff.length)
EndIf
Return String.FromBytes(buff@, rtn)
End Function |