ショートカットを作成するには?(Ⅱ)

解決


ポント  2003-10-15 22:46:08  No: 79810  IP: [192.*.*.*]

「ショートカットを作成するには?」の質問では、ご親切なレスをいただきありがとうございました。大変お世話になっております、ポントです。

さるべーじさんの「猿頁」ページに習って、サンプルプログラム「TESTSLNK.VBG」のクラスと「Shelllnk.odl」を書き換えて実行してみました。正常にショートカットが作成されて、解決したと思ったのですが、ショートカットのアイコンを指定する欄に、アイコンのアドレスを入れても、実際に作成されたショートカットのアイコンが、再描画しても変わりませんでした。OSは、Windows 98 Second Editionなのですが、問題点はどこにあるのでしょうか? ご教授お願いします。

指定値はこのように指定しました。
Link Name:C:\WINDOWS\デスクトップ\Calc.lnk
Exe Name:C:\WINDOWS\Calc.exe
Working Directory:C:\WINDOWS\
Cmd Arguments:
Icon FileName:C:\WINDOWS\Calc.exe
Icon Index:1
Show Command:1
Start Menu Group:

作成されたショートカットのプロパティを開いて、アイコンの変更をクリックしてみたところ、指定したアイコンが欄に表示されており、ここで再びアイコンを指定したら、ショートカットのアイコンが更新されて指定したアイコンになりました。

編集 削除
魔界の仮面弁士  2003-10-16 22:15:35  No: 79811  IP: [192.*.*.*]

SHChangeNotifyを呼び出してみてください。

編集 削除
ポント  2003-10-17 02:39:50  No: 79812  IP: [192.*.*.*]

Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)
    Private Const SHCNE_CREATE As Long = 3
    Private Const SHCNF_PATH  As Long = 2
    Private Const SHCNE_ALLEVENTS As Long = &H7FFFFFFF

'---------------------------------------------------------------
Private Sub cmdCreateLink_Click()
'---------------------------------------------------------------
    Dim sLnk As cShellLink                              
'---------------------------------------------------------------
    Set sLnk = New cShellLink                           
    
    sLnk.CreateShellLink txtLinkName.Text, _
                         txtExeName.Text, _
                         txtWorkDir.Text, _
                         txtCmdArgs.Text, _
                         txtIconFile.Text, _
                    CLng(txtIconIndex.Text), _
                    CLng(txtShowCmd.Text)               
    
    Set sLnk = Nothing                                  
'---------------------------------------------------------------
    SHChangeNotify SHCNE_CREATE, SHCNF_PATH, txtLinkName.Text, ByVal &H0
    
End Sub
'---------------------------------------------------------------

関数が機能しているのかどうかもわかりませんでした。アイコンも変化しませんでした…。Byval をつけたりつけなかったり、wEventId 変えたりと色々試したのですが、力不足でした。「魔界の仮面弁士」さんのいう
>SHChangeNotifyを呼び出してみてください。
は、上のコードでは、実現できてませんよね。すみません…ご教授お願いします。

編集 削除
クリック  2003-10-17 22:16:54  No: 79813  IP: [192.*.*.*]

SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, 0, 0
では?

編集 削除
ポント  2003-10-18 01:06:52  No: 79814  IP: [192.*.*.*]

「クリック」さん、レスどうもありがとうございます。

> SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, 0, 0

で、確かに、デスクトップがリフレッシュされましたが、アイコンは変化しませんでした。
(SHChangeNotify 関数は、うまくいっているように思いました。)

パソコンを再起動しても、アイコンは変化してくれませんでした。

(でも、作成されたショートカットのプロパティを開いて、アイコンの変更をクリックしてみたところ、指定したアイコンが欄に表示されており、ここで再びアイコンを指定したら、ショートカットのアイコンが更新されて指定したアイコンになりましたので、ショートカットに確かにアイコンは登録されて入るのですが…。)

ご教授よろしくお願いします。

編集 削除
クリック  2003-10-18 13:43:30  No: 79815  IP: [192.*.*.*]

> 指定値はこのように指定しました。
>
> Icon FileName:C:\WINDOWS\Calc.exe
> Icon Index:1

Icon Index  は、0 から始まる整数であり、
Calc.exe に Icon Index = 1 は存在しないと思いますが、
これはタイプミスですか?

編集 削除
ポント  2003-10-18 14:06:31  No: 79816  IP: [192.*.*.*]

解決しました。ありがとうございました。

何度も実験していたところ、指定値の「Icon Index」を「0」に設定すると、アイコンが正常に表示されました…。自分の指定値違いでした。初歩的なことで質問してしまい、申し訳ございませんでした。

レスしていただいた方々に感謝しています。ありがとうございました。

編集 削除
ポント  2003-10-18 14:10:39  No: 79817  IP: [192.*.*.*]

「クリック」さん、はい、自分の間違いです。無知でお恥ずかしい限りです。すみませんでした。

(この「Icon Index」の意味がよく分からず、既定値の「1」のままで試行していました。)

編集 削除