2018年5月5日土曜日

WhsShellを使ってみる

カレントディレクトリを指定して外部実行ファイルを実行したくなった。
WhsShellオブジェクトで可能ぽい。
ついでにちょっと便利そうな、SpecialFolders一覧を出してみる。
そして、肩慣らしに、実行時バインディングで書いてみる。


Option Compare Database
Option Explicit

Public Sub WshShell_Test()
  Dim WshShell As Object 'WshShell Object
  '実行する実行ファイル or 拡張子に関連付けされていればそのプログラムが開く。
  Dim Wsh_exe As String  
  Dim Wsh_arg As String  '引数用
  
  Set WshShell = CreateObject("WScript.Shell")
  With WshShell
    '    SpecialFolders の表示
    Debug.Print "AllUsersDesktop:" & .SpecialFolders("AllUsersDesktop")
    Debug.Print "AllUsersStartMenu:" & .SpecialFolders("AllUsersStartMenu")
    Debug.Print "AllUsersPrograms:" & .SpecialFolders("AllUsersPrograms")
    Debug.Print "AllUsersStartup:" & .SpecialFolders("AllUsersStartup")
    Debug.Print "Desktop:" & .SpecialFolders("Desktop")
    Debug.Print "Favorites:" & .SpecialFolders("Favorites")
    Debug.Print "Fonts:" & .SpecialFolders("Fonts")
    Debug.Print "MyDocuments:" & .SpecialFolders("MyDocuments")
    Debug.Print "NetHood:" & .SpecialFolders("NetHood")
    Debug.Print "PrintHood:" & .SpecialFolders("PrintHood")
    Debug.Print "Programs:" & .SpecialFolders("Programs")
    Debug.Print "Recent:" & .SpecialFolders("Recent")
    Debug.Print "SendTo:" & .SpecialFolders("SendTo")
    Debug.Print "StartMenu:" & .SpecialFolders("StartMenu")
    Debug.Print "Startup:" & .SpecialFolders("Startup")
    Debug.Print "Templates:" & .SpecialFolders("Templates")
  End With
  WshShell.currentdirectory = "c:\"  'カレントディレクトリを設定してみる
  '実行ファイルは、cmd.exe。環境変数%ComSpec%からとってきてみる
  Wsh_exe = Environ("ComSpec")
  '起動オプション。 コマンド"set"を実行→ウィンドウを閉じない
  Wsh_arg = " /K set"

  'ウィンドウをふつーに開いて、終了を待たない。
  WshShell.Run Wsh_exe & Wsh_arg, 1, False
End Sub

こんな感じ。( ゚-゚)~゚ ※Wsh_arg = "(こっそりスペース)/K set"
SpecialFoldersや環境変数の他、コマンドプロンプトで、
カレントディレクトリが指定したディレクトリに移動しているコトも確認してください。

…SpecialFoldersは、DesctopとMyDocumentsしか使わなそう。
てゆかそれならEnviron(”USERPROFILE”) & "\Desctop"の方が手っ取り早いか( ゚-゚)~゚
いいもの見つけたと思ったのにゴミだったorz

なんかさ、.Runの引数の説明頑張ってくれてる人や、ADODBの記事みたりしてる中で、

ここの引数は文字列型なので、”(ダブルクォーテーション)でくくらなきゃいけない!
とか、"でエスケープするので”””としなきゃいけない!!
とか、chr(34)とかキャラクターコードで!!!
とか、'(シングルクォーテーション)と組み合わせて!!!!

とか、いろいろ気合入ってる方々がいました。
んなもん、ふつーにString型変数にいれりゃーいいじゃん( ゚-゚)~゚と…
ちなみにMSDNでもこうやって変数に入れてRunさせてました。

まぁ例えば、ダブルクオーテーション付きcsvのように、
ダブルクオーテーション自体を使いたい場合は、
ふつーに
Private Const WQ = """"
とか
Dim WQ as String
WQ = """"
とかしといて文字列連結すりゃ、そーそーややこしいコトにはならないと思うのだが。


0 件のコメント:

コメントを投稿