Find out whether Word was launched from its shortcut or by double-clicking a file

Article contributed by Will Rickards and Dave Rado

Option Explicit

Public Declare Function GetCommandLine Lib "kernel32" _
         Alias "GetCommandLineA" () As Long

Public Declare Function lstrcpy Lib "kernel32" _
        Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long

Public Declare Function lstrlen Lib "kernel32" _
        Alias "lstrlenA" (ByVal lpString As Long) As Long


Public Sub AutoExec()

Dim strCommandLine As String

'get the command line using CmdLinetoString function and GetCommandLine API call
strCommandLine = CmdLinetoString(GetCommandLine())

If Len(strCommandLine) <= Len(Chr(34) & Application.Path & "\" & _
        "winword.exe" & Chr(34) & " ") Then
    Msgbox " Word was launched from its shortcut"
Else
    Msgbox " Word was launched by opening a file"
End If


End Sub


Public Function CmdLinetoString(ByVal lngPtr As Long) As String
    Dim strReturn As String
    Dim StringLength As Long
    'get the length of the string (not including the terminating null character)
    StringLength = lstrlen(lngPtr)
    'initialize our string so it has enough characters including the null character
    strReturn = String$(StringLength + 1, 0)
    'copy the string we have a pointer to into our new string
    lstrcpy strReturn, lngPtr
    'now strip off the null character at the end
    strReturn = Left$(strReturn, StringLength)
    'return the string
    CmdLinetoString = strReturn
End Function