調べ物:HTA(HTML Applications) [プログラミング学習]
WSHでユーザインタフェースを使いたいと思った。
やりたいのはWSHで現在実行中の処理をリアルタイムで表示すること。WSHのダイアログボックスで、都度都度ユーザ入力を必要とする方法は望まない。
HTAにスクリプトを組み込んで、HTML上に文字列を追記したらいけるのか、試してみる価値はありそうだ。
「HTA - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=HTA&aq=f&aqi=g10&aql=&oq=&gs_rfai=
「HTML Application - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=HTML+Application&aq=f&aqi=g3g-m4&aql=&oq=&gs_rfai=
「HTML Application VBScript - Google 検索」
http://www.google.co.jp/search?hl=ja&q=HTML+Application+VBScript&aq=f&aqi=&aql=&oq=&gs_rfai=
「Tips - ステップアップWSH」
http://www1.u-netsurf.ne.jp/~tomo_c/tips/R23Lev11.html
「HTML Application」
http://www4.airnet.ne.jp/hasikun/webtech/hta/hta.html
「第3回 HTAでコマンドライン・プログラムをビジュアルにする - かんたん10分プログラミング:ITpro」
http://itpro.nikkeibp.co.jp/article/COLUMN/20060116/227312/
「HTA - FSWikiLite」
http://tuka.s12.xrea.com/index.xcg?p=HTA
やりたいのはWSHで現在実行中の処理をリアルタイムで表示すること。WSHのダイアログボックスで、都度都度ユーザ入力を必要とする方法は望まない。
HTAにスクリプトを組み込んで、HTML上に文字列を追記したらいけるのか、試してみる価値はありそうだ。
「HTA - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=HTA&aq=f&aqi=g10&aql=&oq=&gs_rfai=
「HTML Application - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=HTML+Application&aq=f&aqi=g3g-m4&aql=&oq=&gs_rfai=
「HTML Application VBScript - Google 検索」
http://www.google.co.jp/search?hl=ja&q=HTML+Application+VBScript&aq=f&aqi=&aql=&oq=&gs_rfai=
「Tips - ステップアップWSH」
http://www1.u-netsurf.ne.jp/~tomo_c/tips/R23Lev11.html
「HTML Application」
http://www4.airnet.ne.jp/hasikun/webtech/hta/hta.html
「第3回 HTAでコマンドライン・プログラムをビジュアルにする - かんたん10分プログラミング:ITpro」
http://itpro.nikkeibp.co.jp/article/COLUMN/20060116/227312/
「HTA - FSWikiLite」
http://tuka.s12.xrea.com/index.xcg?p=HTA
メモ書き:テキストファイルに定義されたファイルを抜き出してフォルダに移動する [プログラミング学習]
表題のような処理をしようと思っている。
※まだメモ書きです。プログラムは後で追記します。
まず、もうちょっと要件を明確にしよう。
<要件>
・移動するファイルは、全て特定のフォルダ(移動元フォルダ)に入っている。
・テキストファイルに特定のフォルダ(移動先フォルダ)に移動するファイル名が定義されている。
1行に特定書式でファイル名が定義されている。
・テキストファイルには移動しないファイル名も定義されている。
移動しないファイルはテキストファイル内でコメントアウト(;)されている。
・移動元フォルダには、テキストファイル内で定義されていないファイルも含まれている。
定義されていないファイルは移動しないファイルとして扱う。
・移動先フォルダは移動前に作成する。
<仕様>
0. 移動先フォルダを作成する
1. 移動元フォルダを開く
2. 設定ファイルをForReadingで開く
3. 設定ファイルをReadLineで1行ずつ読み込む
4. 3で読み込んだ行が特定の書式だった場合、ファイル名を抜き出す。
5. 4で読み込んだファイル名が移動元フォルダに存在する場合、移動先フォルダにファイルを移動する
※移動元フォルダにファイルがなかった場合、警告する
6. 3-4を設定ファイルのEOFまで繰り返す
※設定ファイルは3種類あるので、実際は3回同じ処理を繰り返す。移動先フォルダは設定ファイル毎に違う。
設定ファイル、移動先フォルダは固定名称
<追加処理>
※上記処理後、別処理を行う必要があるので、ついでに検討。
0. 設定ファイルが入っているフォルダはスクリプトのあるフォルダの直下にある
1. 0.の設定ファイルは処理後に移動したフォルダに、移動用フォルダをつくり、一部の設定ファイルを移動する
※移動しない設定ファイルもある
2. 移動先設定ファイルをForWritingで開く
3. 移動元設定ファイルから1行読み込み、特定書式だった場合、フォルダ名称で書き換える
4. 移動先設定ファイルに書き換えた文字列を書き込む
※まだメモ書きです。プログラムは後で追記します。
まず、もうちょっと要件を明確にしよう。
<要件>
・移動するファイルは、全て特定のフォルダ(移動元フォルダ)に入っている。
・テキストファイルに特定のフォルダ(移動先フォルダ)に移動するファイル名が定義されている。
1行に特定書式でファイル名が定義されている。
・テキストファイルには移動しないファイル名も定義されている。
移動しないファイルはテキストファイル内でコメントアウト(;)されている。
・移動元フォルダには、テキストファイル内で定義されていないファイルも含まれている。
定義されていないファイルは移動しないファイルとして扱う。
・移動先フォルダは移動前に作成する。
<仕様>
0. 移動先フォルダを作成する
1. 移動元フォルダを開く
2. 設定ファイルをForReadingで開く
3. 設定ファイルをReadLineで1行ずつ読み込む
4. 3で読み込んだ行が特定の書式だった場合、ファイル名を抜き出す。
5. 4で読み込んだファイル名が移動元フォルダに存在する場合、移動先フォルダにファイルを移動する
※移動元フォルダにファイルがなかった場合、警告する
6. 3-4を設定ファイルのEOFまで繰り返す
※設定ファイルは3種類あるので、実際は3回同じ処理を繰り返す。移動先フォルダは設定ファイル毎に違う。
設定ファイル、移動先フォルダは固定名称
<追加処理>
※上記処理後、別処理を行う必要があるので、ついでに検討。
0. 設定ファイルが入っているフォルダはスクリプトのあるフォルダの直下にある
1. 0.の設定ファイルは処理後に移動したフォルダに、移動用フォルダをつくり、一部の設定ファイルを移動する
※移動しない設定ファイルもある
2. 移動先設定ファイルをForWritingで開く
3. 移動元設定ファイルから1行読み込み、特定書式だった場合、フォルダ名称で書き換える
4. 移動先設定ファイルに書き換えた文字列を書き込む
調べ物:WSHでパスワード付きzipファイルを解凍する(UWSC併用) [プログラミング学習]
表題のような処理をしようと思って調べた。
0. 前提:
・UWSCはWSHスクリプトフォルダ直下のUWSCフォルダに存在する。
・UWSCスクリプトはUWSCと同じフォルダにある。
・パスワード付きzipファイルは、WSHスクリプトにドラッグ&ドロップで指定。解凍先はzipファイルと同じフォルダ。
UWSCスクリプト名:EnterPassZip.uws
UWSCiniファイル名:EnterPassZip.ini
1. WSHでUWSCを起動する。UWSCではパスワード入力スクリプトを読み込む
パスワードはUWSCのIniファイル関数で取得する
2. WSHでzipファイル解凍を実行する
※zipファイル解凍は同期処理なので、解凍が終わるまでスクリプトは実行待ちになる、はず。
0. 前提:
・UWSCはWSHスクリプトフォルダ直下のUWSCフォルダに存在する。
・UWSCスクリプトはUWSCと同じフォルダにある。
・パスワード付きzipファイルは、WSHスクリプトにドラッグ&ドロップで指定。解凍先はzipファイルと同じフォルダ。
UWSCスクリプト名:EnterPassZip.uws
UWSCiniファイル名:EnterPassZip.ini
1. WSHでUWSCを起動する。UWSCではパスワード入力スクリプトを読み込む
パスワードはUWSCのIniファイル関数で取得する
2. WSHでzipファイル解凍を実行する
※zipファイル解凍は同期処理なので、解凍が終わるまでスクリプトは実行待ちになる、はず。
調べ物:WSHでTemporaryフォルダ取得 [プログラミング学習]
WSHでzipファイル解凍するときに一時フォルダにフォルダを作る(*)ので、その一時フォルダを解凍後に削除しようと思った。
なので、Temporaryフォルダを取得する手段を調べた。
(*: Windows XPの話。Windows 7ではできない模様。完全には調べていない)
GetSpecialFolderメソッドで特殊フォルダの名前が取得できる。フォルダコレクションを取得するにはGetFolderを使用する。
「GetSpecialFolder - Google 検索」
http://www.google.co.jp/search?hl=ja&q=GetSpecialFolder&aq=f&aqi=g5g-m3&aql=&oq=&gs_rfai=
「GetSpecialFolder メソッド」
http://msdn.microsoft.com/ja-jp/library/cc428028.aspx
なので、Temporaryフォルダを取得する手段を調べた。
(*: Windows XPの話。Windows 7ではできない模様。完全には調べていない)
GetSpecialFolderメソッドで特殊フォルダの名前が取得できる。フォルダコレクションを取得するにはGetFolderを使用する。
objTempFolder = objFSO.GetSpecialFolder(2) ' Temporaryフォルダ内のサブフォルダを取得 For Each objSubFolder In objFSO.GetFolder(objTempFolder).SubFolders WScript.Echo " " & objSubFolder.Name Next
「GetSpecialFolder - Google 検索」
http://www.google.co.jp/search?hl=ja&q=GetSpecialFolder&aq=f&aqi=g5g-m3&aql=&oq=&gs_rfai=
「GetSpecialFolder メソッド」
http://msdn.microsoft.com/ja-jp/library/cc428028.aspx
Excel VBAでセルのグループ化 [プログラミング学習]
データの中で特定の行に対してグループ化する必要がある。
Selection.Rows.Group
Selection.Rows.Ungroup
を使えばいいらしい。
調べていて、"記録すれば"的なコメントを見つけてはっとした。
そういや、操作を記録・再生するマクロが使用可能なものは、とりあえずマクロを記録して、コードを見てみればいいんだよね。
「Excel VBA グループ化 - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=Excel+VBA+%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96&aq=f&aqi=g2g-c1g1g-c5&aql=&oq=&gs_rfai=
「Selection.Rows.Group - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=Selection.Rows.Group&aq=f&aqi=g1&aql=&oq=&gs_rfai=
Selection.Rows.Group
Selection.Rows.Ungroup
を使えばいいらしい。
調べていて、"記録すれば"的なコメントを見つけてはっとした。
そういや、操作を記録・再生するマクロが使用可能なものは、とりあえずマクロを記録して、コードを見てみればいいんだよね。
「Excel VBA グループ化 - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=Excel+VBA+%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96&aq=f&aqi=g2g-c1g1g-c5&aql=&oq=&gs_rfai=
「Selection.Rows.Group - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=Selection.Rows.Group&aq=f&aqi=g1&aql=&oq=&gs_rfai=
Excel VBAでフィルタ [プログラミング学習]
大量のデータがあるExcelファイルから特定セルの値が特定の値(Excelファイルのフォルダ名称)を抜き出したい。
Excelのフィルタで抜き出せるので、VBAで同じことをしたい。
「Excel VBA フィルタ - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=Excel+VBA+%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF&aq=f&aqi=g5g-r5&aql=&oq=&gs_rfai=
「Excel(エクセル)VBA入門:オートフィルタ(AutoFilter)でのデータ抽出」
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html
「Office TANAKA - Excel VBAデータベース的活用法[オートフィルタで抽出する]」
http://officetanaka.net/excel/vba/db/db03.htm
Excelのフィルタで抜き出せるので、VBAで同じことをしたい。
「Excel VBA フィルタ - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=Excel+VBA+%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF&aq=f&aqi=g5g-r5&aql=&oq=&gs_rfai=
「Excel(エクセル)VBA入門:オートフィルタ(AutoFilter)でのデータ抽出」
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html
「Office TANAKA - Excel VBAデータベース的活用法[オートフィルタで抽出する]」
http://officetanaka.net/excel/vba/db/db03.htm
調べ物:WSHで「プログラムの追加と削除」を制御(UWSC併用) [プログラミング学習]
やりたいのは、プログラムのアンインストール。
1. コントロールパネルの「プログラムの追加と削除」を開く
2. 「プログラムのアンインストールと変更」で該当プログラムがインストールされているかをチェックする
3. インストールされていた場合、該当プログラムをアンインストールする
「wsh プログラムの追加と削除を開く - Google 検索」
http://www.google.co.jp/search?hl=ja&q=wsh+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E8%BF%BD%E5%8A%A0%E3%81%A8%E5%89%8A%E9%99%A4%E3%82%92%E9%96%8B%E3%81%8F&aq=f&aqi=&aql=&oq=&gs_rfai=
ユーザ操作を実行するために、UWSCを併用する。
処理の流れは以下のとおり。
1. WSHで「プログラムの追加と削除」起動。プログラムが表示されるまで待つ
2. UWSCをアンインストール対象プログラムのチェック、アンインストール実行スクリプトを読み込んで起動、実行
3. UWSCでクリック可能なコントロールを取得し、該当プログラムがあるかを選択
4. ある場合、該当プログラムを実行しアンインストールウィンドウ起動
5. アンインストール画面が表示されたら、UWSCで画面制御実行
1. コントロールパネルの「プログラムの追加と削除」を開く
2. 「プログラムのアンインストールと変更」で該当プログラムがインストールされているかをチェックする
3. インストールされていた場合、該当プログラムをアンインストールする
「wsh プログラムの追加と削除を開く - Google 検索」
http://www.google.co.jp/search?hl=ja&q=wsh+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E8%BF%BD%E5%8A%A0%E3%81%A8%E5%89%8A%E9%99%A4%E3%82%92%E9%96%8B%E3%81%8F&aq=f&aqi=&aql=&oq=&gs_rfai=
ユーザ操作を実行するために、UWSCを併用する。
処理の流れは以下のとおり。
1. WSHで「プログラムの追加と削除」起動。プログラムが表示されるまで待つ
2. UWSCをアンインストール対象プログラムのチェック、アンインストール実行スクリプトを読み込んで起動、実行
3. UWSCでクリック可能なコントロールを取得し、該当プログラムがあるかを選択
4. ある場合、該当プログラムを実行しアンインストールウィンドウ起動
5. アンインストール画面が表示されたら、UWSCで画面制御実行
調べ物:HTAでプログレスバーが表示できるか? [プログラミング学習]
実際やるかどうかは別として、WSHで自動実行している間進捗状態を示したほうがいいかと思っている。
プログレスバー、もしくは進捗をテキスト表示する方法を考えている。
結果的にマルチプロセス(画面表示更新 + 実処理)になるはずなので、実現可能性を検討する必要がある。
だが、結構簡単にできそうだね。サンプルもあるし。
「WSH プログレスバー - Google 検索」
http://www.google.co.jp/search?hl=ja&q=WSH+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%AC%E3%82%B9%E3%83%90%E3%83%BC&aq=f&aqi=g-c1&aql=&oq=&gs_rfai=
「hta プログレスバー - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=hta+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%AC%E3%82%B9%E3%83%90%E3%83%BC&aq=0&aqi=g1&aql=&oq=HTA+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%AC%E3%82%B9&gs_rfai=
「Hey, Scripting Guy!」
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/mar05/hey0316.mspx
「VBScript Tips (Tips0169)」
http://www.whitire.com/vbs/tips0169.html
プログレスバー、もしくは進捗をテキスト表示する方法を考えている。
結果的にマルチプロセス(画面表示更新 + 実処理)になるはずなので、実現可能性を検討する必要がある。
だが、結構簡単にできそうだね。サンプルもあるし。
「WSH プログレスバー - Google 検索」
http://www.google.co.jp/search?hl=ja&q=WSH+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%AC%E3%82%B9%E3%83%90%E3%83%BC&aq=f&aqi=g-c1&aql=&oq=&gs_rfai=
「hta プログレスバー - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=hta+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%AC%E3%82%B9%E3%83%90%E3%83%BC&aq=0&aqi=g1&aql=&oq=HTA+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%AC%E3%82%B9&gs_rfai=
「Hey, Scripting Guy!」
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/mar05/hey0316.mspx
「VBScript Tips (Tips0169)」
http://www.whitire.com/vbs/tips0169.html
検討メモ:UWSCとWSHの併用でインストール実行 [プログラミング学習]
ひたすら、ファイル制御作業を自動化し続ける日々。
その作業の中で、インストール・アンインストールの実行がある。
インストーラはウィンドウを表示して実行する。WSHは基本CUI制御なので、画面制御は不可能ではないが若干面倒になる。
調べたところ、インストーラの実行ではUWSCを薦められていた。コマンドプロンプトの制御もできるので、併用できる。
UWSCをマスターにしてWSHスクリプトを呼び出す形にするか、WSHスクリプトからUWSCを呼ぶか、どちらも選べる。
今回のケースだと、WSHをマスターにしようと思っている。理由は以下のとおり。
・UWSCをマスターにした場合の、起動操作の説明を不要にするため。ダブルクリップかドラッグ&ドロップ程度で起動したい。UWSCのバッチファイルを作る手段もとれるが、余分なバッチを作る必要性が見出せない。
・インストール前にファイルコピー作業が発生し、そちらはWSHで実行するため。
こんなところかな。後は組むだけだ。
その作業の中で、インストール・アンインストールの実行がある。
インストーラはウィンドウを表示して実行する。WSHは基本CUI制御なので、画面制御は不可能ではないが若干面倒になる。
調べたところ、インストーラの実行ではUWSCを薦められていた。コマンドプロンプトの制御もできるので、併用できる。
UWSCをマスターにしてWSHスクリプトを呼び出す形にするか、WSHスクリプトからUWSCを呼ぶか、どちらも選べる。
今回のケースだと、WSHをマスターにしようと思っている。理由は以下のとおり。
・UWSCをマスターにした場合の、起動操作の説明を不要にするため。ダブルクリップかドラッグ&ドロップ程度で起動したい。UWSCのバッチファイルを作る手段もとれるが、余分なバッチを作る必要性が見出せない。
・インストール前にファイルコピー作業が発生し、そちらはWSHで実行するため。
こんなところかな。後は組むだけだ。
調べ物:WSHでZIPファイル解凍 [プログラミング学習]
WSHでZIPファイルを解凍することになった。以下のサイトのコードでいけそうだ。
CopyHereで一時ファイルができるそうですが、そこは許容範囲ということにしよう。
「WSH CopyHere zip 解凍 - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=WSH+CopyHere+zip+%E8%A7%A3%E5%87%8D&aq=f&aqi=&aql=&oq=&gs_rfai=
「VBScriptでZIPファイルを解凍する - モデラート - C#とゲーム開発と雑記」
http://d.hatena.ne.jp/runicalp/20081117/1226912916
CopyHereで一時ファイルができるそうですが、そこは許容範囲ということにしよう。
「WSH CopyHere zip 解凍 - Google 検索」
http://www.google.co.jp/search?hl=ja&source=hp&q=WSH+CopyHere+zip+%E8%A7%A3%E5%87%8D&aq=f&aqi=&aql=&oq=&gs_rfai=
「VBScriptでZIPファイルを解凍する - モデラート - C#とゲーム開発と雑記」
http://d.hatena.ne.jp/runicalp/20081117/1226912916