ショートカットのリンク先を変更するには?

解決


abc  2007-07-04 19:49:15  No: 136893

VB6で開発しております。
OSはXpです。

実行ファイルのリンク先を変更するにはどうすればいいのでしょうか?
自分自身のリンク先を変更することは可能なのでしょうか?

ご教授お願いします。


まずは  2007-07-04 19:56:30  No: 136894

>ショートカットのリンク先
>実行ファイルのリンク先
>自分自身のリンク先

この3つの違いを明らかにしてください。

#「実行ファイルのリンク先」というのはそれ自体ピンときませんが・・


魔界の仮面弁士  2007-07-04 20:09:19  No: 136895

案1) ShellLinkObject オブジェクトの Path プロパティ
  http://msdn2.microsoft.com/en-us/library/ms630347.aspx

案2) IShellLink インターフェイスの SetPath メソッド
  http://msdn2.microsoft.com/en-us/library/ms632714.aspx

案3) WshShortcut / WshUrlShortcut オブジェクトの TargetPath プロパティ
  http://msdn.microsoft.com/library/ja/script56/html/wsProTargetPath.asp


とおりすが隣人  2007-07-04 20:23:42  No: 136896

>ショートカットのリンク先
 実行ファイル
>実行ファイルのリンク先
 ショートカットファイル
>自分自身のリンク先
 自分自身が、ショートカットファイルなのか、実行ファイルなのかで
 結果が異なる。

かな?


ABC  2007-07-04 20:43:50  No: 136897

自分自身が実行ファイルを意味しています。


ABC  2007-07-04 20:52:14  No: 136898

意味不明でしたらすいません。

ショートカットで作成されたファイルの
プロパティを見るとリンク先がありますよね。

それの値を変更するにはどうしたらいいのかと思いまして、
質問させていただきました。


魔界の仮面弁士  2007-07-04 20:59:40  No: 136899

>>> リンク先を変更することは可能なのでしょうか?
『何故、そのような事が必要なのか』を書いて頂けると助かります。
その方が、そちらの状況を理解しやすいので。

> 自分自身が実行ファイルを意味しています。
う〜ん。それだけの返信ですと、まずはさんの『3つの違い』に関する逆質問は、
>>ショートカットのリンク先
>>実行ファイルのリンク先
の 2 つに絞られることになりますが、肝心の
>>#「実行ファイルのリンク先」というのはそれ自体ピンときませんが・・
に対する答えにはなっていないような……。(^^;

で。もしも質問内容が、
  1. ショートカットファイル(TEST.lnk)のリンク先が
    自作アプリ(Project1.exe)を指していると仮定する。
  2. TEST.lnk から起動された Project1.exe アプリが、
    TEST.lnk のリンク先を、Project2.exe に差し替える。
という手順を意味しているのであれば、先の私の回答で実装可能です。

ただし Project1.exe 側は、exe のダブルクリックで起動されたのか、
それとも、TEST.lnk から起動されたのかどうかまでは判断できないので、
その部分は別途考慮せねばなりませんけれども。


ABC  2007-07-04 21:12:33  No: 136900

しようとしていることは、
アプリを起動したときに、そのアプリのコマンドライン引数を
消去するようにしたいのです。

そのために、ショートカットで生成されたファイルの
リンク先を変更したいと思ったのですが。


魔界の仮面弁士  2007-07-04 21:44:21  No: 136901

> アプリを起動したときに、そのアプリのコマンドライン引数を
> 消去するようにしたいのです。

# で、その理由は? (^^;

変更したいのは、コマンドライン引数だったのですね。
であれば、先の回答を下記のように読み替えてください。

> 案1) ShellLinkObject オブジェクトの Path プロパティ
→ ShellLinkObject オブジェクトの Arguments プロパティ

> 案2) IShellLink インターフェイスの SetPath メソッド
→ IShellLink インターフェイスの SetArguments メソッド


ABC  2007-07-05 01:52:35  No: 136902

> ShellLinkObject オブジェクトの Arguments プロパティ
>IShellLink インターフェイスの SetArguments メソッド

サンプルか何か残っているサイトはありませんか?
調べてみたのですが、よく分かりませんですた。


魔界の仮面弁士  2007-07-05 02:58:15  No: 136903

> サンプルか何か残っているサイトはありませんか?
案3 については、提示した URL に(VBS 版の)サンプルがあったかと。
それを VB6 に読み替えて実装してみてください。

案1 については、OS のバージョンによって参照設定するファイルが異なります。
WinXP だと、Shell32.dll ですね。

案2 については、OS バージョン等の環境依存度が最も少ない、スタンダードな方法ですが、
VB6 から直接呼び出せるようにはなっておらず、タイプライブラリの参照設定が必要となります。

ただ、そのために必要なライブラリは、標準では用意されていませんので、自作するか、
誰かが作ったもの(K.J.K.さんや Eduardo A. Morcillo さんの)を利用してください。

私の作ったものでも良ければ、下記をダウンロードして使ってみてください。
http://www.ocv.ne.jp/~oratorio/windev/vb/CreateShortcut.CAB

たとえば、"C:\test.lnk" ショートカットファイルを読み込み、
コマンドライン引数を変更する場合はこんな感じ。

Dim objLnk As IShellLinkA
Set objLnk = New ShellLink
Dim PF As IPersistFile
Set PF = objLnk
PF.Load "C:\test.lnk", 0
Dim args As String
args = String(512, 0)
objLnk.GetArguments args, 512
args = Left(args, InStr(1, args & vbNullChar, vbNullChar) - 1)
args = InputBox("新しいコマンドライン引数を入れてください", "タイトル", args)
objLnk.SetArguments args
PF.Save "C:\test.lnk", 0


ABC  2007-07-05 03:29:25  No: 136904

・やろうとしていることを今から言うのもなんなのですが、

「コマンドラインの引数にパスワード付きのデータをメールで添付して、
(実際に添付されるデータはショートカットを添付しようとしています。)
実行時にその引数をからにしようと考えているのです。」

ですので、実行されるパスの指定するのは困難です。

だから、そのショートカットファイルのリンク先を変更するのは
ちょっと難しい気がするのですが、できそうなのですかね?


魔界の仮面弁士  2007-07-05 04:25:22  No: 136905

> ・やろうとしていることを今から言うのもなんなのですが、
だからこそ、
>>> 『何故、そのような事が必要なのか』を書いて頂けると助かります。
と書いておいたのですけれどね……。(^_^;)

> 「コマンドラインの引数にパスワード付きのデータをメールで添付して、
> (実際に添付されるデータはショートカットを添付しようとしています。)
うぅむ。その手法だと、幾つかの問題があるような気がしますよ。

ショートカットファイル内には、exe へのパスも含める必要がありますよね。
exe の配置先は一定ではない(インストール時などに変更されることがある)ので、
そもそも、メールに添付するショートカットを事前に作ることさえできないのでは。
(Cドライブにインストールする人もいれば、Dドライブにインストールする人もいるでしょうし)

それに、ショートカットファイルの類は、セキュリティ対策ソフト等の制限で
直接扱えない(添付削除、添付非表示、展開時警告扱い等)ことが多くなっています。

もし、添付ファイルを開けたとしても、ショートカットの実行時には、添付ファイルが
一時ディレクトリ等にコピーされ、そこから実行される可能性が高いと思われます。
となると、ショートカットの内容を変更したとしても、それは一時ファイルに
過ぎませんから、受信したメールを開きなおせば、変更前の(パスワード付きの)
ショートカットから起動されることになりますよね。

苦労するわりには、あまり意味が無いのでは…。

その「パスワード」がどのような目的で提供されるのかはわかりませんが、
コマンドライン以外(ファイル/レジストリ/ユーザ入力/Webサービス等)から
取得されるよう、仕様を見直した方が良いかもしれません。


ABC  2007-07-05 18:10:37  No: 136906

・長々とご質問聞いていただきありがとうございました。

>>>> 『何故、そのような事が必要なのか』を書いて頂けると助かります。
>と書いておいたのですけれどね……。(^_^;)

↑については誠に申し訳ございません。

なぜ、このような処理をしたかったのかというと
ユーザーにこのような要求がきたためにお願いさせていただきました。

メールの添付ファイルから直接、思い通りの画面まで飛ぶ(HPのリンクのような)ことはできないだろうか?
といったような。
(一発目だけその画面に飛ぶようにさせて2回目以降はログインの画面から実行させるようなイメージです)

それで説明した処理を思いついたのですが、なかなか難しかったようですね・・・

ちょっと考え方から見直しますので、この問題は解決ということで締めたいと
思います。

魔界の仮面弁士さん長くご質問に付き合っていただきありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加