はじめに
macOS には Spotlight がありますが、Windows には無いので代わりに Launchy を使っています。先日作ったものを Windows 用にも作ってみました。
現在、Windows が手元にないので動作未検証です。そのうち検証します。
【追記(2022/06/26):エクスプローラーの「最前面ウィンドウ」が取得できませんでした。ひとまず断念。折を見てまた挑戦します】
VBScript でできるか
仕様
- 新規ファイルを作成する場所は、エクスプローラーで今開いている場所。なければデスクトップ。
- ファイル名は、デフォルトで日付文字列 + 拡張子。
- ファイル作成後は、すぐにファイル名の変更ができるように、エクスプローラーで選択状態にする。
インストール
以下のソースコードを拡張子 ".vbs" で保存し、Launchy で開けるようにしておきます。
ファイル名は "nm新規マークダウン書類newmarkdown.vbs" のような名前で良いでしょう。
Option Explicit Private Const EXTENSION = ".md" ' --- ' エクスプローラーで開いているフォルダのパスを取得する。 ' 取得できなければ、デスクトップフォルダのパスを取得する。 ' 参考: ' https://r2z.hateblo.jp/entry/20100731/p1 ' https://www.ka-net.org/blog/?p=3782 ' --- Dim shell, fso Set shell = CreateObject("Shell.Application") Set fso = CreateObject("Scripting.FileSystemObject") Dim path path = "" Do Dim wnd For Each wnd In shell.Windows If InStr(TypeName(wnd.document), "IShellFolderViewDual") >= 0 Then ' エスクプローラーウィンドウならパスを取得する path = wnd.Document.Folder.Self.Path Exit For End If Next Exit Do Loop If path = "" Then ' ウィンドウを開いていなければ、デスクトップのパスを取得する Private Const SSFC_DESKTOP_DIRECTORY = 16 path = shell.Namespace(SSFC_DESKTOP_DIRECTORY).Self.Path End If Set shell = Nothing ' --- ' 日付文字列のファイル名を作成する ' --- Dim fileName fileName = Year(Now) & "-" & _ Right("00" & Month(Now), 2) & "-" & _ Right("00" & Day(Now), 2) Dim fullName fullName = path & "\" & fileName & EXTENSION ' --- ' フルパスを作成する ' --- Dim seq seq = 1 Do If fso.FileExists(fullName) Then fullName = path & "\" & fileName & "-" & seq & EXTENSION seq = seq + 1 Else Exit Do End If Loop ' --- ' ファイルを作成する ' --- Dim fileH Private Const FOR_WRITING = 2 Private Const CREATE_FILE = True Set fileH = fso.OpenTextFile(fullName, FOR_WRITING, CREATE_FILE) fileH.Close Set fileH = Nothing Set fso = Nothing ' --- ' エクスプローラーで選択状態にする ' --- Dim wsh Set wsh = CreateObject("WScript.Shell") wsh.Run "explorer.exe /select, """ & fullName & """" Set wsh = Nothing
さいごに
Launchy には ".lnk" ファイルをカタログするようにしておいて、ショートカットのプロパティで拡張子を起動オプションにすれば、".txt" もほとんど同じコードでいけるかと思います。