ショートカット作成について(SHAddToRecentDocsを使う方法)
Posted: 2006年9月19日(火) 17:53
実行ファイルのショートカットを作り、それをスタートアップフォルダに入れて、
PC起動時に、自動実行させたいと思っています。
そこで、ショートカット作成方法を調べていた所、
http://www.activebasic.com/forum/viewto ... 5%C3%A5%C8
http://www.activebasic.com/forum/viewto ... IShellLink
以上の2件が使えそうかなと思ったのですが、凄く難しい。
ショートカット1つ作るのに、こんなに大変とは思いませんでした。
で、コードの切れ端にも1件見つけてこれは簡単そうなので、これを採用しました。
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=29
この記事の中で動作が少し怪しい感じとありますが、それはショートカットが
作成されている最中に、GetFileAttributesでファイルの有無を確認しているので
うまく判別できないからだと思います。なので、
SHAddToRecentDocsのあとにSleepを入れる事で解決しました。
長くなりましたが、ここからが質問したい所です。
txtや、ini、bmp、zip等のショートカットは、希望通りに作れるようになったのですが
肝心のexeファイルは、SHAddToRecentDocsでショートカットが作成されません。
検索してみると、exeファイルでのサンプルを幾つか見たので、
SHAddToRecentDocsは、拡張子がexeだと使えない訳ではないと思うのですが。
これは一体どういうことなんでしょう。
お解りの方が居たら、是非、私に教えて下さい。宜しくお願いします。
OS XP home sp2
AB 4.13
以下コード(コードの切れ端とほぼ変りませんが)
PC起動時に、自動実行させたいと思っています。
そこで、ショートカット作成方法を調べていた所、
http://www.activebasic.com/forum/viewto ... 5%C3%A5%C8
http://www.activebasic.com/forum/viewto ... IShellLink
以上の2件が使えそうかなと思ったのですが、凄く難しい。
ショートカット1つ作るのに、こんなに大変とは思いませんでした。
で、コードの切れ端にも1件見つけてこれは簡単そうなので、これを採用しました。
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=29
この記事の中で動作が少し怪しい感じとありますが、それはショートカットが
作成されている最中に、GetFileAttributesでファイルの有無を確認しているので
うまく判別できないからだと思います。なので、
SHAddToRecentDocsのあとにSleepを入れる事で解決しました。
長くなりましたが、ここからが質問したい所です。
txtや、ini、bmp、zip等のショートカットは、希望通りに作れるようになったのですが
肝心のexeファイルは、SHAddToRecentDocsでショートカットが作成されません。
検索してみると、exeファイルでのサンプルを幾つか見たので、
SHAddToRecentDocsは、拡張子がexeだと使えない訳ではないと思うのですが。
これは一体どういうことなんでしょう。
お解りの方が居たら、是非、私に教えて下さい。宜しくお願いします。
OS XP home sp2
AB 4.13
以下コード(コードの切れ端とほぼ変りませんが)
コード: 全て選択
Sub CreateShortcut(FilePath As String,Shortcut As String)
Dim Recent As String
Dim NonPathFile As String
Dim i As Long
Dim pPathFile As String
If GetFileAttributes(FilePath)=-1 Then Exit Sub 'リンク先ファイルが存在しなければ終了
SHAddToRecentDocs(2, StrPtr(FilePath)) 'Recentにショートカットを作成
Recent = GetRecentPath() 'Recentのパスを取得
If Right$(Recent, 1) <> "\" Then Recent = Recent & "\" '\を付加
For i = Len(FilePath) To 1 Step -1 'パスを除いたファイル名部分のみ取り出す
If Asc(Mid$(FilePath, i)) = 92 Then
NonPathFile = Mid$(FilePath, i + 1)
Exit For
End If
Next i
Sleep(1000) 'ショ-トカット作成待ち時間
If GetFileAttributes(Recent & NonPathFile & ".lnk") <> -1 Then '拡張子表示有り設定
pPathFile = Recent & NonPathFile & ".lnk"
ElseIf GetFileAttributes(Recent & Left$(NonPathFile, InStr(1, NonPathFile, ".")) & "lnk") <> -1 Then '無し設定
pPathFile = Recent & Left$(NonPathFile, InStr(1, NonPathFile, "."))
End If
If pPathFile <> "" Then MoveFile(pPathFile, Shortcut) '移動
End Sub
Function GetRecentPath() As String
Dim lngPIDL As Long 'IDLへのポインタ
Dim strBuffer As String
strBuffer = ZeroString(MAX_PATH)
If SHGetSpecialFolderLocation(0, 8, lngPIDL) = 0 Then '特殊フォルダ IDL ポインタ取得
If SHGetPathFromIDList(lngPIDL, strBuffer) Then 'IDL へのポインタ使用 パス取得
GetRecentPath = MakeStr(strBuffer)
End If
CoTaskMemFree(lngPIDL)
End If
End Function