HSP-NEXT   
    HSPサンプル蔵  (COMオブジェクト編)


〜 WSH (VBScript,JSCript) の活用法について 〜

 HSP3では新しい機能として COM(コンポーネント・オブジェクト・モデル)が操作でき るようになりました。比較的簡単なパラメータを与えるだけで、Windows が持つシステム コンポーネントやフリーで公開されている各種コンポーネントの機能を利用することでき ます。HSP3が提供している命令群では、 COMオブジェクトの作成とインターフェースの取 得、インターフェースポインタからのメソッドの呼び出しなど豊富なオブジェクトアクセ ス手段が提供されています。 COMオブジェクト編では、標準で実装されているHSP3のCOM関連命令を利用して、 COM操作 の入門として比較的移植や理解のしやすい WSH (Windows Script Host(以下WSH)) を取 り上げて見ました。 WSHは、Windowsが標準でサポートするスクリプト環境で、テキストベースのスクリプトを 記述することで、従来のバッチに代わるものとして、GUI環境に頼らずにWindows環境でさ まざまな処理を実行できます。 このスクリプト言語の持つ便利な機能をHSP3のCOM関連命 令を利用して、どのようなことができるのかサンプルを提示しながら活用して見ることに します。 これまでは、初心者には難しいとされるAPIをコールして実現していた機能が簡 単なスクリプトベースの記述で実現できるのです。これは、非常に魅力的であります。

■HSPからの利用方法
 WSHではスクリプト言語として、VBライクな言語であるVBScriptや、 JavaScriptライク なJScriptを標準で利用できます。 どちらのスクリプト言語を利用しても機能的には大き な違いはありません。HSPからは、次のCOM関連命令を使って制御します。
   ・HSPのCOMオブジェクト操作関連命令

   ■ newcom命令     ・・・・  COMオブジェクト型変数の新規作成
   ■ delcom命令     ・・・・  COMオブジェクト型変数の破棄
   ■ comres命令     ・・・・  メソッド返値代入変数を設定する
   ■ mcall命令      ・・・・  メソッドの呼び出し
   ■ comevent命令   ・・・・  COMイベントの取得開始
   ■ querycom命令   ・・・・  COMオブジェクト型変数の作成
   ■ axobj命令      ・・・・  ActiveXコントロールの配置
   ■ sarrayconv命令 ・・・・  Variant型との一括変換を行なう
   ■ comevarg命令   ・・・・  COMイベントのパラメーターを取得
   ■ comevdisp関数  ・・・・  COMイベントの内容を確認
   ■ #comfunc命令   ・・・・  外部COM呼び出し命令登録
   ■ #usecom命令    ・・・・  外部COMインターフェースの指定
HSPからすべてを利用できるわけではないのですが、WSHの各オブジェクトの役割を簡単に まとめると次のようになります。これらをHSPのCOMオブジェクト操作関連命令で操作する ことになります。
   ・WSHのオブジェクト一覧

   オブジェクト           役     割
    1.WScript             オブジェクトの作成・接続、画面表示など
    2.WshArguments        コマンドライン引数にアクセスする
    3.WshNamed            名前付きコマンドライン・パラメータにアクセスする
    4.WshUnnamed          名前なしコマンドライン・パラメータにアクセスする
    5.WshController       リモート・スクリプト・プロセスを作成する
    6.WshRemote           コンピュータ・システムをリモートから管理する
    7.WshRemoteError      WshRemote オブジェクトが異常終了した場合のエラー情報にアクセスする
    8.WshNetwork          ネットワーク共有の接続・切断など
    9.WshShell            プログラムの実行・環境変数の操作など
   10.WshShortcut         ショートカットを作成する
   11.WshUrlShortCut      インターネット・リソースへのショートカットを作成する
   12.WshScriptExec       Exec()で実行したスクリプトに関するステータス情報、及びエラー情報を取得する
   13.WshEnvironment      環境変数にアクセスする
   14.WshSpecialFolders   Windowsの専用フォルダにアクセスする
各オブジェクトについて、さらに詳細を知りたければMSDNのページやネット上のサイトや 書籍を参照して下さい。その他の各種情報も検索エンジンを活用して調べて見て下さい。 また、WSHは言語を選ばないので、HSPのようなスクリプト言語やPerlやRubyからも利用す ることが可能です。
それでは、WSH (VBScript)を利用してメモ帳を起動する簡単なスクリプトを例として、 HSPでの記述方法と対比して見ましょう。
	'***** WSH (VBScript)の場合 *****
	'▼WScript.Shellオブジェクトを作成 (objShellというオブジェクト型変数に代入)
	Set objShell = WScript.CreateObject("WScript.Shell")
	'▼メッセージを出力
	WScript.Echo "メモ帳を起動します。"
	'▼objShellの Runメソッドで notepad.exe を起動
	objShell.Run "notepad.exe"
	'▼COMオブジェクト破棄
	Set objShell = Nothing

	;***** HSPの場合 *****
	;▼newcom命令でプログラムIDと呼ばれる文字列(WScript.Shell)をパラメータとして
	;  指定しobjShellというオブジェクト型変数に代入
	newcom objShell,"WScript.Shell"
	;▼WScript.Echoを mes命令やdialog命令で代用する
	mes "メモ帳を起動します。"
	;▼objShellの Runメソッドで notepad.exe を起動
	objShell->"Run" "notepad.exe"
	;▼COMオブジェクト破棄
	delcom objShell
VBScriptとHSPでの記述方法の比較で判るように、 非常に似通っており移植性が高いと言 えます。簡単なものであれば、このような方法で書き換えることができます。 HSPの豊富な命令や関数、さらに Win32APIをコールして組み合わせれば、応用範囲や適用 範囲も拡大されることでしょう。

■ COMオブジェクト編掲載サンプル一覧

No. 内         容
1  バラバラなウィンドウを任意の表示モードで整列させる
2  クライアント環境で保持されている固有情報を取得する
3  スタートメニュー等の特殊フォルダーのパスを取得する
4  外部ファイルを任意の実行時モードで起動させる
5  ウィンドウズをプログラム上からサスペンド状態にする
6  ウィンドウズの電源遮断、再起動、ログオフをプログラム上から実行する (9x系)
7  ウィンドウズの電源遮断、再起動、ログオフをプログラム上から実行する (NT系)
8  任意に指定したディレクトリ名を指定してエクスプローラを起動する
9  任意に指定したディレクトリ名を指定してマイコンピュータ形式で開く
10  コンピュータの検索を表示させる
11  ファイルの検索を表示させる
12  日付と時刻のプロパティを表示させる
13  タスクバーのプロパティを表示する
14  IEのキャッシュを削除する
15  システムのプロパティを表示する
16  フォルダのプロパティを表示する
17  ファイルのプロパティを表示する
18  指定フォルダのファイル名を列挙する
19  ファイルの情報を取得する
20  ファイルのサイズや属性等の詳細情報を取得する
21  ショートカットを作成する
22  ドライブの情報を取得する
23  ローカルディスクのプロパティを表示する
24  レジストリを利用して値を取得する
25  ネットワークユーザーの情報を取得する
26  ネットワークのユーザー情報、ドライブ,プリンタ割り当て情報を取得する
27  右クリックメニューの「送る」にショートカットを追加する
28  ディスクのクリーンアップを実行させる
29  HSPのスクリプト内からVBScriptを実行させる
30  コントロールパネルの各種プロパティを表示させる
31  スクリプトの中にHTMLコードを埋め込んで実行させる
32  HSPからIE起動して、検索エンジンに検索させる
33  サーバーからGMT(グリニッジ標準時)を取得する
34  インターネットからhtmlテキストを取得する
35  任意のURLの画像ファイルをダウンロードする
36  任意に指定したフォルダのサイズを取得する
37  URLを指定してHTMLファイルのテキストを抽出する
38  任意の指定数値を3桁毎のカンマ付きに編集する
39  既にあるテキストファイルに行番号を付けて格納する
40  改行コードを変換する
41  EXCELを新規作成してグラフを描画する
42  HTMLファイルからタグを除去してノーマルなテキストにする


      バラバラなウィンドウを任意の表示モードで整列させる     

現在、開いているウィンドウの各種整列操作を行ないます。ウィンドウの整列とは、ウィ ンドウを最小化したり、重ねて表示させたりする整列操作のことを言います。 VBScriptでは、これらの操作を行なうのに便利なオブジェクトが提供されています。 プログラムの実行・環境変数の操作などを行なうWshShellオブジェクトを利用します。
ウィンドウの整列操作においては、次の5つの動作を行なうことができます。いずれも VBScriptの組み込み定数をパラメータとして与えるだけで操作ができます。
   ・ウィンドウの整列動作モード定数
    1.MinimizeAll              全ウィンドウを最小化
    2.UndoMinimizeALL          ウィンドウ操作を元にもどす
    3.TileVertically           ウィンドウを左右に並べて表示
    4.TileHorizontally         ウィンドウを上下に並べて表示
    5.CascadeWindows           ウィンドウを重ねて表示

サンプルスクリプト(comobj01.hsp)では、 newcom命令でShellApp変数をCOMオブジェクト 型として初期化したのち、全ウィンドウを最小化 → ウィンドウ操作を元にもどす → ウ ィンドウを重ねて表示という順序で操作変遷していきます。そして、最後にnewcom命令で 作成したオブジェクト型変数 ShellAppをdelcom命令で開放しています。
	;***** ウィンドウの整列  (comobj01.hsp) *****

	gsel 0,-1
	newcom ShellApp, "Shell.Application"
	ShellApp->"MinimizeAll"
	wait 100
	ShellApp->"UndoMinimizeALL"
	wait 50
	ShellApp->"CascadeWindows"
	delcom ShellApp
	end
      クライアント環境で保持されている固有情報を取得する     

環境変数とは、OSのシェルなどに設定されているシステムの各種情報を保持している文字 列変数のことです。これらの情報は設定や変更、追加が可能です。プログラムから参照す るためにクライアントの固有情報として取得しておくと利用環境に左右されにくい処理を 行なうことが可能となります。取得方法ですが、WSHのExpandEnvironmentStrings メソッ ドを使います。このメソッドは、PROCESS 環境領域に定義された環境変数のみを展開し、 環境変数名を "%" で囲むことによって値を取得することができます。 また、環境変数名 は、大文字と小文字は区別されません。 サンプルスクリプト(comobj02.hsp) では、newcom命令でWshShell変数をCOMオブジェクト 型として初期化したのち、ExpandEnvironmentStringsメソッドに環境変数名をパラメータ として与えて、結果を取得表示しています。 ただし、Win9x系では、SystemRoot(%SystemRoot%)とOS(%OS%)は取得できません。 また、参考として環境変数は、Win32APIのGetEnvironmentVariable関数によっても取得す ることができます。ちなみにWin9x系で、ここで取得できないSystemRootはHSPの内蔵関数 dirinfoでdirinfo(3)とすることで同等の結果を得ることができます。
	;***** 環境変数の取得  (comobj02.hsp) *****

	newcom WshShell, "WScript.Shell"

	comspec   = WshShell("ExpandEnvironmentStrings","%COMSPEC%")
	SystemRoot= WshShell("ExpandEnvironmentStrings","%SystemRoot%")
	Path      = WshShell("ExpandEnvironmentStrings","%PATH%")
	Temp      = WshShell("ExpandEnvironmentStrings","%TEMP%")
	WinDir    = WshShell("ExpandEnvironmentStrings","%WinDir%")
	OS        = WshShell("ExpandEnvironmentStrings","%OS%")

	;▼取得内容表示 ( 利用環境によっては取得できないものもあります )
	pos 10,10 : font "MS ゴシック",14,0
	mes "***** 環境変数の取得 *****"
	mes ""
	mes "comspec : "+comspec
	mes "SystemRoot : "+SystemRoot
	mes "Path : "+Path
	mes "Temp : "+Temp
	mes "WinDir : "+WinDir
	mes "OS : "+OS

	delcom WshShell
	stop
      スタートメニュー等の特殊フォルダーのパスを取得する     

特殊フォルダのフルパスを取得・列挙します。特殊フォルダとは、「スタート メニュー」 「送る」「最近使ったファイル」などの特殊な働きを持ったフォルダのことです。 Win32APIでは、SHGetSpecialFolderLocation で特殊フォルダの ITEMIDLIST(IDL) を取得 して、その IDL を元に SHGetPathFromIDList でパスを取得することができますが、 WSH を利用すれば、非常に簡単に取得することができます。 WScript.ShellオブジェクトのSpecialFoldersプロパティを利用します。 全部で16種類の フルパスを取得できます。取得可能な特殊フォルダは、次のようになります。
   ・SpecialFoldersプロパティで取得できる特殊フォルダ 
   指定フォルダ            意 味
    1.AllUsersDesktop      All Usersのデスクトップ
    2.AllUsersStartMenu    All Usersのスタート・メニュー
    3.AllUsersPrograms     All Usersのスタート・メニューの「すべてのプログラム」
    4.AllUsersStartup      All Usersのスタート・メニューの「スタートアップ」
    5.Desktop              デスクトップ
    6.Favorites            お気に入り
    7.Fonts                フォント
    8.MyDocuments          マイ・ドキュメント
    9.NetHood              マイ・ネットワーク
   10.PrintHood            プリンタ
   11.Programs             スタート・メニューの「すべてのプログラム」
   12.Recent               最近使ったファイル 
   13.SendTo               コンテキスト・メニューの「送る」
   14.StartMenu            スタート・メニュー
   15.Startup              スタート・メニューの「スタートアップ」
   16.Templates            ファイルの新規作成のテンプレート
サンプルスクリプト(comobj03.hsp) では、newcom命令でWshShell変数をCOMオブジェクト 型として初期化したのち、SpecialFoldersプロパティのオブジェクト変数を作成して、 Itemプロパティに取得したい特殊フォルダのフォルダ指定文字をパラメータとして指定す ることにより、取得対象フォルダのパスを結果として得ています。実際には、予め一覧列 挙するための準備作業として、フォルダ指定文字を文字列型配列変数に持たせておいて、 ループをかけて列挙表示させています。
たとえば、単独で「お気に入り」のフォルダを取得する場合は、

	newcom WshShell, "WScript.Shell"
	objspcfol=WshShell("SpecialFolders")
	Folder=objspcfol("Item", "Favorites")
	mes Folder
	objspcfol = 0 : WshShell = 0
	stop

とします。Folderという文字列型変数に「お気に入り」のパスが取得されます。

	;***** 特殊フォルダを列挙  (comobj03.hsp) *****

	font "MS ゴシック",14,0
	sdim sFolder,16 : sdim Folder,260

	sFolder(0) ="AllUsersDesktop"
	sFolder(1) ="AllUsersPrograms"
	sFolder(2) ="AllUsersStartup"
	sFolder(3) ="Desktop"
	sFolder(4) ="Favorites"
	sFolder(5) ="Fonts"
	sFolder(6) ="MyDocuments"
	sFolder(7) ="NetHood"
	sFolder(8) ="PrintHood"
	sFolder(9) ="Programs"
	sFolder(10)="Recent"
	sFolder(11)="SendTo"
	sFolder(12)="StartMenu"
	sFolder(13)="Startup"
	sFolder(14)="Templates"
	sFolder(15)="AppData"

	newcom WshShell, "WScript.Shell"
	objspcfol=WshShell("SpecialFolders")
	pos 10,10
	repeat 16
		Folder=objspcfol("Item", sFolder(cnt))
		if Folder="" : continue
		pos ,ginfo(23) : mes Folder
	loop
	delcom objspcfol
	delcom WshShell
	stop
      外部ファイルを任意の実行時モードで起動させる     

HSPの標準命令では、exec命令という実行時のモードに応じたアプリケーションの起動が できる便利な命令があります。これは、外部ファイルを指定された実行時のモードで起動 させることができるものです。モードは次のものが指定できます。
   ・HSP exec命令の実行時モード
   モード0  : HSPノーマル実行
   モード2  : 最小化モードで実行
   モード16 : 関連付けされたアプリケーションを実行
   モード32 : 指定したファイルを印刷する
このモードは、モードの値を組合せて指定することもできますが、最大化した状態での起 動や非表示での起動といったものができません。 ここでは、WSHの Runメソッドを利用し て様々な実行時制御を実現させます。また、プログラムの実行が終了するまでスクリプト を待機させるかどうかを示すブール値が指定できます。 サンプルスクリプト(comobj04.hsp) では、newcom命令でWshShell変数をCOMオブジェクト 型として初期化したのち、Runメソッドで実行するコマンド ラインを示す文字列値である 実行ファイルのファイル名を含む渡すべきパラメータを指定します。そして、実行時モー ドの定数と、実行終了待ちをするかどうかのブール値を指定しています。 Runメソッドで 指定できる実行時モードは、全部で11種類ありますが、サンプルにおいては主な6種類の モードを定義してあります。実際の動作としては、メモ帳 (notepad.exe)を最大化状態で 、かつ、終了実行待ちの状態で起動させます。
	;***** アプリケーションの起動  (comobj04.hsp) *****

	#const WshHide              0  ;非表示
	#const WshNormalFocus       1  ;通常サイズ
	#const WshMinimizedFocus    2  ;最小化
	#const WshMaximizedFocus    3  ;最大化
	#const WshNormalNoFocus     4  ;通常サイズかつ非フォーカス
	#const WshMinimizedNoFocus  6  ;最小化かつ非フォーカス

	newcom WshShell, "WScript.Shell"
	WshShell->"Run" "notepad.exe", WshMaximizedFocus, 1
	delcom WshShell
	stop
      ウィンドウズをプログラム上からサスペンド状態にする     

ウィンドウズをサスペンド(スタンバイ)状態にします。サスペンドとは、コンピュータの 電源を切る直前の状態を保存して、作業を再開させる場合に電源を入れた時に電源を切る 直前の状態から作業を再開させることができる機能です。この機能をプログラムから実行 させるには、Shell.ApplicationのSuspendメソッドを利用します。 サンプルスクリプト (comobj06.hsp) では、newcom命令でShellApp変数をCOMオブジェクト型として初期化した のち、Suspendメソッドを発行するだけで動作します。
	;***** サスペンド(スタンバイ)  (comobj06.hsp) *****

	newcom ShellApp, "Shell.Application"
	ShellApp->"Suspend"
	delcom ShellApp
	stop
      ウィンドウズの電源遮断、再起動、ログオフをプログラム上から実行する     

ウィンドウズの電源遮断、再起動、ログオフを行ないます。 WindowsのRUNDLL32.EXEにコ マンドライン引数として、SHExitWindowsExを発行させることにより実行します。 サンプルスクリプト(comobj07.hsp) では、newcom命令でWshShell変数をCOMオブジェクト 型として初期化したのち、Runメソッドに上記のRUNDLL32.EXEに引数を発行します。 SHExitWindowsExには、それぞれの機能の実行モードとして、0,1,2のフラグを与えます。 SHExitWindowsExの実行モードフラグは、次の通りとなります。
   ・SHExitWindowsExの実行モードフラグ
    0 : ウィンドウズのログオフ
    1 : ウィンドウズの電源断
    2 : ウィンドウズの再起動

	;***** ウィンドウズの終了・再起動・ログオフ  (comobj07.hsp) *****

	;※Win9x系のみ動作します。NT系は不可 (comobj08.hsp参照のこと)

	onexit *owari
	font "MS ゴシック",14,0 : objmode 2
	objsize 300,26
	pos 40,40
		button " ウィンドウズの電源断    ",*mode01
		button " ウィンドウズの再起動    ",*mode02
		button " ウィンドウズのログオフ   ",*mode03

	newcom WshShell, "WScript.Shell"
	stop

*mode01
	;▼ウィンドウズの電源断
	WshShell->"Run" dirinfo(2)+"\\RUNDLL32.EXE Shell32.dll,SHExitWindowsEx 1"
	delcom WshShell
	end

*mode02
	;▼ウィンドウズの再起動
	WshShell->"Run" dirinfo(2)+"\\RUNDLL32.EXE Shell32.dll,SHExitWindowsEx 2"
	delcom WshShell
	end

*mode03
	;▼ウィンドウズのログオフ
	WshShell->"Run" dirinfo(2)+"\\RUNDLL32.EXE Shell32.dll,SHExitWindowsEx 0"
	delcom WshShell
	end

*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(WshShell)==6 {
		if varuse(WshShell)==1 : delcom WshShell
	}
	end
      ウィンドウズの電源遮断、再起動、ログオフをプログラム上から実行する     

ウィンドウズの電源遮断、再起動、ログオフを行ないます。2000以降のOSには、9x系で行 なったRunメソッドによるRUNDLL32.EXEの方法が使えません。 2000以降のOSに対応させる には、最近のシステム管理機能としてWMI(Windows Management Instrumentation) と呼ば れるWindowsを管理するためのインタフェースの機能を利用します。 これは、ほとんどがAPIレベルで記述されているので、そのままHSPの構文に置換えできな いので、WSHのScriptControlメソッドを利用して、 VBScriptのコードをHSPから実行させ ることにより実現します。各々の機能毎のVBScriptを作成して、サブルーチンとして HSP の文字列型変数に保持させます。VBScript内の処理としては、 GetObjectで採用する認証 レベルを取得してWin32Shutdownメソッドを発行することにより実行されます。 サンプルスクリプト(comobj08.hsp) では、newcom命令でobjVBsc変数をCOMオブジェクト 型として初期化したのち、addcodeメソッドでスクリプトエンジンにスクリプトコードを 追加します。そして、Runメソッドで呼び出し、実行します。
	;***** ウィンドウズの終了・再起動・ログオフ (NT系用)  (comobj08.hsp) *****

	;※WinNT系のみ動作します。9x系は不可 (comobj07.hsp参照のこと)
	;
	;(注意)下記のサンプルリストは1行に表示する行数を掲載上の都合により、途中で
	;改行して折り返してあります。ラベル*mode01から*mode03の部分のSet objSystemSet
	;のところで、実際は、改行せずに1行として下さい。このまま実行したらエラーとな
	;ります。

	onexit *owari
	font "MS ゴシック",14,0 : objmode 2
	objsize 300,26
	pos 40,40
		button " ウィンドウズの電源断    ",*mode01
		button " ウィンドウズの再起動    ",*mode02
		button " ウィンドウズのログオフ   ",*mode03

	newcom objVBsc, "ScriptControl"
	objVBsc("Language")="VBScript"
	stop

*mode01
	;▼poweroff Script (ウィンドウズの電源断)
	vbs = {"
		Sub vbcmd()
			Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,
			(Shutdown)}")_
			.InstancesOf("Win32_OperatingSystem")
			For Each objSystem In objSystemSet
				objSystem.Win32Shutdown 8
			Next
		End Sub
	"}
	objVBsc->"AddCode" vbs
	objVBsc->"Run" "vbcmd"
	delcom objVBsc
	end

*mode02
	;▼reboot Script (ウィンドウズの再起動)
	vbs = {"
		Sub vbcmd()
			Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,
			(Shutdown)}")_
			.InstancesOf("Win32_OperatingSystem")
			For Each objSystem In objSystemSet
				objSystem.Win32Shutdown 0
		Next
		End Sub
	"}
	objVBsc->"AddCode" vbs
	objVBsc->"Run" "vbcmd"
	delcom objVBsc
	end

*mode03
	;▼logoff Script (ウィンドウズのログオフ)
	vbs = {"
		Sub vbcmd()
			Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,
			(Shutdown)}")_
			.InstancesOf("Win32_OperatingSystem")
			For Each objSystem In objSystemSet
				objSystem.Win32Shutdown 2
		Next
		End Sub
	"}
	objVBsc->"AddCode" vbs
	objVBsc->"Run" "vbcmd"
	delcom objVBsc
	end

*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(objVBsc)==6 {
		if varuse(objVBsc)==1 : delcom objVBsc
	}
	end
      任意に指定したディレクトリ名を指定してエクスプローラを起動する     

システムに予約されている特殊フォルダのパスを指定してエクスプローラを起動します。 WSHでは、特殊フォルダのパスは、0〜21までの定数値として持っています。この定数値を パラメータとして、Exploreメソッドから呼び出します。 サンプルスクリプト(comobj09.hsp) では、newcom命令でShellApp変数をCOMオブジェクト 型として初期化したのち、 Exploreメソッドで#constで定義してある定数値をパラメータ として与えることにより実行します。
	;***** ディレクトリ名を指定してエクスプローラを起動  (comobj09.hsp) *****

	;***** ShellSpecialFolderConstants *****
	#const ssfDESKTOP             0   ;デスクトップ(仮想)
	#const ssfIE                  1   ;Internet Explorer
	#const ssfPROGRAMS            2   ;プログラム
	#const ssfCONTROLS            3   ;コントロールパネル
	#const ssfPRINTERS            4   ;プリンタ
	#const ssfPERSONAL            5   ;マイドキュメント
	#const ssfFAVORITES           6   ;お気に入り
	#const ssfSTARTUP             7   ;スタートアップ
	#const ssfRECENT              8   ;最近使ったファイル
	#const ssfSENDTO              9   ;送る
	#const ssfBITBUCKET          10   ;ごみ箱
	#const ssfSTARTMENU          11   ;スタートメニュー
	#const ssfDESKTOPDIRECTORY   16   ;デスクトップ(フォルダ)
	#const ssfDRIVES             17   ;マイコンピュータ
	#const ssfNETWORK            18   ;ネットワークコンピュータ
	#const ssfNETHOOD            19   ;NetHood
	#const ssfFONTS              20   ;フォント
	#const ssfTEMPLATES          21   ;テンプレート

	onexit *owari
	font "MS ゴシック",14,0 : objmode 2
	objsize 300,26
	pos 40,5
		button " デスクトップ(仮想)     ",*mode01
		button " Internet Explorer      ",*mode02
		button " プログラム              ",*mode03
		button " コントロールパネル      ",*mode04
		button " プリンタ                ",*mode05
		button " マイドキュメント         ",*mode06
		button " お気に入り              ",*mode07
		button " スタートアップ          ",*mode08
		button " 最近使ったファイル      ",*mode09
		button " 送る                    ",*mode10
		button " ごみ箱                  ",*mode11
		button " スタートメニュー        ",*mode12
		button " デスクトップ(フォルダ)   ",*mode13
		button " マイコンピュータ        ",*mode14
		button " ネットワークコンピュータ  ",*mode15
		button " NetHood                 ",*mode16
		button " フォント                ",*mode17
		button " テンプレート            ",*mode18

	newcom ShellApp, "Shell.Application"
	stop

*mode01
	;▼デスクトップ(仮想) 
	ShellApp->"Explore" ssfDESKTOP : stop
*mode02
	;▼Internet Explorer
	ShellApp->"Explore" ssfIE : stop
*mode03
	;▼プログラム
	ShellApp->"Explore" ssfPROGRAMS : stop
*mode04
	;▼コントロールパネル
	ShellApp->"Explore" ssfCONTROLS : stop
*mode05
	;▼プリンタ
	ShellApp->"Explore" ssfPRINTERS : stop
*mode06
	;▼マイドキュメント
	ShellApp->"Explore" ssfPERSONAL : stop
*mode07
	;▼お気に入り
	ShellApp->"Explore" ssfFAVORITES : stop
*mode08
	;▼スタートアップ
	ShellApp->"Explore" ssfSTARTUP : stop
*mode09
	;▼最近使ったファイル
	ShellApp->"Explore" ssfRECENT : stop
*mode10
	;▼送る
	ShellApp->"Explore" ssfSENDTO : stop
*mode11
	;▼ごみ箱
	ShellApp->"Explore" ssfBITBUCKET : stop
*mode12
	;▼スタートメニュー
	ShellApp->"Explore" ssfSTARTMENU : stop
*mode13
	;▼デスクトップ(フォルダ)
	ShellApp->"Explore" ssfDESKTOPDIRECTORY : stop
*mode14
	;▼マイコンピュータ
	ShellApp->"Explore" ssfDRIVES : stop
*mode15
	;▼ネットワークコンピュータ
	ShellApp->"Explore" ssfNETWORK : stop
*mode16
	;▼NetHood
	ShellApp->"Explore" ssfNETHOOD : stop
*mode17
	;▼フォント
	ShellApp->"Explore" ssfFONTS : stop
*mode18
	;▼テンプレート
	ShellApp->"Explore" ssfTEMPLATES : stop

*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(ShellApp)==6 {
		if varuse(ShellApp)==1 : delcom ShellApp
	}
	end
      任意に指定したディレクトリ名を指定してマイコンピュータ形式で開く     

システムに予約されている特殊フォルダのパスを指定してマイコンピュータ形式で開きま す。WSHでは、特殊フォルダのパスは、0〜21までの定数値として持っています。この定数 値をパラメータとして、Exploreメソッドから呼び出します。 サンプルスクリプト(comobj10.hsp) では、newcom命令でShellApp変数をCOMオブジェクト 型として初期化したのち、Openメソッドで#constで定義してある定数値をパラメータとし て与えることにより実行します。
	;***** 任意のフォルダをマイコンピュータ形式で開く  (comobj10.hsp) *****

	;***** ShellSpecialFolderConstants *****
	#const ssfDESKTOP             0   ;デスクトップ(仮想)
	#const ssfIE                  1   ;Internet Explorer
	#const ssfPROGRAMS            2   ;プログラム
	#const ssfCONTROLS            3   ;コントロールパネル
	#const ssfPRINTERS            4   ;プリンタ
	#const ssfPERSONAL            5   ;マイドキュメント
	#const ssfFAVORITES           6   ;お気に入り
	#const ssfSTARTUP             7   ;スタートアップ
	#const ssfRECENT              8   ;最近使ったファイル
	#const ssfSENDTO              9   ;送る
	#const ssfBITBUCKET          10   ;ごみ箱
	#const ssfSTARTMENU          11   ;スタートメニュー
	#const ssfDESKTOPDIRECTORY   16   ;デスクトップ(フォルダ)
	#const ssfDRIVES             17   ;マイコンピュータ
	#const ssfNETWORK            18   ;ネットワークコンピュータ
	#const ssfNETHOOD            19   ;NetHood
	#const ssfFONTS              20   ;フォント
	#const ssfTEMPLATES          21   ;テンプレート

	onexit *owari
	font "MS ゴシック",14,0 : objmode 2
	objsize 300,26
	pos 40,5
		button " デスクトップ(仮想)     ",*mode01
		button " Internet Explorer      ",*mode02
		button " プログラム              ",*mode03
		button " コントロールパネル      ",*mode04
		button " プリンタ                ",*mode05
		button " マイドキュメント         ",*mode06
		button " お気に入り              ",*mode07
		button " スタートアップ          ",*mode08
		button " 最近使ったファイル      ",*mode09
		button " 送る                    ",*mode10
		button " ごみ箱                  ",*mode11
		button " スタートメニュー        ",*mode12
		button " デスクトップ(フォルダ)   ",*mode13
		button " マイコンピュータ        ",*mode14
		button " ネットワークコンピュータ  ",*mode15
		button " NetHood                 ",*mode16
		button " フォント                ",*mode17
		button " テンプレート            ",*mode18

	newcom ShellApp, "Shell.Application"
	stop

*mode01
	;▼デスクトップ(仮想) 
	ShellApp->"Open" ssfDESKTOP : stop
*mode02
	;▼Internet Explorer
	ShellApp->"Open" ssfIE : stop
*mode03
	;▼プログラム
	ShellApp->"Open" ssfPROGRAMS : stop
*mode04
	;▼コントロールパネル
	ShellApp->"Open" ssfCONTROLS : stop
*mode05
	;▼プリンタ
	ShellApp->"Open" ssfPRINTERS : stop
*mode06
	;▼マイドキュメント
	ShellApp->"Open" ssfPERSONAL : stop
*mode07
	;▼お気に入り
	ShellApp->"Open" ssfFAVORITES : stop
*mode08
	;▼スタートアップ
	ShellApp->"Open" ssfSTARTUP : stop
*mode09
	;▼最近使ったファイル
	ShellApp->"Open" ssfRECENT : stop
*mode10
	;▼送る
	ShellApp->"Open" ssfSENDTO : stop
*mode11
	;▼ごみ箱
	ShellApp->"Open" ssfBITBUCKET : stop
*mode12
	;▼スタートメニュー
	ShellApp->"Open" ssfSTARTMENU : stop
*mode13
	;▼デスクトップ(フォルダ)
	ShellApp->"Open" ssfDESKTOPDIRECTORY : stop
*mode14
	;▼マイコンピュータ
	ShellApp->"Open" ssfDRIVES : stop
*mode15
	;▼ネットワークコンピュータ
	ShellApp->"Open" ssfNETWORK : stop
*mode16
	;▼NetHood
	ShellApp->"Open" ssfNETHOOD : stop
*mode17
	;▼フォント
	ShellApp->"Open" ssfFONTS : stop
*mode18
	;▼テンプレート
	ShellApp->"Open" ssfTEMPLATES : stop

*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(ShellApp)==6 {
		if varuse(ShellApp)==1 : delcom ShellApp
	}
	end
      コンピュータの検索を表示させる     

エクスプローラの検索で他のコンピュータを選択した時に表示されるダイアログをプログ ラム上から起動させます。 WSHでは、シェルのFindComputerメソッドという便利なもが提 供されています。サンプルスクリプト(comobj12.hsp) では、 newcom命令でShellApp変数 とWshShell変数をCOMオブジェクト型として初期化したのち、 シェルのFindComputerメソ ッドでコンピュータの検索ダイアログを起動させます。完全に表示されるまで、監視用ル ープにて、 AppActivateメソッドでダイアログのタイトル名(キャプション)を捉えます 。このように外部起動をさせるものは、アクティブになるまでの監視用のルーチンが必要 となります。
	;***** コンピュータの検索を表示  (comobj12.hsp) *****

	newcom ShellApp, "Shell.Application"
	newcom WshShell, "WScript.Shell"

	;▼検索結果 - コンピュータ
	ShellApp->"FindComputer"

	;▼アクティブになるまで待つ (有限ループとしておく)
	repeat 1
		wait 100
		ret=WshShell("AppActivate", "検索結果 - コンピュータ")
		if ret==1 : break
	loop
	delcom WshShell
	delcom ShellApp
	stop
      ファイルの検索を表示させる     

エクスプローラの検索でファイルやフォルダを選択した時に表示されるダイアログをプロ グラム上から起動させます。WSHでは、シェルのFindFilesメソッドという便利なもが提供 されています。サンプルスクリプト(comobj13.hsp) では、 newcom命令でShellApp変数と WshShell変数をCOMオブジェクト型として初期化したのち、シェルのFindFilesメソッドで ファイルの検索ダイアログを起動させます。完全に表示されるまで、監視用ループにて、 AppActivateメソッドでダイアログのタイトル名(キャプション)を捉えます。 このように外部起動をさせるものは、アクティブになるまでの監視用のルーチンが必要と なります。
	;***** ファイルの検索を表示  (comobj13.hsp) *****

	newcom ShellApp, "Shell.Application"
	newcom WshShell, "WScript.Shell"

	;▼ファイルの検索
	ShellApp->"FindFiles"

	;▼アクティブになるまで待つ (有限ループとしておく)
	repeat 1
		wait 100
		ret=WshShell("AppActivate", "検索結果")
		if ret==1 : break
	loop
	delcom WshShell
	delcom ShellApp
	stop
      日付と時刻のプロパティを表示させる     

タスクトレイにある時計の日付と時刻の調整から起動される日付と時刻のプロパティをプ ログラム上から表示します。WSHでは、シェルのSetTimeメソッドという便利なもが提供さ れています。 サンプルスクリプト(comobj14.hsp) では、 newcom命令でShellApp変数とWshShell変数を COMオブジェクト型として初期化したのち、シェルのSetTimeメソッドで日付と時刻のプロ パティを表示起動させます。完全に表示されるまで、監視用ループにて、 AppActivateメソッドでダイアログのタイトル名(キャプション)を捉えます。 このように外部起動をさせるものは、アクティブになるまでの監視用のルーチンが必要と なります。
	;***** 日付と時刻のプロパティを表示  (comobj14.hsp) *****

	newcom ShellApp, "Shell.Application"
	newcom WshShell, "WScript.Shell"

	;▼日付と時刻のプロパティ
	ShellApp->"SetTime"

	;▼アクティブになるまで待つ (有限ループとしておく)
	repeat 1
		wait 100
		ret=WshShell("AppActivate", "日付と時刻のプロパティ")
		if ret==1 : break
	loop
	delcom WshShell
	delcom ShellApp
	stop
      タスクバーのプロパティを表示する     

スタートメニューの設定から起動するタスクバーとスタートメニューのプロパティを表示 します。WSHでは、シェルのTrayPropertiesメソッドという便利なもが提供されています。 サンプルスクリプト(comobj15.hsp) では、 newcom命令でShellApp変数とWshShell変数を COMオブジェクト型として初期化したのち、シェルのTrayPropertiesメソッドでタスクバー のプロパティをを表示起動させます。 完全に表示されるまで監視用ループにて、 AppActivateメソッドでダイアログのタイトル 名(キャプション)を捉えます。このように外部起動をさせるものは、アクティブになる までの監視用のルーチンが必要となります。
	;***** タスクバーのプロパティ表示  (comobj15.hsp) *****

	newcom ShellApp, "Shell.Application"
	newcom WshShell, "WScript.Shell"

	;▼タスクバーのプロパティ
	ShellApp->"TrayProperties"

	;▼アクティブになるまで待つ (有限ループとしておく)
	repeat 1
		wait 100
		ret=WshShell("AppActivate", "タスク バーとスタート メニューのプロパティ")
		if ret==1 : break
	loop
	delcom WshShell
	delcom ShellApp
	stop
      IEのキャッシュを削除する     

少しトリッキーな方法ですが、 Runメソッドでインターネットのプロパティを表示させて 、下記のような一連の動作を行なわせるために、SendKeysで、キー送信して実行します。
   1.ALT+F (ファイルの削除ダイアログ表示)
   2.ALT+D (すべてのオフラインコンテンツの削除にチエックを入れる)
   3.Enter(OKボタンを押す)
   4.ALT+D+ESC(閉じる)

	;***** IEのキャッシュを削除  (comobj21.hsp) *****

	newcom WshShell, "WScript.Shell"
	;▼インターネットのプロパティ
	WshShell->"Run" "control inetcpl.cpl"
	wait 100
	WshShell->"SendKeys" "%F" 
	wait 100
	WshShell->"SendKeys" "%D{ENTER}" 
	wait 100
	WshShell->"SendKeys" "%D{ESC}" 
	delcom WshShell
	mes "IEのキャッシュ削除が完了しました。"
	stop
      システムのプロパティを表示する     

システムのプロパティを表示します。方法は他のプロパティ表示方法と同じですが、特殊 フォルダーでコントロールパネルのシステムプロパティのFolderオブジェクトを取得する のにNameSpaceプロパティで、 引数をnullとします。そして、右クリックメニューに相当 する動作をさせるためにInvokeVerbメソッドを実行させています。
	;***** システムのプロパティを表示  (comobj23.hsp) *****

	newcom ShellApp, "Shell.Application"

	;▼システムプロパティ
	comres objFolder : ShellApp->"NameSpace" ""
	objItems=objFolder("Items")
	objItem=objItems("Item")
	objItem->"InvokeVerb" "プロパティ(&R)"
	delcom objFolder
	delcom objItems
	delcom objItem
	delcom ShellApp
	stop
      フォルダのプロパティを表示する     

任意に指定したフォルダのプロパティを表示します。 NameSpaceプロパティでFolderオブジェクトを取得します。ここでは、NameSpaceでフォル ダオブジェクトに実行ファイルのディレクトリを指定して取得しています。そして、右ク リックメニューに相当する動作をさせるためにInvokeVerbメソッドを実行させています。 指定した実行ファイルのフォルダのプロパティが表示されます。 サンプルスクリプト(comobj24.hsp)をスクリプトエディタから実行した場合は、スクリプ トエディタが実行ファイルとなるので、HSP3の本体が格納されているディレクトリとなり ます。
	;***** フォルダのプロパティを表示  (comobj24.hsp) *****

	newcom ShellApp, "Shell.Application"

	comres objFolder

	;▼指定フォルダ
	ShellApp->"NameSpace" dirinfo(1)
	objItems=objFolder("Items")
	objItem=objItems("Item")
	objItem->"InvokeVerb" "プロパティ(&R)"
	delcom objFolder
	delcom objItems
	delcom objItem
	delcom ShellApp
	stop
      ファイルのプロパティを表示する     

任意に指定したファイルのプロパティを表示します。 ファイル選択ダイアログを表示して、ユーザーにファイルを選択させた後、 NameSpaceプ ロパティでFolderオブジェクトを取得します。このとき、引数として選択されたファイル をHSPのgetpath関数でディレクトリ情報のみを取得します。Itemsオブジェクトの取得は、 引数として、 getpath関数でディレクトリ情報を取り除く拡張子を含むファイル名を渡し ます。そして、右クリックメニューに相当する動作をさせるためにInvokeVerbメソッドを 実行させています。この一連の処理により、任意指定したファイルのプロパティが表示さ れます。
	;***** ファイルのプロパティを表示  (comobj25.hsp) *****

	dialog "*.*",16 : if stat==0 : stop

	newcom ShellApp, "Shell.Application"

	;▼指定ファイル
	comres objFolder : ShellApp->"NameSpace" getpath(refstr,32)
	objItems=objFolder("Items")
	objItem=objItems("Item",getpath(refstr,8))
	objItem->"InvokeVerb" "プロパティ(&R)"
	delcom objFolder
	delcom objItems
	delcom objItem
	delcom ShellApp
	stop
      指定フォルダのファイル名を列挙する     

指定したフォルダのファイル名を列挙します。サンプルスクリプト(comobj29.hsp)では、 デスクトップフォルダを取得後、列挙させるための、ループ回数を取得するのに、 Count プロパティでファイル数を得ています。そして、取得したファイル数をループ回数として 、Nameプロパティでファイル名を列挙させます。
	;***** 指定フォルダのファイル名を列挙  (comobj29.hsp) *****

	newcom ShellApp, "Shell.Application"
	comres objFolder : ShellApp->"NameSpace" 0
	objItems=objFolder("Items")
	num=objItems("Count")
	pos 10,10
	repeat num
		if num<=0 : break
		comres objItem  : objItems->"Item" cnt
		oFile=objItem("Name")
		mes oFile
	loop
	delcom objFolder
	delcom objItems
	delcom objItem
	delcom ShellApp
	stop
      ファイルの情報を取得する     

ファイルのフルパス名や拡張子といった情報を取得します。HSPの標準関数には、getpath 関数というのがあり、 getpath関数機能のWSH版です。 ファイルの情報を取得するには、 Scripting.FileSystemObjectを使います。 サンプルスクリプト(comobj31.hsp)では、newcom命令でobjFS変数をCOMオブジェクト型と して初期化したのち、FileExistsメソッドと任意に指定したファイル名を引数として、フ ァイルの存在を確認するため、 objexFileオブジェクト変数に代入しています。対象ファ イルの存在が確認できたなら、ファイル情報を取得するメソッドにファイル名を引数とし て与えて、情報を取得します。利用するメソッドは、次の通りです。
   取得する情報            メソッド              対応するHSP getpath関数のタイプ
   ファイル名              GetFileName              8
   フルパス                GetAbsolutePathName      0
   親フォルダ名            GetParentFolderName     32
   ドライブ名              GetDriveName             -
   拡張子                  GetExtensionName         2
   拡張子を除いた名前      GetBaseName              1

	;***** ファイル情報の取得 (HSPのgetpath相当)  (comobj31.hsp) *****

	onexit *owari
	newcom objFS, "Scripting.FileSystemObject"
	sdim sFile,260,10

	;▼ファイルの指定
	dialog "",16 : if stat==0 : stop

	;▼ファイル存在の確認  (objexFile=0 : なし,objexFile=-1 : あり)
	objexFile=objFS("FileExists", refstr)
	if objexFile==0 {
		dialog "ファイルは存在しません。 結果="+objexFile
		stop
	}
	;▼ファイル情報の取得
	comres sFile(0) : objFS->"GetFileName" refstr
	comres sFile(1) : objFS->"GetAbsolutePathName" refstr
	comres sFile(2) : objFS->"GetParentFolderName" refstr
	comres sFile(3) : objFS->"GetDriveName" refstr
	comres sFile(4) : objFS->"GetExtensionName" refstr
	comres sFile(5) : objFS->"GetBaseName" refstr

	;▼ファイル情報の表示
	pos 10,10
	mes "ファイル名 : "+sFile(0)
	mes "フルパス : "+sFile(1)
	mes "親フォルダ名 : "+sFile(2)
	mes "ドライブ名 : "+sFile(3)
	mes "拡張子 : "+sFile(4)
	mes "拡張子を除いた名前 : "+sFile(5)

	mes " "
	mes "処理が終了しました。"
	stop

*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(objFS)==6 {
		if varuse(objFS)==1 : delcom objFS
	}
	end
      ファイルのサイズや属性等の詳細情報を取得する     

ファイルの詳細情報の取得には、FileSystemObjectを使います。 サンプルスクリプト(comobj32.hsp)では、ファイル選択ダイアログで任意のファイルを選 択して、ファイル名を引数とするGetFileメソッドに渡し、 objFInfoオブジェクト変数に ファイル情報を代入します。そして、各プロパティを引数として詳細情報を参照します。
FileSystemObjectのファイル情報関連のプロパティは、次のようになっていますが、利用 環境によっては、全ての情報を取得することができません。
  ・FileSystemObjectのファイル情報関連のプロパティ

  プロパティ          意            味
  Attributes          ファイルの属性の設定や値の取得を行なう
  DateCreated         ファイルの作成日時を返す。変更不可
  DateLastAccessed    ファイルが最後にアクセスされたときの日付を返す。変更不可
  DateLastModified    ファイルが最後に変更されたときの日時を返す。変更不可
  Drive               ファイルが格納されているドライブ名を返す
  Name                ファイル名を返す。変更可能
  ParentFolder        ファイルが格納されているフォルダ名を返す。変更不可
  Path                ファイルのパスを返す。
  ShortName           DOSの8.3形式のファイル名を返す。
  ShortPath           DOSの8.3形式のフォルダ名を返す。
  Size                ファイルのサイズ(バイト)を返す。
  Type                ファイルの種類 ( 拡張子から判定 ) を返す。

	;***** ファイル詳細情報の取得  (comobj32.hsp) *****

	onexit *owari
	newcom objFS, "Scripting.FileSystemObject"
	sdim sFile,260,16

	;▼ファイルの指定
	dialog "",16 : if stat==0 : stop

	;▼ファイル存在の確認  (objexFile=0 : なし,objexFile=-1 : あり)
	objexFile=objFS("FileExists", refstr)
	if objexFile==0 {
		dialog "ファイルは存在しません。 結果="+objexFile
		stop
	}
	;▼ファイル情報の取得
	objFInfo=objFS("GetFile", refstr)

	sFile(0)=objFInfo("Name")
	sFile(1)=objFInfo("ShortName")
	sFile(2)=objFInfo("Path")
	sFile(3)=objFInfo("ShortPath")

	;※取得できない
	;sFile(4)=objFInfo("ParentFolder")
	;sFile(5)=objFInfo("Drive")

	size=objFInfo("Size")
	sFile(7)=objFInfo("Type")

	att=objFInfo("Attributes")
	if (att&1)==1   : sFile(8)="読み取り専用"
	if (att&2)==2   : sFile(8)="隠しファイル"
	if (att&4)==4   : sFile(8)="システム"
	if (att&16)==16 : sFile(8)="フォルダ"
	if (att&32)==32 : sFile(8)="アーカイブ"

	;※取得できない
	;sFile(9)=objFInfo("DateCreated")
	;sFile(10)=objFInfo("DateLastAccessed")
	;sFile(11)=objFInfo("DateLastModified")

	;▼ファイル情報の表示
	pos 10,10
	mes "名前 : "+sFile(0)
	mes "DOSでの名前(8+3) : "+sFile(1)
	mes "パス : "+sFile(2)
	mes "DOSでのパス : "+sFile(3)
	mes "親フォルダのパス : "+sFile(4)
	mes "ドライブのパス : "+sFile(5)
	mes "サイズ(バイト) : "+size+" (byte)"
	mes "ファイルの種類 : "+sFile(7)
	mes "属性 : "+sFile(8)
	mes "作成日時 : "+sFile(9)
	mes "アクセス日 : "+sFile(10)
	mes "更新日時 : "+sFile(11)

	mes " "
	mes "処理が終了しました。"
	stop

*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(objFS)==6 {
		if varuse(objFS)==1 : delcom objFS
	}
	end
      ショートカットを作成する     

デスクトップにショートカットを作成します。 newcom命令でWshShell変数、objFileSys変数をCOMオブジェクト型として初期化したのち、 以下の処理手順で行ないます。
 (1)デスクトップフォルダオブジェクト  (GetFolderオブジェクト)
 (2)作成するショートカットのパス      (Pathプロパティ)
 (3)ショートカットオブジェクトの作成  (CreateShortcutオブジェクト)
 (4)リンク先パス ("TargetPath")
    ---- (任意に設定する) ----
    ・引数を指定 ("Arguments")
    ・作業領域を指定 ("WorkingDirectory")
    ・アイコンの位置を指定 ("Path, Index"と指定する。)
    ・ショートカットキーを指定 ("Hotkey")
    ・説明文を付加 ("Description")
 (5)ショートカットの作成 ("Save")

となります。最後に作成したオブジェクト変数をdelcom命令で開放します。

	;***** ショートカットの作成  (comobj33.hsp) *****

	newcom WshShell, "WScript.Shell"
	newcom objFileSys, "Scripting.FileSystemObject"

	;▼デスクトップフォルダオブジェクト
	fldDesktop=objFileSys("GetFolder",WshShell("SpecialFolders","Desktop"))

	;▼作成するショートカットのパス
	pathname=fldDesktop("Path")

	;▼ショートカットのリンク先
	;***** URLを指定する場合の例 (変更すること) *****
	pathname+= "\\onionsoft.url"
	sLink = "http://www.onionsoft.net/hsp/"

	;***** exeファイルを指定する場合の例 (変更すること) *****
	;pathname+= "\\hsed3.lnk"
	;sLink = dirinfo(1)+"\\hsed3.exe"

	;▼ショートカットオブジェクトの作成
	oShellLink=WshShell("CreateShortcut",pathname)
	;▼リンク先パス
	oShellLink("TargetPath") = sLink

	;▼▼▼▼  以下の項目は任意に指定する項目例  ▼▼▼▼

	;●引数を指定
	;oShellLink->"Arguments" "******.hsp"
	;●作業領域を指定
	;oShellLink->"WorkingDirectory" "C:\\"
	;●アイコンの位置を指定 ("Path, Index"と指定する。)
	;oShellLink->"IconLocation" "...\\*****.exe,0"
	;●ショートカットキーを指定
	;oShellLink->"Hotkey" "ALT+CTRL+F"
	;●説明文を付加
	;oShellLink->"Description" "これはショートカットのテストです"

	;▼ショートカットの作成
	oShellLink->"Save"

	delcom fldDesktop
	delcom oShellLink
	delcom WshShell
	delcom objFileSys
	dialog "デスクトップにショートカットが作成されました。",0,"確認"
	stop
      ドライブの情報を取得する     

ドライブの種別や総容量、空き容量、利用可能な空き容量等を取得します。 これらの情報を取得するには、FileSystemObjectオブジェクトを使います。サンプルスク リプト(comobj34.hsp)では、newcom命令でobjFS変数をCOMオブジェクト型として初期化し たのち、指定ドライブ名を引数として、GetDriveメソッドでobjsrcオブジェクト変数に代 入します。あとは、取得したい情報のプロパティを指定して参照します。 注意事項になりますが、2GB以上の領域は認識しないようです。
    取得情報                        プロパティ
   ・ドライブ名                     DriveLetter
   ・ドライブの種類                 DriveType
   ・ファイルシステムの種類         FileSystem
   ・ドライブの総容量               TotalSize
   ・ドライブの空き容量             FreeSpace
   ・ドライブの利用可能な空き容量   AvailableSpace

HSPの標準命令では、fxinfo命令というものがあり、同等の情報が取得できます。

	;***** ドライブ情報の取得  (comobj34.hsp) *****

	newcom objFS, "Scripting.FileSystemObject"

	objsrc=objFS("GetDrive","c:")
	totalsize=objsrc("TotalSize")
	freespace=objsrc("FreeSpace")
	availspace=objsrc("AvailableSpace")
	drive=objsrc("DriveLetter")
	filesys=objsrc("FileSystem")
	dno=objsrc("DriveType")
	sdim dvtype,6
	dvtype   ="不明","リムーバブルディスク","ハードディスク"
	dvtype(3)="ネットワークドライブ","CD-ROM","RAMディスク"
	repeat 6
		if dno==cnt { drivetype=dvtype(dno) : break }
	loop

	;▼取得情報表示
	pos 10,10
	mes "***** ドライブの総容量 *****"
	mes ""+ strf("%.f",totalsize)+" [Byte]"
	totalsize=totalsize/1024
	mes ""+ strf("%.f",totalsize)+" [KB]"
	totalsize=totalsize/1024
	mes ""+ strf("%.f",totalsize)+" [MB]"
	totalsize=totalsize/1024
	mes ""+ strf("%.2f",totalsize)+" [GB]"
	mes ""
	mes "***** ドライブの空き容量 *****"
	mes ""+ strf("%.f",freespace)+" [Byte]"
	freespace=freespace/1024
	mes ""+ strf("%.f",freespace)+" [KB]"
	freespace=freespace/1024
	mes ""+ strf("%.f",freespace)+" [MB]"
	freespace=freespace/1024
	mes ""+ strf("%.2f",freespace)+" [GB]"
	mes ""
	mes "***** ドライブの利用可能な空き容量 *****"
	mes ""+ strf("%.f",availspace)+" [Byte]"
	availspace=availspace/1024
	mes ""+ strf("%.f",availspace)+" [KB]"
	availspace=availspace/1024
	mes ""+ strf("%.f",availspace)+" [MB]"
	availspace=availspace/1024
	mes ""+ strf("%.2f",availspace)+" [GB]"
	mes ""
	mes "***** ドライブ名 *****"
	mes "ドライブ名 : "+drive
	mes ""
	mes "***** ファイルシステムの種類 *****"
	mes "ファイルシステムの種類 : "+filesys
	pos 320,10
	mes "***** ドライブの種類 *****"
	mes drivetype

	delcom objsrc
	delcom objFS
	stop
      ローカルディスクのプロパティを表示する     

ローカルディスクの使用可能領域や空き領域、ディスクのクリーンアップ等が行なえるダ イアログを表示します。シェルの NameSpaceで対象とするローカルドライブを指定して、 右クリックメニューに相当する動作をさせるためにInvokeVerbメソッドでプロパティ(&R) を引数として実行します。
	;***** ローカルディスクのプロパティを表示  (comobj35.hsp) *****

	newcom ShellApp, "Shell.Application"

	comres objFolder : ShellApp->"NameSpace" "c:\\"
	objItems=objFolder("Items")
	objItem=objItems("Item")
	objItem->"InvokeVerb" "プロパティ(&R)"

	delcom objFolder
	delcom objItems
	delcom objItem
	delcom ShellApp
	stop
      レジストリを利用して値を取得する     

レジストリに書き込まれている各種システム情報を取得します。例として、システムフォ ルダ関連の取得します。レジストリから情報を取得する場合は、キーとセッションを指定 しなければなりません。ShellオブジェクトのRegReadメソッドを使用します。また、レジ ストリのルート・キーを指定する場合は、WSHでは、省略名が使えます。 たとえば、HKCUは、HKEY_CURRENT_USERの略称となります。
  ・レジストリのルート・キーの省略名と概要

  ルート・キー         省略名   概        要
  HKEY_CURRENT_USER    HKCU     現在ログイン中のユーザーに関する諸設定 
  HKEY_LOCAL_MACHINE   HKLM     システム全体、全登録ユーザーに関する設定情報 
  HKEY_CLASSES_ROOT    HKCR     拡張子やアイコン情報等、Windowsで扱うファイル全般に関する情報の管理
  HKEY_USERS           HKU      ユーザー別の設定を管理 
  HKEY_CURRENT_CONFIG  HKCC     ハードウェア設定などの設定

フォルダのパス名を取得する場合は、 RegReadメソッドでルートキーとセッションを引数 として実行します。
	;***** レジストリからの値の取得  (comobj36.hsp) *****

	sdim sFolder,260
	sdim sestr,24,20
	;▼システムフォルダ関連の取得 (セッション名)
		sestr(0)  = "Desktop"
		sestr(1)  = "Templates"
		sestr(2)  = "AppData"
		sestr(3)  = "Start Menu"
		sestr(4)  = "Programs"
		sestr(5)  = "Startup"
		sestr(6)  = "Fonts"
		sestr(7)  = "SendTo"
		sestr(8)  = "Recent"
		sestr(9)  = "Favorites"
		sestr(10) = "NetHood"
		sestr(11) = "Personal"
		sestr(12) = "Cache"
		sestr(13) = "Cookies"
		sestr(14) = "History"
		sestr(15) = "PrintHood"
		sestr(16) = "My Pictures"
		sestr(17) = "Local AppData"
		sestr(18) = "Administrative Tools"

	font "MS ゴシック",14,0
	pos 10,10
	Regkey ="HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\"
	Regkey+="Explorer\\Shell Folders\\"
	newcom WshShell, "WScript.Shell"
	repeat 19
		comres sFolder
		WshShell->"RegRead" Regkey+sestr(cnt)
		mes sFolder
	loop
	delcom WshShell
	stop
      ネットワークユーザーの情報を取得する     

ネットワークユーザーのドメイン、コンピュータ名、ユーザー名を取得します。これらの 情報を取得するには、Networkオブジェクトを利用します。 サンプルスクリプト(comobj37.hsp)では、newcom命令で objNetwork変数をCOMオブジェク ト型として初期化したのち、UserDomain、ComputerName、UserNameの各プロパティで参照 します。
	;***** ネットワークユーザー情報の取得  (comobj37.hsp) *****

	newcom objNetwork, "WScript.Network"

	sdim netinfo,32,3
	netinfo(0)=objNetwork("UserDomain")
	netinfo(1)=objNetwork("ComputerName")
	netinfo(2)=objNetwork("UserName")

	pos 10,10
	mes "ドメイン : "+netinfo(0)
	mes "コンピュータ名 : "+netinfo(1)
	mes "ユーザー名 : "+netinfo(2)

	delcom objNetwork
	stop
      ネットワークのユーザー情報、ドライブ,プリンタ割り当て情報を取得する     

ネットワーク関連の情報を取得するには、Networkオブジェクトを利用します。 サンプルスクリプト(comobj38.hsp)では、newcom命令で objNetwork変数をCOMオブジェク ト型として初期化したのち、ユーザー情報を取得します。 ユーザー情報はUserDomain、ComputerName、UserNameの各プロパティで参照します。 次にネットワークドライブ割り当てで、EnumNetworkDrivesメソッドにてoDrives変数に代 入して、 Countプロパティで割り当てドライブ数を取得します。割り当てドライブ数が取 得できたら、現在割り当てられているドライブの一覧を列挙します。同様にして、ネット ワークプリンタの割り当てについても行ないます。 ネットワークプリンタは、EnumPrinterConnectionsメソッドを利用します。当然ですが、 ネットワーク関連の情報では、ネットワークの接続定義等がされていないと取得できませ ん。
	;***** ネットワークドライブ,プリンタ割り当て情報  (comobj38.hsp) *****

	newcom objNetwork, "WScript.Network"

	;▼ユーザー情報
	sdim netinfo,32,3
	netinfo(0)=objNetwork("UserDomain")
	netinfo(1)=objNetwork("ComputerName")
	netinfo(2)=objNetwork("UserName")

	pos 10,10
	mes "ドメイン : "+netinfo(0)
	mes "コンピュータ名 : "+netinfo(1)
	mes "ユーザー名 : "+netinfo(2)

	;▼ネットワークドライブ割り当て
	oDrives=objNetwork("EnumNetworkDrives")
	drivenum=oDrives("Count")
	mes ""
	mes "割当ドライブ数 : "+drivenum/2
	mes ""
	for i,0,drivenum,2
		mes oDrives("Item", i)+" "+ oDrives("Item", i+1)
	next

	mes ""

	;▼ネットワークプリンタ割り当て
	oPrinters=objNetwork("EnumPrinterConnections")
	printnum=oPrinters("Count")
	mes "割当プリンタ数 : "+printnum/2
	for i,0,printnum,2
		mes oPrinters("Item", i)+" "+ oPrinters("Item", i+1)
	next

	delcom oDrives
	delcom oPrinters
	delcom objNetwork
	stop
      右クリックメニューの「送る」にショートカットを追加する     

右クリックメニューの「送る」に任意のショートカットを追加します。処理の手順としては 、次のようになります。
  (1)表示名を指定                        (メニューの表示名)
  (2)リンク先パスを指定                  (リンクさせるファイルのフルパスを指定)
  (3)'SendTo' 送るフォルダの取得         ("SpecialFolders"メソッド)
  (4)ショートカットオブジェクトの作成    ("CreateShortcut"メソッド)
  (5)リンク先パス                        ("TargetPath"メソッド)
  (6)作業領域を指定                      ("WorkingDirectory"メソッド)
  (7)ウィンドウスタイル指定              ("WindowStyle"メソッド) 1 = 通常サイズ
  (7)ショートカットの作成                ("Save"メソッド)

最後に作成したオブジェクト変数を開放します。

	;***** 右クリックメニューの「送る」にショートカットを追加  (comobj39.hsp) *****

	newcom WshShell, "WScript.Shell"
	newcom objFS, "Scripting.FileSystemObject"

	;▼表示名を指定
	dspname="スクリプトエディタ"
	;リンク先パスを指定
	sLink = dirinfo(1)+"\\hsed3.exe"

	;▼'SendTo' 送るフォルダの取得
	SendfolName=WshShell("SpecialFolders","SendTo")
	;▼ショートカットオブジェクトの作成
	oShellLink=WshShell("CreateShortcut",SendfolName+"\\"+dspname+".lnk")
	;▼リンク先パス
	oShellLink("TargetPath") = sLink
	;▼作業領域を指定
	comres Workdir : objFS->"GetParentFolderName" sLink
	oShellLink->"WorkingDirectory" Workdir
	;▼ウィンドウスタイル指定
	oShellLink("WindowStyle") = 1
	;▼ショートカットの作成
	oShellLink->"Save"

	dialog "「送る」にショートカットを追加しました。",0,"確認"

	delcom oShellLink
	delcom objFS
	delcom WshShell
	stop
      ディスクのクリーンアップを実行させる     

シェルのRunメソッドを使って、cleanmgr.exe を起動させます。ブラウザのキャッシュや 一時ファイルなどによって大量のディスクが消費されていますが、これらを一括で削除し たり、圧縮したりする機能です。
	;***** ディスク クリーンアップの実行  (comobj41.hsp) *****

	gsel 0,-1
	newcom WshShell, "WScript.Shell"

	WshShell->"Run" "cleanmgr /sagerun:100"
	delcom WshShell
	wait 100
	end
      HSPのスクリプト内からVBScriptを実行させる     

HSPのスクリプト内にVBScriptのコードを直接記述して実行させます。 実行には、ScriptControlオブジェクトを使います。 サンプルスクリプト(comobj42.hsp) では、newcom命令でobjVBsc変数をCOMオブジェクト型として初期化したのち、使う言語を 設定します。 そして、使いたいVBSのコードを文字列として追加します。このとき、サブ ルーチンか関数の形式としなければ実行できません。 Runメソッドで第一引数に追加したコードのサブルーチン(関数名)を文字列として与え ると追加したコード内の関数が呼び出されます。
	;***** ScriptControlでVBScriptを実行  (comobj42.hsp) *****

	newcom objVBsc, "ScriptControl"
	objVBsc("Language")="VBScript"

	;VBScriptのコードを記述する
	vbs = {"
		Sub vbcmd(s) : MsgBox s : End Sub
	"}
	objVBsc->"AddCode" vbs
	objVBsc->"Run" "vbcmd", "HSP Script Programing"
	delcom objVBsc
	stop
      コントロールパネルの各種プロパティを表示させる     

利用環境(OS)にも左右されるのですが、各共通のものだけを任意に選んで表示させて見 ます。表示させるには、シェルの Runメソッドに引数として実行ファイル名を渡します。
	;***** コントロールパネルを開く  (comobj43.hsp) *****

	onexit *owari
	font "MS ゴシック",14,0 : objmode 2
	objsize 400,26
	pos 40,40
		button "インターネットのプロパティを開く",*mode01
		button "アプリケーションの追加と削除のプロパティを開く",*mode02
		button "画面のプロパティを開く",*mode03

	newcom WshShell, "WScript.Shell"
	stop

*mode01
	;▼インターネットのプロパティ
	WshShell->"Run" "control INETCPL.CPL" : stop

*mode02
	;▼アプリケーションの追加と削除のプロパティ
	WshShell->"Run" "control APPWIZ.CPL" : stop

*mode03
	;▼画面のプロパティ
	WshShell->"Run" "control DESK.CPL" : stop

*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(WshShell)==6 {
		if varuse(WshShell)==1 : delcom WshShell
	}
	end
      スクリプトの中にHTMLコードを埋め込んで実行させる     

HSPのスクリプトの中にHTMLのコードを直接記述して、IEを起動し実行します。 実際は、 IEに空のページを作り、Document.Writeを使ってHTMLを作って表示させるものです。 newcom命令でobjIE変数をCOMオブジェクト型として初期化したのち、Navigateメソッドで 空のページを作ります。その後、Document.Writeを使ってHTMLを作ります。 サンプルスクリプト(comobj44.hsp)では、実行した後に、しばらくして閉じて終了させる ようにしています。HTMLのコードを文字列として格納しているhtmlbase変数内に、自由に HTMLコードを記述して下さい。長いコード(タグ)を書く場合は、事前にオーバーフロー しないように文字列バッファを確保しておいて下さい。
	;***** HTMLを作成して実行  (comobj44.hsp) *****

	;▼IE(InternetExplorer.Application)オブジェクトを作成
	newcom objIE, "InternetExplorer.Application"

	objIE("Silent")  = 1
	objIE("Visible") = 1

	;▼Document.Writeを使う時は、空のページを作る
	objIE->"Navigate" "about:blank"

	sdim htmlbase,5000
	;▼Document.Writeを使ってHTMLを作る
	objDoc=objIE("Document")
	htmlbase = {"
    <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
    <html lang=\"ja-JP\">
    <head><title>HSP-NEXT</title>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift-JIS\">
    <meta name=\"robots\" content=\"noindex,nofollow\">
    <meta content=\"MSHTML 5.50.4807.2300\" name=GENERATOR>
    </head>
    <body bgcolor=\"#fdfdf9\" topmargin=0 leftmargin=0 marginwidth=0 marginright=0>
    <font size=+4>HTMLのテストです!</font></br>
    </body>
    </html>
	"}
	objDoc->"Write" htmlbase

	;▼少し待つ
	wait 500

	;▼IEを終了させる
	objIE->"Quit"

	mes "処理が終了しました。"

	;▼オブジェクトを破棄
	delcom objDoc
	delcom objIE
	stop
      HSPからIE起動して、検索エンジンに検索させる     

遠隔制御のひとつの方法として、 execScriptでJScriptを実行して実現します。ポイント は、対象とする検索エンジンの検索キーやオプションを指定する入力ボックスの部分と実 行するサブミットボタンの部分が、どのようなHTML構造になっているのかを、事前にHTML ソースを調べて把握しておく必要があります。ここでは、比較的構造がシンプルなgoogle をサンプルとして、検索キーに 'HSP'として指定して、検索させるサンプルを掲載します 。newcom命令でobjIE変数をCOMオブジェクト型として初期化したのち、Navigateメソッド で、URLにgoogleのアドレスを指定して、IEを起動させます。 Documentメソッドで、objDocに代入して、検索を自動実行させるための JScriptのコード を記述します。コード中の valueは、検索キーを指定する入力ボックスの値で、ここでは 、'HSP'を指定しています。次にelements(5).click(); は、ウェブ全体から検索と、日本 語のページを検索のラジオボタンの部分で、日本語のページを検索に切替えています。 そして、btnG.click(); の部分で検索ボタンをクリックさせるようにしています。このコ ードをexecScriptを使って実行させます。
	;***** 検索キーを指定してgoogleで自動検索  (comobj45.hsp) *****

	;▼IE(InternetExplorer.Application)オブジェクトを作成
	newcom objIE, "InternetExplorer.Application"

	objIE("Silent")  = 1
	objIE("Visible") = 1

	;▼googleを開く
	sURL = "http://www.google.com/intl/ja/"
	objIE->"Navigate" sURL
	gosub *busywait
	objDoc=objIE("Document")
	windhtml=objDoc("parentWindow")
	jsp = {"
		document.f.q.value = 'HSP';
		document.f.elements(5).click();
		document.f.btnG.click();
	"}
	windhtml->"execScript" jsp, "JScript"
	gosub *busywait
	;▼検索されたページのURLを取得
	sLURL=objIE("LocationURL")

	delcom objDoc
	delcom windhtml
	delcom objIE
	pos 10,10 : mes sLURL
	stop

*busywait
	;▼ページの読み込みが終了するまで待つ
	title "ページを読み込み中です。"
	repeat
		wait 10
		if objIE("Busy")==0 : break
	loop
	objDoc=objIE("Document")
	repeat
		wait 10
		if (objdoc("readyState") == "complete") : break
	loop
	title "ページが表示されました。"
return
      サーバーからGMT(グリニッジ標準時)を取得する     

http://www.yahoo.co.jpのサーバーからGMT(グリニッジ標準時)を取得します。 XMLHTTPコントロールにより、指定したURLを引数として、HTTPリクエストを送信します。 getResponseHeaderで指定したレスポンスヘッダの内容を取得します。 statusは、HTTPレ スポンスステータスコードで、200ならOK、404ならNot Foundとなります。 先程のgetResponseHeaderで"Date"を指定して、サーバーからGMT(グリニッジ標準時)を取 得しています。結果は、sDate変数に返されます。
	;***** サーバからGMT(グリニッジ標準時)を取得  (comobj46.hsp) *****

	pos 10,10 : mes "ネット接続環境によっては取得に時間がかかる場合があります。"

	newcom objXMLHTTP, "Microsoft.XMLHTTP"

	sURL = "http://www.yahoo.co.jp/"
	objXMLHTTP->"Open" "HEAD", sURL, 0
	objXMLHTTP->"send"

	if objXMLHTTP("status") = 200 {
		sDate=objXMLHTTP("getResponseHeader", "Date")
		;取得したsDate(GMT)を編集する場合
		;sDate=strmid(sDate,5,20)
		;sDate=strmid(sDate,0,2)+"-"+strmid(sDate,3,3)+"-"+strmid(sDate,7,4)+strmid(sDate,11,9)
		mes " "
		mes sDate
	}else{
		dialog "接続に失敗致しました。",0,"エラー"
	}
	delcom objXMLHTTP
	stop
      インターネットからhtmlテキストを取得する     

XMLHTTPとADODB.Streamを利用してインターネット上のサーバーから htmlテキストを取得 します。ADODB.Streamを利用すると任意のCharCodeを指定することができ、文字化けしな いで指定のファイルを取得することができます。 サンプル(comobj47.hsp)では、XMLHTTP コントロールにより、指定したURLを引数として、HTTPリクエストを送信します。 ResponseBodyで指定したレスポンスボディの内容を取得します。statusは、HTTPレスポン スステータスコードで、200ならOK、404ならNot Foundとなります。 ADODB.Streamオブジェクトをnewcom命令でobjRS変数をCOMオブジェクト型として初期化し たのち、TypeとCharsetを指定して、ReadTextでテキストデータを取得して、 ReturnHTML 変数に返します。
	;***** URLを指定してhtmlテキストを取得  (comobj47.hsp) *****

	;※WinNT系のみ動作します。98系は不可 (Win2000で動作確認)
	;Microsoft Data Access Components (MDAC) 2.8 SP1以降が必要
	;98系は、下記よりMDACをダウンロードすることにより、ADODB.Stream オブジェクトが
	;使えるようになります。(URLは長いので、折り返しています。)
	;
	;▼▼▼▼ Microsoft Data Access Components ダウンロード ▼▼▼▼
	;http://www.microsoft.com/downloads/details.aspx?
	;FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c&DisplayLang=ja

	#define adTypeBinary            1
	#define adSaveCreateNotExist    1
	#define adSaveCreateOverWrite   2

	;▼mesboxを作成
	ReturnHTML=""
	font "MS ゴシック",14 : objmode 2
	mesbox ReturnHTML,ginfo(10)-4,ginfo(11)-24,5
	objectID=0 : objsel objectID

	;▼URLを指定
	sURL = "http://www.onionsoft.net/hsp/"
	;▼セーブする場合のHTML名 (任意)
	sDest = dirinfo(0)+"\\dsthtml.htm"
	;▼CharCodeを指定
	charcode = "Shift_JIS"
	;charcode = "UTF-8"

	title sURL
	newcom objXMLHTTP, "Microsoft.XMLHTTP"
	objXMLHTTP->"Open" "GET", sURL, 0
	objXMLHTTP->"Send"

	;▼status OKならHTMLテキストファイルを指定のCharCodeで取得
	if objXMLHTTP("status") = 200 {
		newcom objRS,"ADODB.Stream"
		if stat!0 : dialog "ADODB.Streamがサポートされていません。",0 : end
		objRS("Type") = 1
		objRS->"Open"
		sHtml=objXMLHTTP("ResponseBody")
		objRS->"Write" sHtml
		objRS("Position") = 0
		objRS("Type") = 2
		objRS("Charset") = charcode
		ReturnHTML=objRS("ReadText")
		;ファイルとして保存する場合
		;objRS->"Savetofile" sDest,adSaveCreateOverWrite
		objRS->"Close"
	}else{
		dialog "接続に失敗致しました。",0,"エラー"
	}

	objprm objectID,ReturnHTML
	if vartype(objRS)==6 {
		if varuse(objRS)==1 : delcom objRS
	}
	delcom objXMLHTTP
	stop
      任意のURLの画像ファイルをダウンロードする     

XMLHTTPとADODB.Stream を利用してインターネット上のサーバーからバイナリファイルを ダウンロードします。ADODB.Streamでタイプ(Type)にadTypeBinaryを指定することで、画 像等のバイナリ形式のファイルを取得することができます。サンプル(comobj48.hsp)では 、XMLHTTPコントロールにより、指定したURLを引数として、HTTPリクエストを送信します。 ResponseBodyで指定したレスポンスボディの内容を取得します。statusは、HTTPレスポン スステータスコードで、200ならOK、404ならNot Foundとなります。 ADODB.Streamオブジェクトをnewcom命令でobjRS変数をCOMオブジェクト型として初期化し たのち、TypeをadTypeBinaryとして、オープンしてSavetofileで上書き許可としてセーブ します。ダウンロードしてセーブされたファイルは、picload命令で画面に表示します。
	;***** URLを指定してバイナリファイル(画像等)をダウンロード  (comobj48.hsp) *****

	;※WinNT系のみ動作します。98系は不可 (Win2000で動作確認)
	;Microsoft Data Access Components (MDAC) 2.8 SP1以降が必要

	#define adTypeBinary            1
	#define adSaveCreateNotExist    1
	#define adSaveCreateOverWrite   2

	;▼URL(ダウンロードファイル名)を指定
	sSource = "http://www.onionsoft.net/hsp/img/hsp3ttl.jpg"
	;▼クライアントの格納先ファイル名を指定
	sDest=dirinfo(0)+"\\hsp3ttl.jpg"

	title sSource
	newcom objXMLHTTP, "Microsoft.XMLHTTP"
	objXMLHTTP->"Open" "GET", sSource, 0
	objXMLHTTP->"Send"

	flag=0
	if objXMLHTTP("status") = 200 {
		newcom objRS,"ADODB.Stream"
		if stat!0 : dialog "ADODB.Streamがサポートされていません。",0 : end
		objRS("Type") = adTypeBinary
		objRS->"Open"
		sHtml=objXMLHTTP("ResponseBody")
		objRS->"Write" sHtml
		objRS->"Savetofile" sDest,adSaveCreateOverWrite
		objRS->"Close"
		flag=1
	}else{
		dialog "接続に失敗致しました。",0,"エラー"
	}
	;▼ダウンロードした画像ファイルを表示
	if flag==1 {
		picload sDest,1
	}
	if vartype(objRS)==6 {
		if varuse(objRS)==1 : delcom objRS
	}
	delcom objXMLHTTP
	stop
      任意に指定したフォルダのサイズを取得する     

任意に指定したフォルダの合計サイズをバイト単位に3桁毎のカンマ付きに編集して表示 します。サイズの取得には、FileSystemObjectオブジェクトのsizeプロパティで取得しま す。この取得したサイズを正規表現のパターンで3桁毎のカンマ付きに編集して表示させ ます。
	;***** フォルダのサイズを取得  (comobj50.hsp) *****

	;▼サイズを取得する対象フォルダを指定する
	sFile = getpath(dirinfo(0),32)

	newcom objFS, "Scripting.FileSystemObject"

	;▼存在の確認
	objexFile=objFS("FolderExists", sFile)
	if objexFile==0 {
		dialog "フォルダは存在しません。 結果="+objexFile
		delcom objFS
		stop
	}
	objFol=objFS("GetFolder", sFile)
	newcom regEx,"VBScript.RegExp"
	regEx("Pattern") = "^(.*?)(...)(...)$"
	regEx("Global")  = 1
	destSize=objFol("size")
	;▼destSizeを3桁毎のカンマ付きに編集
	comres stra
	regEx->"Replace" destSize,"$1,$2,$3"
	fname=objFol("Name")
	ShowFolderSize=fname+"   "+stra+" byte 使用しています。"
	pos 10,10 : mes ""+ShowFolderSize

	delcom objFol
	delcom regEx
	if vartype(objFS)==6 {
		if varuse(objFS)==1 : delcom objFS
	}
	stop
      URLを指定してHTMLファイルのテキストを抽出する     

IEを起動させて、Document.body.innerTextでHTMLドキュメントを取得します。 XMLHTTPとADODB.Streamを利用する方法と比べて簡単ですが、欠点としては、 CharCodeを 指定できないので、Shift_JIS限定となります。そのまま抽出すると、Shift_JIS以外では 文字化けしたテキストが抽出されます。
	;***** URLを指定してHTMLファイルのテキストを抽出  (comobj51.hsp) *****

	;▼mesboxを作成
	ReturnHTML="\n\n\n\t▼▼▼▼▼  現在、テキストを抽出しています。  ▼▼▼▼▼"
	font "MS ゴシック",14 : objmode 2
	mesbox ReturnHTML,ginfo(10)-4,ginfo(11)-24,5
	objectID=0 : objsel objectID

	;▼URLを指定
	sURL = "http://www.onionsoft.net/hsp/"

	title sURL

	;▼IE(InternetExplorer.Application)オブジェクトを作成
	newcom objIE, "InternetExplorer.Application"

	objIE("Silent")  = 1
	objIE("Visible") = 0   ;非表示モードで起動

	;▼指定URLを開く
	objIE->"Navigate" sURL
	gosub *busywait

	objDoc=objIE("Document")
	objBody=objDoc("body")
	ReturnHTML=objBody("innerText")

	objprm objectID,ReturnHTML

	;▼IEを終了させる
	objIE->"Quit"

	;▼オブジェクトを破棄
	delcom objDoc
	delcom objBody
	delcom objIE
	stop

*busywait
	;▼ページの読み込みが終了するまで待つ
	title "ページを読み込み中です。"
	repeat
		wait 10
		if objIE("Busy")==0 : break
	loop
	objDoc=objIE("Document")
	repeat
		wait 10
		if (objdoc("readyState") == "complete") : break
	loop
	title "ページが表示されました。"
return
      任意の指定数値を3桁毎のカンマ付きに編集する     

指定した数値を3桁毎のカンマ付きに編集したい場合があります。RegExpを利用すると比 較的短いコードで実現できます。VBScript.RegExpオブジェクトをnewcom命令でregEx変数 をCOMオブジェクト型として初期化したのち、PatternとGlobalを指定します。そして、 Replaceメソッドで変換対象の数値をパターンに基づいてカンマを挿入します。
	;***** 正規表現による3桁毎のカンマ付きに編集  (comobj52.hsp) *****

	destNum=1234567890
	newcom regEx,"VBScript.RegExp"
	regEx("Pattern") = "^(.*?)(...)(...)$"
	regEx("Global")  = 1
	;▼destNumを3桁毎のカンマ付きに編集
	comres editnum
	regEx->"Replace" destNum,"$1,$2,$3"
	pos 10,10 : mes ""+editnum
	delcom regEx
	stop
      既にあるテキストファイルに行番号を付けて格納する     

テキストファイルの編集加工する例題として、既にあるテキストファイルに行番号を付け て格納します。対象となるテキストファイルをOpenTextFileでファイル名と読み込みモー ドを引数指定で読み込みます。そして、格納するファイルを新規に作成します。 do〜untilループで対象テキストファイルをEOFまで ReadLineで読み込みながら、5桁の行 番号を付加しながら新規作成したファイルに書き込んでいきます。 EOFになったら終了し て閉じます。読み込みファイルと格納ファイル名は同じとしてあるので、上書きして保存 されます。
	;***** テキストファイルのテキストに行番号を付加  (comobj53.hsp) *****

	#const ForReading      1 ;読み込み
	#const ForWriting      2 ;書き込み(上書きモード)
	#const ForAppending    8 ;書き込み(追記モード)

	i=0
	sFName = "sample.txt"
	exist sFName
	if strsize=-1 { dialog "ファイルがありません。",0,"エラー" : stop }
	newcom objFS,"Scripting.FileSystemObject"
	streamRead  = objFS("OpenTextFile",sFName,ForReading)
	streamWrite = objFS("CreateTextFile",sFName+".txt")
	do
		i++
		sText=streamRead("ReadLine")
		streamWrite->"WriteLine" ""+strf("%5d",i)+" :  "+sText
	until 0!=streamRead("AtEndOfStream")

	streamWrite->"Close"
	streamRead->"Close"
	delcom streamRead
	delcom streamWrite
	delcom objFS
	mes "処理が終了しました。"
	stop
      改行コードを変換する     

ウィンドウズ (Shift_JIS形式) 以外の形式でダウンロードしたファイルは、 改行コード が、CRLFの形式となっていません。これを変換します。 また、CRLF形式のものをUNIXやMacの改行コードの形式にも変換できます。 変換の方法は 、正規表現を利用して、バッファに読み込んだファイルを Replace(置換)します。 VBScript.RegExpオブジェクトを newcom命令でregEx変数をCOMオブジェクト型として初期 化したのち、PatternとGlobalを指定します。そして、Replaceメソッドで変換対象のテキ ストファイルを改行コード変換パターンに基づいて置換します。 結果は、buf変数に返し ます。
	;***** 改行コードを変換  (comobj54.hsp) *****

	#define  CRLF   "\r\n"
	#define  LF     "\r"
	#define  CR     "\n"

	objsize 260,32 : pos 50,10
	button "改行コードを CRLF 形式に変換",*codeconv
	button "改行コードを LF   形式に変換",*codeconv
	button "改行コードを CR   形式に変換",*codeconv

	;▼mesboxを作成
	buf="" : pos 0,140
	font "MS ゴシック",14 : objmode 2
	mesbox buf,ginfo(10)-4,ginfo(11)-164,5
	stop

*codeconv
	;▼ボタンのIDより、変換モードを判定
	objsel -1
	if stat==0 : code = CRLF
	if stat==1 : code = LF
	if stat==2 : code = CR

	;▼変換対象テキストファイルを開く
	dialog "txt",16 : if stat=0 : stop
	notesel buf  :  noteload refstr
	objprm 3,buf

	;▼VBScriptのRegExp(正規表現)を利用して変換
	newcom regEx, "VBScript.RegExp"
	comres buf
	regEx("Pattern") = "\\r\\n|\\r|\\n"
	regEx("Global")  = 1
	regEx->"Replace" buf,code
	regEx = 0
	;▼改行コード変換後の結果をmesboxに反映
	objprm 3,buf

	;▼変換後のファイルを保存
	dialog "txt",17 : if stat=0 : stop
	notesel buf  : notesave refstr
	stop
      EXCELを新規作成してグラフを描画する     

HSPからEXCELを新規作成して、sheet1に項目と値を設定してチャート(棒グラフ)を作成 します。処理手順としては、Excel.Applicationオブジェクトをnewcom命令で objExApp変 数をCOMオブジェクト型として初期化したのち、
  (1)表示モード (ウィンドウを表示)   ("Visible")
  (2)警告メッセージを表示させない    ("DisplayAlerts")
  (3)Workbooksコレクション取得       ("WorkBooks")
  (4)ワークブックを追加              ("Add")
  (5)Sheet取得                       ("Worksheets","sheet1")

  ※(1)〜(5)は、通常の定型パターン

  (6)Rangeを指定してセルに値を設定   ("Range")  ,("Value")
  (7)グラフ化する範囲を設定          ("Range")  ,("Select")
  (8)グラフを作成                    ("Charts") ,("Add")
  (9)オブジェクト変数開放            delcom

となります。当然ですが、クライアントPCには、EXCEL本体が必要です。

	;***** EXCELを新規作成してグラフを描く (comobj55.hsp) *****

	newcom objExApp, "Excel.Application"

	;▼表示モード (ウィンドウを表示)
	objExApp("Visible")  = 1
	;▼警告メッセージを表示させない
	objExApp("DisplayAlerts") = 0
	;▼Workbooksコレクション取得
	xlBooks = objExApp("WorkBooks")
	;▼ワークブックを追加
	xlBook = xlBooks("Add")
	;▼Sheet取得
	xlSheet = xlBook("Worksheets","sheet1")
	;▼Rangeを指定してセルに値を設定
	xlRange = xlSheet("Range","A1") : xlRange("Value") = "項目A"
	xlRange = xlSheet("Range","A2") : xlRange("Value") = "項目B"
	xlRange = xlSheet("Range","A3") : xlRange("Value") = "項目C"
	xlRange = xlSheet("Range","A4") : xlRange("Value") = "合計値"
	xlRange = xlSheet("Range","B1") : xlRange("Value") = 12
	xlRange = xlSheet("Range","B2") : xlRange("Value") =  8
	xlRange = xlSheet("Range","B3") : xlRange("Value") =  6
	xlRange = xlSheet("Range","B4") : xlRange("Value") = "=sum(B1:B3)"

	;▼グラフ化する範囲を設定
	xlRange = xlSheet("Range","A1:B3")
	xlRange-> "Select"
	;▼グラフを作成
	objXLchart = objExApp("Charts")
	objXLchart->"Add"

	;▼オブジェクト変数開放
	delcom objXLchart
	delcom xlRange
	delcom xlSheet
	delcom xlBook
	delcom xlBooks
	delcom objExApp
	stop
      HTMLファイルからタグを除去してノーマルなテキストにする     

HTMLファイルを読み込んでタグを除去します。任意に指定したHTMLファイルをnoteload命 令で指定したバッファに読み込みます。この読み込んだバッファ内のデータから、正規表 現パターンを利用して、タグを除去してテキストファイル化します。タグ除去時点では、 データの先頭タブやスペースがあるので、それも含めて除去します。また、必要に応じて テキスト化されたデータをセーブします。
	;***** HTMLタグを除去  (comobj56.hsp) *****

	#module
	#deffunc delspace var prm1,str prm2
	strText = prm2 : ls=strlen(strText) : if ls==0 : return -1
	sdim value,ls : tempstr=""
	repeat ls
		tempstr=strmid(strText,cnt,1)
		if tempstr=" "|tempstr="\t" : continue
		value+=tempstr
	loop
	prm1=value : sdim value,0
	return 0
	#global

	objsize 260,32 : pos 50,10
	button " HTMLタグを除去",*tagdel

	;▼mesboxを作成
	buf="" : pos 0,140
	font "MS ゴシック",14 : objmode 2
	mesbox buf,ginfo(10)-4,ginfo(11)-164,5
	stop

*tagdel
	;▼変換対象テキストファイルを開く
	dialog "htm",16 : if stat=0 : stop
	notesel buf  :  noteload refstr
	objprm 1,buf

	;▼VBScriptのRegExp(正規表現)を利用して変換
	newcom regEx, "VBScript.RegExp"
	comres buf
	regEx("Pattern") = "|<[^>]*>| "
	regEx("Global")  = 1
	regEx->"Replace" buf,""
	regEx = 0
	delspace buf,buf

	;▼変換後の結果をmesboxに反映
	objprm 1,buf

	;▼変換後のファイルを保存
	dialog "txt",17 : if stat=0 : stop
	notesel buf  : notesave refstr
	stop

▲ Page Top    


  Copyright (C)HSP-NEXT sakura. 1998-2007 . All rights reserved.