サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

Launchy を利用して素早く新規ファイルを作成したい【Windows】【VBScript】

はじめに

 macOS には Spotlight がありますが、Windows には無いので代わりに Launchy を使っています。先日作ったものWindows 用にも作ってみました。

 現在、Windows が手元にないので動作未検証です。そのうち検証します。

【追記(2022/06/26):エクスプローラーの「最前面ウィンドウ」が取得できませんでした。ひとまず断念。折を見てまた挑戦します】

VBScript でできるか

仕様

  1. 新規ファイルを作成する場所は、エクスプローラーで今開いている場所。なければデスクトップ。
  2. ファイル名は、デフォルトで日付文字列 + 拡張子。
  3. ファイル作成後は、すぐにファイル名の変更ができるように、エクスプローラーで選択状態にする。

インストール

 以下のソースコードを拡張子 ".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" もほとんど同じコードでいけるかと思います。