HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0522
wl64ビット環境でProgramFilesへのショートカットリンク先取得4解決


wl

リンク

2021/5/22(Sat) 11:13:39|NO.92910

64bit win10環境にて、
C:\Program Files\***へリンクするショートカットファイルのリンク先を取得したいです。

ShellLinkやWSHShellなどのCOMオブジェクトを使ってリンク先の取得を試みたのですが、
Program Filesの部分がProgram Files(x86)と置き換わってしまいます。
正しいパスを取得するにはどうすればいいでしょうか。

ShellLinkの方は、
IPersistFile Loadメソッド
IShellLink GetPathメソッド

WSHの方は、
WshShell CreateShortcutメソッド
WshShortcut TargetPathプロパティ
を使いました。



この記事に返信する


TOMATO

リンク

2021/5/22(Sat) 14:46:36|NO.92915

WOW64のリダイレクトを無効にすれば動くんじゃないかな?

参考:
https://codetter.com/?p=734



wl

リンク

2021/5/22(Sat) 20:35:24|NO.92917

回答ありがとうございます。返信が遅くなってすみません。

頂いたサンプルにリンク先取得のコードを挟んでみたのですが、
WSHShellを使用した物とShellLinkを使用した物と、両方とも、
依然として(x86)へのパスが表示されてしまいます。

さらに、system32内へのショートカットを作成して試してみたところ、
wshでもshelllinkでも、取得されるパスがsyswow64に置き換わることはありませんでした。
(サンプルを実行した際、exist命令ではリダイレクトされている様でした。)

以下、試したコード(WSHShell)

#uselib "kernel32" #func Wow64DisableWow64FsRedirection "Wow64DisableWow64FsRedirection" var #func Wow64RevertWow64FsRedirection "Wow64RevertWow64FsRedirection" var // WOW64のリダイレクトを一時的に無効に OldValue = 0 Wow64DisableWow64FsRedirection OldValue path = dir_desktop+"\\test.lnk" //test.lnkはprogram files内にリンクしている newcom wshShell,"WScript.Shell" sc = wshShell("CreateShortcut", path) mes sc("TargetPath") delcom sc delcom wshShell // 処理が終わったらすぐに戻す Wow64RevertWow64FsRedirection OldValue



TOMATO

リンク

2021/5/22(Sat) 21:48:44|NO.92919

まじか…
ちょっと調べたら、
https://support.microsoft.com/ja-jp/topic/ishelllink-getpath-%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E3%83%AA%E3%83%B3%E3%82%AF%E5%85%88%E3%81%AE%E3%83%91%E3%82%B9%E3%82%92%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%8C%E3%81%82%E3%82%8B-6049768d-b3f2-0338-f378-97f5043d0810


32 ビット アプリケーションから、C:\Program Files ディレクトリ以下に配置される 64 ビット アプリケーションのリンク先のパスを取得することはできません。

だそうです。
HSPの64bit版ランタイムを使うしかない気がします。



wl

リンク

2021/5/22(Sat) 23:20:45|NO.92921

仕様だったのですね・・・
調べて頂いて、どうもありがとうございます。スッキリしました。

64bit版ランタイムを試したところ、正常に取得できました。
これはまだβ版とのことなので、32bit版での力業など、いろいろ模索してみます。

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



ONION software Copyright 1997-2023(c) All rights reserved.