(AHK)(AutoHotkey)(現在選択中のデスクトップアイコンを特定する 編)
簡単に説明すれば デスクトップの リストビュー(SysListView32)の ハンドルを取得して
それを使って ControlGetで 現在選択中のアイコンのファイル名を 取得します
複数個選択していると その分 改行区切りで列挙されます
これはあくまでも サンプルなので ヘンテコな ホットキーに仕込んでますが
適当に抜き出して使ってくださいね 笑)
取得できるのは ファイル名のみなので デスクトップまでのパスを付加してあげる必要がありますが
共通の場合と 現在のユーザの場合と 2パターンありうるので
まずは A_Desktop (現在のユーザの場合)に足して ファイルが存在するか確認して
無かった場合は A_DesktopCommon (共通の場合)に 足してファイルが存在するかを 確認する必要があります
またそれに加えて *.lnkファイルのような 拡張子が表示さない物は
やはり 拡張子が無い状態で取得されるので、 上のチェックに加えて
「.lnk」などと付加してみてからファイルが存在するかを調べる必要もありますね
それを使って ControlGetで 現在選択中のアイコンのファイル名を 取得します
<^<+MButton:: { ; ↓のようなやり方でも おそらく上手く行くはずですが ; ControlGet, SelFN, List, Selected, SysListView321, ahk_class Progman ; ↑の例と比べて 、 デスクトップのリストビューを確実に特定している所が決定的に違います ; デスクトップのSysListView32 に確実に辿りつくには ; Progman(親) → SHELLDLL_DefView(子) → SysListView32(子)とウインドウを辿って行く必要があります ; この関係は SPY++ や Winspector( http://www.windows-spy.com/ ) 等で確認できます hBuf := DllCall("user32\FindWindow", "Str", "Progman", "UInt", 0, "UInt") hBuf := DllCall("user32\FindWindowEx", "UInt", hBuf, "UInt", 0, "Str", "SHELLDLL_DefView", "UInt", 0, "UInt") hBuf := DllCall("user32\FindWindowEx", "UInt", hBuf, "UInt", 0, "Str", "SysListView32", "UInt", 0, "UInt") ControlGet, SelFN, List, Selected, , ahk_id %hBuf% MsgBox,% SelFN Return }今回 は 左Ctrl+左Shift+マウスの真ん中ボタン を押すと 選択中のファイル名を表示します
複数個選択していると その分 改行区切りで列挙されます
これはあくまでも サンプルなので ヘンテコな ホットキーに仕込んでますが
適当に抜き出して使ってくださいね 笑)
取得できるのは ファイル名のみなので デスクトップまでのパスを付加してあげる必要がありますが
共通の場合と 現在のユーザの場合と 2パターンありうるので
まずは A_Desktop (現在のユーザの場合)に足して ファイルが存在するか確認して
無かった場合は A_DesktopCommon (共通の場合)に 足してファイルが存在するかを 確認する必要があります
またそれに加えて *.lnkファイルのような 拡張子が表示さない物は
やはり 拡張子が無い状態で取得されるので、 上のチェックに加えて
「.lnk」などと付加してみてからファイルが存在するかを調べる必要もありますね