Windows Script Compornents は、簡単に言えば「VBScript で作成する COM」なんですが、 その言葉からは「容易」と受け取られると思いますが、それほど容易でも無いので はやらなかったんでは無いかと思ってしまいます。 かなり昔、ウィザードのアプリケーションを Microsoft からダウンロードできたのですが 日本語版が無く、熟練した者からすれば殆ど価値無い内容でした。 たしか、当時マニュアルは CHM で日本語版がダウンロードできたのですが、 ↓に日本語ページありますし。 ※ Microsoft のドキュメントはこちら とは言うものの、限定された条件下では、関係者を幸せに導いてくれる可能性もあるので、 当時のウィザードと同程度の利用価値のある「雛型作成スクリプト」を作ってみました。 ブラウザでダウンロード このスクリプトはカレントに4つのファイルを作成しますので、 必ずダウンロードしてから実行して下さい。 1) script_com_年月日時間.wsc 2) install_com_年月日時間.wsf 3) uninstall_com_年月日時間.wsf 4) test_com_年月日時間.vbs ダウンロードして、エクスプローラからダブルクリック![]() コマンドプロンプトが表示されて、pause 状態なりますが コマンドプロンプトは閉じて下さい。 上記画像のような状態になりますが、WSC のインストールはされていません。 script_com_年月日時間.wsc が本体なので、このファイルを変更して 自分専用の WSC を作成してインストールします。 ただ、既に動くようになっていますので、そのままインストールしても 動作しますし、インストールしてから変更しても、「スクリプト」なんで 全然問題ありません 一つだけ注意するのが、登録される「プログラムID」に、このままでは 年月日時間 が付加されたままだという事です 必要ならば、まず 「プログラムID」の変更を行う以下のソースコードが、WSC の先頭の内容ですが、先頭部分の registration にある progid="Lbox.COM20081108173655" が「プログラムID」で、年月日時間 が付加されてしまっています。 これは、システム上1つしか無いものにしなければならないので、 そのままでも使えるようにこうしてあります。 自由に変更して、自分用の「プログラムID」にする事ができます。 例えば Lbox.COM20081108173655 => MyCOM.tool と変更する事を前提に話をすすめて行きます 01. <?xml version= "1.0" encoding= "shift_jis" ?> 02. <component> 03. 04. <registration 05. description= "WSC Skeleton" 06. progid= "Lbox.COM20081108173655" 07. version= "1.00" 08. classid= "{704E3422-E729-43EA-B133-A7682355DFFA}" 09. > 10. </registration> ↓以下のように変更
01. <?xml version= "1.0" encoding= "shift_jis" ?> 02. <component> 03. 04. <registration 05. description= "WSC Skeleton" 06. progid= "MyCOM.tool" 07. version= "1.00" 08. classid= "{704E3422-E729-43EA-B133-A7682355DFFA}" 09. > 10. </registration> classid は、元々ユニークになるように作成されています。 これは、雛型を作成するたびに変わりますが、変更しないで下さい インストール方法インストーラも作成されていますが、「プログラムID」を変更したので そのままでは使えません。以前のプログラム ID を変更して実行する必要 がありますが、これは運用上必要になった場合のサンプルで、 今インストールする場合はもっと簡単な方法があります ![]() 見たままですが、登録と登録解除ができるようになっています。 これは、regsvr32.exe で登録(登録解除)するのと同じ効果があります ソースの中の「プログラムID」できちんと登録してくれますし、 簡単に登録解除可能なので、登録して下さい ![]() ↑のようなメッセージボックスが出て登録されます ( 結局 regsvr32.exe のメッセージですが ) 実行テストtest_com_年月日時間.vbs をエディタで変更してテストします。 ( プログラムID の変更 ) 1. Set obj = CreateObject( "Lbox.COM20081108173655" ) 2. obj.ScriptDir = WScript.ScriptFullName 3. obj.SelectDir( "選択" ) ↓以下のように変更
1. Set obj = CreateObject( "MyCOM.tool" ) 2. obj.ScriptDir = WScript.ScriptFullName 3. obj.SelectDir( "選択" ) test_com_年月日時間.vbs をエクスプローラからダブルクリックすると、 以下のようなウインドウが表示されるはずです ※ 動かない場合は、script_com_年月日時間.wsc の内容が正しく変更されているか確認 ![]() システムの登録場所は、厳密には2箇所ですが、プログラムIDは レジストリエディタで確認できます ( もう一つは CLSID ) ![]() インストーラとアンインストーラの変更インストーラは、プログラムID とソース名を変更する必要があります ( 以前のプログラムIDの削除と再登録を行っています ) アンインストーラはプログラムID の変更が必要です インストーラのソースコード
01. <JOB> 02. <SCRIPT 03. language= "VBScript" 04. src= "http://homepage2.nifty.com/lightbox/laylaClass.vbs" > 05. </SCRIPT> 06. 07. <SCRIPT language=VBScript> 08. ' *********************************************************** 09. ' 処理開始 10. ' *********************************************************** 11. Call laylaFunctionTarget( "http://homepage2.nifty.com/lightbox/" ) 12. Call laylaLoadFunction( "baseFunction.vbs" ) 13. 14. Crun 15. GetWshShell 16. 17. on error resume next 18. strValue = WshShell.RegRead( "HKCR\Lbox.COM20081108173655\CLSID\" ) 19. if Err.Number = 0 then 20. ' 現在の情報でアンインストール 21. strValue = "HKCR\CLSID\" & strValue 22. strValue = strValue & "\ScriptletURL\" 23. strValue = WshShell.RegRead(strValue) 24. strValue = "regsvr32.exe scrobj.dll /s /u /n /i:" "" & strValue & "" "" 25. Call RunSync( strValue ) 26. end if 27. on error goto 0 28. 29. ' インストール 30. strValue = "regsvr32.exe scrobj.dll /n /i:file://" "" & ScriptDir & "\script_com_20081108173655.wsc" & "" "" 31. Call RunSync( strValue ) 32. 33. Wscript.Echo "インストールが終了しました" 34. 35. </SCRIPT> 36. 37. </JOB> WSC 雛型の内容プロパティやメソッドの実装サンプルとして以下のような機能があります 1) スクリプトディレクトリの記憶( 内部変数の使用 ) 2) クリップボードの読み書き( プロパティ ) 3) MDB 作成( メソッド ) 4) ファイルを開くダイアログ( Windows2000 でも動きます ) ※ XP 以降だともっといいのがあります 5) ディレクトリ選択( テストスクリプトで実行する内容 ) 6) ファイルを表示しながらディレクトリ選択 001. <?xml version= "1.0" encoding= "shift_jis" ?> 002. <component> 003. 004. <registration 005. description= "WSC Skeleton" 006. progid= "MyCOM.tool" 007. version= "1.00" 008. classid= "{704E3422-E729-43EA-B133-A7682355DFFA}" 009. > 010. </registration> 011. 012. <public> 013. 014. <comment> 015. ************************************************************ 016. * プロパティ 017. ************************************************************ 018. </comment> 019. <property name= "Clipboard" > 020. <get/> 021. <put/> 022. </property> 023. <property name= "ScriptDir" > 024. <get/> 025. <put/> 026. </property> 027. <property name= "LastError" > 028. <get/> 029. </property> 030. 031. <comment> 032. ************************************************************ 033. * メソッド 034. ************************************************************ 035. </comment> 036. <method name= "CreateMdb" > 037. <PARAMETER name= "Path" /> 038. <PARAMETER name= "bDelete" /> 039. </method> 040. <method name= "OpenFileName" > 041. </method> 042. <method name= "SelectDir" > 043. <PARAMETER name= "strTitle" /> 044. </method> 045. <method name= "SelectDirWidthFile" > 046. <PARAMETER name= "strTitle" /> 047. </method> 048. 049. </public> 050. 051. <script language= "VBScript" > 052. <![CDATA[ 053. 054. Dim ScriptDir 055. Dim ErrorMessage 056. 057. ' ************************************************ 058. ' プロパティ処理の実装 059. ' ************************************************ 060. ' -------------------------------------- 061. ' クリップボード 062. ' -------------------------------------- 063. function get_Clipboard() 064. 065. Dim objIE 066. 067. Set objIE = CreateObject( "InternetExplorer.Application" ) 068. objIE.Navigate( "about:blank" ) 069. get_Clipboard = objIE.document.parentwindow.clipboardData.GetData( "Text" ) 070. objIE.Quit 071. Set objIE = Nothing 072. 073. end function 074. function put_Clipboard(srt) 075. 076. Dim objIE 077. 078. Set objIE = CreateObject( "InternetExplorer.Application" ) 079. objIE.Navigate( "about:blank" ) 080. objIE.document.parentwindow.clipboardData.SetData "Text" , srt 081. objIE.Quit 082. Set objIE = Nothing 083. 084. end function 085. ' -------------------------------------- 086. ' スクリプトディレクトリの保存 087. ' ScriptDir = WScript.ScriptFullName 088. ' を必ず実行してから ScriptDir プロパティ 089. ' を使用する 090. ' -------------------------------------- 091. function get_ScriptDir() 092. 093. get_ScriptDir = ScriptDir 094. 095. end function 096. function put_ScriptDir(str) 097. 098. Dim Fs,obj 099. 100. Set Fs = CreateObject( "Scripting.FileSystemObject" ) 101. 102. ScriptDir = str 103. Set obj = Fs.GetFile( ScriptDir ) 104. Set obj = obj.ParentFolder 105. ScriptDir = obj.Path 106. 107. Set Fs = Nothing 108. 109. end function 110. ' -------------------------------------- 111. ' 直近に発生したエラーメッセージ 112. ' -------------------------------------- 113. function get_LastError() 114. 115. get_LastError = ErrorMessage 116. 117. end function 118. 119. ' ************************************************ 120. ' MDB 作成( bDelete が True で事前削除 ) 121. ' ************************************************ 122. function CreateMdb( Path, bDelete ) 123. 124. Dim Adox,Fs 125. 126. Set Adox = CreateObject( "ADOX.Catalog" ) 127. Set Fs = CreateObject( "Scripting.FileSystemObject" ) 128. 129. if Fs.FileExists( Path ) then 130. if bDelete then 131. on error resume next 132. Call Fs.DeleteFile( Path ) 133. if Err.Number <> 0 then 134. CreateMdb = Err.Description 135. Exit Function 136. end if 137. on error goto 0 138. end if 139. end if 140. 141. on error resume next 142. Adox.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 143. "Data Source=" & Path & ";" 144. if Err.Number <> 0 then 145. CreateMdb = Err.Description 146. Exit Function 147. end if 148. on error goto 0 149. 150. Set Adox.ActiveConnection = Nothing 151. Set Adox = Nothing 152. Set Fs = Nothing 153. 154. end function 155. 156. ' ********************************************************** 157. ' ファイルを開くダイアログ 158. ' ********************************************************** 159. function OpenFileName( ) 160. 161. Dim objIE,WshShell 162. 163. Set objIE = CreateObject( "InternetExplorer.Application" ) 164. objIE.Navigate( "about:blank" ) 165. objIE.document.getElementsByTagName( "BODY" )(0).innerHTML = _ 166. "<INPUT id=FilePath type=file>" 167. 168. objIE.Visible = True 169. Set WshShell = CreateObject( "WScript.Shell" ) 170. WshShell.AppActivate "about:blank" 171. Set WshShell = Nothing 172. objIE.Visible = False 173. 174. objIE.document.getElementById( "FilePath" ).click 175. if objIE.document.getElementById( "FilePath" ).value = "" then 176. OpenFileName = "" 177. objIE.Quit 178. Set objIE = Nothing 179. Exit Function 180. end if 181. 182. OpenFileName = objIE.document.getElementById( "FilePath" ).value 183. 184. objIE.Quit 185. Set objIE = Nothing 186. 187. End Function 188. 189. ' ********************************************************** 190. ' フォルダ選択(1) 191. ' ********************************************************** 192. Function SelectDir( strTitle ) 193. 194. Dim Shell,obj 195. 196. Set Shell = CreateObject( "Shell.Application" ) 197. 198. Set obj = Shell.BrowseForFolder( 0, strTitle, 11 + &h40, 0 ) 199. if obj is nothing then 200. Set Shell = Nothing 201. SelectDir = "" 202. Exit Function 203. end if 204. if not obj.Self.IsFileSystem then 205. Set Shell = Nothing 206. ErrorMessage = "ファイルシステムではありません" 207. SelectDir = "" 208. Exit Function 209. end if 210. 211. SelectDir = obj.Self.Path 212. 213. Set Shell = Nothing 214. 215. End Function 216. 217. ' ********************************************************** 218. ' フォルダ選択(2) : ファイルも表示される 219. ' ********************************************************** 220. Function SelectDirWidthFile( strTitle ) 221. 222. Dim Shell,obj 223. 224. Set Shell = CreateObject( "Shell.Application" ) 225. 226. on error resume next 227. Set obj = Shell.BrowseForFolder( 0, strTitle, 11 + &h4000 + &h40, 0 ) 228. if Err.Number <> 0 then 229. Set Shell = Nothing 230. ErrorMessage = "ファイルが選択されました" 231. SelectDirAndFile = "" 232. Exit Function 233. end if 234. on error goto 0 235. if obj is nothing then 236. Set Shell = Nothing 237. SelectDirAndFile = "" 238. Exit Function 239. end if 240. if not obj.Self.IsFileSystem then 241. Set Shell = Nothing 242. ErrorMessage = "ファイルシステムではありません" 243. SelectDirAndFile = "" 244. Exit Function 245. end if 246. 247. SelectDirAndFile = obj.Self.Path 248. 249. Set Shell = Nothing 250. 251. End Function 252. 253. ]]> 254. </script> 255. 256. </component> |