UWSCでショートカットをいじる

公式掲示板で、「ファイルを開く」ダイアログのショートカット動作が変わった、という質問を見た。
ということで、解決方法を考えてみた。
(本当にUWSCが原因で変わったのかは知らないけど)
あと、.lnkファイルについて調べてみた。(UWSCというより、WSHだけど)



まずは回答

以下の面倒なことをする必要があるのは、「ファイルを開く」ダイアログ内のショートカットを右クリック「開く」で、移動出来なかった場合が良いと思われます。

  1. 以下のスクリプトを、ショートカットのあるフォルダに作成する
  2. UWSCの読み込みボタンを押下する
  3. 「ファイルを開く」ダイアログ内の本スクリプトを右クリックし「開く」で実行する
  4. ショートカットの一覧が出るので、選ぶ
  5. 切り替わる、、、はず
OPTION EXPLICIT

HASHTBL list

// ショートカットの一覧を作る
DIM num = GETDIR(".", "*.lnk") - 1, i
FOR i = 0 TO num
	//PRINT GETDIR_FILES[i]
	list[i] = GETDIR_FILES[i]
NEXT

// ショートカットを選択
i = POPUPMENU(list, G_MOUSE_X, G_MOUSE_Y)
DIM dir = Link.Get(list[i])
IF COPY(dir, LENGTH(dir)) <> "\" THEN dir = dir + "\"

// ファイルを開くダイアログに送る
DIM wid = GETID("ファイルを開く","#32770")
SENDSTR(wid, dir, 1, TRUE)
CLKITEM(wid, "開く")
SENDSTR(wid, "", 1, TRUE)	// 空欄にするのが優しさかもしれない


MODULE Link

	DIM _wsh

	PROCEDURE Link
		_wsh = CREATEOLEOBJ("WScript.Shell")
	FEND

	PROCEDURE Create(path, target)
		DIM lnk = _wsh.CreateShortcut(path)
		lnk.TargetPath = target
		lnk.Save
	FEND

	FUNCTION Get(path)
		DIM lnk = _wsh.CreateShortcut(path)
		RESULT = lnk.TargetPath
	FEND

	PROCEDURE Delete(path)
		DIM fso = CREATEOLEOBJ("Scripting.FileSystemObject")
		fso.DeleteFile(path)
	FEND

ENDMODULE

ショートカットについて

WScript.Shellを使うと、ショートカットが作成できるようです。
スクリプトのLinkモジュールは、ショートカット操作用に作りました。
ま、シンプルなので、説明不要かと思います。
作成とリンク先取得と削除(ただのファイル削除)ができます。


WSH操作なので、COMが扱える人はみな、ショートカットがいじれますね。
WSHでもVBAでもPowershellでも、そしてUWSCでも。