- PR -

Windowsで作成されるショートカットについて

投稿者投稿内容
有末 清華
ベテラン
会議室デビュー日: 2006/10/09
投稿数: 52
お住まい・勤務地: 北海道
投稿日時: 2007-01-15 23:13
ランチャーを作っていてショートカットファイルがドラッグ&ドロップされたときに

http://santamartadotnet.hp.infoseek.co.jp/documents/dotnettips/tips043.html

を参考にしてショートカットファイルから情報を取得し、元のファイルに直接リンクをつなぐようにしています(起動用のデータはファイル・コマンドライン・etcです)

通常ショートカットならば上手に行くのですが Windows Live MessengerやSmart FTP Clientなどのショートカットの場合コマンドプロンプトに飛んでしまってうまくいきません。

これらのファイルのプロパティを見てみるとリンク先項目が灰色になっています。

これらのファイルのリンク元を取得する方法があれば教えていただけないでしょうか?またこれらのファイルであることが取得できれば、そのファイルにだけ違う処理を行うこともできるのでそれでもOKです。

よろしくおねがいします。
_________________
有末 清華
crazy(){for;;{you();}} - プログラマの覚書
有末 清華
ベテラン
会議室デビュー日: 2006/10/09
投稿数: 52
お住まい・勤務地: 北海道
投稿日時: 2007-01-20 22:14
コード:
[FileDrop]
File Type: Shortcut
Name: Windows Live Messenger.lnk
TargetPath: %systemroot%\Installer\{3444D6A6-450C-4B45-9DDD-8DB5D37AA120}\MsblIco.Exe
Argument: 
Working Directory: 
IconFile: %systemroot%\Installer\{3444D6A6-450C-4B45-9DDD-8DB5D37AA120}\MsblIco.Exe
IconIndex: 0
DisplayMode: Normal
Description: メンバーがオンラインかどうかを確認し、インスタント メッセージを送ることができます。
CurrentFile: メンバーがオンラインかどうかを確認し、インスタント メッセージを送ることができます。



のようなデータがドラッグ&ドロップしたときに渡されます。

この MsblIco.Exe とはいったいなんでしょうか?Googleで調べてみましたがどうも解説書が見当たらず困っています。

ここにデータが保存されているはずなんだからMsblIcon.exeから元ファイルのデータ等取得できると思うんですが・・・

情報の提供お願いします
_________________
有末 清華
crazy(){for;;{you();}} - プログラマの覚書
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-21 00:01
既定の電子メールやブラウザなどは、lnk ではなく、レジストリの値を見ていますよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-21 00:05
こんばんは。

引用:

有末 清華さんの書き込み (2007-01-20 22:14) より:
この MsblIco.Exe とはいったいなんでしょうか?



詳しく分かりませんが、例えば、
Exelのショートカットはelicons.exeへ
Wordのショートカットはwordicons.exeへ
という風になっているようです。

これまで私がVisualStudioInstallerで作成してきた
プログラムのショートカットもすべて、_4ae13d6c.exeなどの
一見すると実行ファイルのような見覚えのないファイルにリンクされていました。

で、そのファイルの中身を調べてみると、COMフォーマットでもPEフォーマットでもNEフォーマットでもなさそうです。
Windows(DOS)の実行ファイルは、先頭2バイトに"MZ"というシグネチャを持っていますが、
それがありません。
何らかのインストール情報を格納しているような気がします。

現象としては、下記の掲示板での内容と同じようですので
ご参考にしてみてはいかがでしょう。
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200610/06100006.txt


追記:
Shell API(IShellLinkインターフェイス)を使わずに、
LNKフォーマットを直接読み込みたい場合は、
下記のサイトへどうぞ。
Wotsit's Format



[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-01-21 00:20 ]
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-21 01:20
こんばんは。

ちょっと調査してみましたが…
もしかしてAdvertised Shortcutsというやつですかね。
なんだかIShellLink::Resolveで見つけられそうな気もするんですが。

Resolving Advertised Shortcuts with IShellLink::Resolve

Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-21 02:42
こんばんは。

ウソを書いたようなので訂正しておきます。
引用:

Exelのショートカットはelicons.exeへ
Wordのショートカットはwordicons.exeへ
という風になっているようです。
(中略)
で、そのファイルの中身を調べてみると、COMフォーマットでもPEフォーマットでもNEフォーマットでもなさそうです。
Windows(DOS)の実行ファイルは、先頭2バイトに"MZ"というシグネチャを持っていますが、
それがありません。
何らかのインストール情報を格納しているような気がします。



隠し属性のInstallerフォルダからファイルを抜き出してみたところ、
elicons.exeやwordicons.exeは実行ファイルでした。"MZ"がついていました。
ただ、アイコンリソースを格納しているだけのように見えます。


#なんとなくショートカットの情報取得に
 WMIのWin32_ShortcutFile辺りが使えないのかなぁと思ってみたりもしているのですが…

追記:
もしかして
IShellLinkDataListインターフェイスを使わないといけないのかな??
http://msdn2.microsoft.com/en-us/library/ms538065.aspx


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-01-21 03:49 ]
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2007-01-22 12:24
えっと、件のショートカットはすでに紹介されているように、MSIで作成されるアドバタイズショートカットです(リンク先がグレーのやつ)。

こちらのパスの解決は、MsiGetShortcutTarget といくつかのMSI APIを駆使して解決することになります。
C++のサンプルソースですが、MSIで作成されたショートカットファイルの解決 にあるので参考にしてください。
先にこのAPIで問い合わせてから、エラーなら、通常のショートカットとして扱うとやることで、中身を意識せずに処理することはできるかと思います。
#どこかでチェック方法を見たことがある気がするのですが覚えてない...orz

_________________
// とっちゃん(高萩 俊行)@わんくま同盟
// とっちゃん’Blog
// MS-MVP for Developer Tools - Visual C++
// WindowsInstallerの話題はhttp://www.freeml.com/msiまで
有末 清華
ベテラン
会議室デビュー日: 2006/10/09
投稿数: 52
お住まい・勤務地: 北海道
投稿日時: 2007-01-22 17:31
皆さんありがとうございました。無事データを取得することができました*^^

にしてもショートカットをこんな風に作成する利点っていったい…(汗。
_________________
有末 清華
crazy(){for;;{you();}} - プログラマの覚書

スキルアップ/キャリアアップ(JOB@IT)