アプリケーションキャプチャ命令

題からして何かわかりますか?

アプリケーションをキャプチャーする命令、即ち別のソフト等のウィンドウを捕獲するものです。

キャプチャーしてどうするのか、それはそのウィンドウ内の情報をHSPが取得するんですね。

別のソフトのオブジェクトに何が書かれているか、という情報取得のほかに

面倒な作業をユーザーの代わりにコンピュータに書き込ませるといったことも出来るわけです。

 

では早速説明していきますか…。

まずaplselでキャプチャーするウィンドウを指定します。

"window name"に捕獲したウィンドウのタイトルバーに書かれている文字列を入れます。

タイトルバーの文字列がすべて一致させる必要はなく、先頭から何文字かだけでもいけます。

ただ、指定した文字列が複数ウィンドウに当てはまる場合はどのウィンドウになるかわかりません。

捕獲に成功するとstatに0が、失敗すると1が入り、refstrに正式なタイトル名が入ります。

捕獲に成功しても何かが起こるというわけではなく、メッセージ送信準備ができるだけです。

捕獲に成功しましたらaplactaplobjでキー送信準備をしましょう。

aplactをすると命令名通り指定ウィンドウがアクティブになりキー送信ができるようになります。

キーの送信方法は2種類ありますがaplkeyから説明いたします。

コレは押したキー情報を捕獲したウィンドウ(又はその中のオブジェクト)に送信します。

メモ帳(notepad.exe)のようにウィンドウ内のオブジェクトは置いといてウィンドウに送信してみましょう。

#include "hspext.as"
	aplsel "HSPスクリプトエディタ" ; このサンプルを実行する時HSP付属のhsed2.exeで実行してください
	if stat : dialog "Not Found !" : end
	aplact
	aplkey 122 ; 使用されているラベル一覧を取得

*sample ; ラベルを念のため入れておく
	stop

 

それではオブジェクトにでもキー送信してみましょうか…。

ココでのキー送信先はウィンドウ内の「edit」オブジェクトにしたいと思います。

前回のサンプルにオブジェクトを取得するaplobjを使います。

コレも成功するとstatに0が入り、失敗で1が入ります。

同じオブジェクトが存在する場合p1の開始オブジェクトIDの指定でよく調べておきましょう。

「edit」以外に「button,listbox等」HSPで作成できるオブジェクト名があります(chkboxはありません)。

オブジェクトを取得したらまずはaplstrで文字列を送信してみましょう。

非常に簡単でパラメータに送信したい文字列を入れるだけです。

キー送信とは違いますのでショートカットキー等の「ALT+?」等はこの命令では不可能です。

#include "hspext.as"
	aplsel "HSPスクリプトエディタ"
	if stat : mes "送信するウィンドウを捕獲できませんでした" : stop
	aplact
	aplobj "edit"
	if stat : mes "指定したオブジェクトの取得に失敗しました" : stop
	aplstr "send key test"
	mes "送信完了"
	stop

HSPのヘルプでは命令実行後にウェイトを入れなければならないと書いていますが...どうなのでしょう(ぉ

入れなくても普通に行くのは私だけなのでしょうか?まぁウェイトを入れるようにしてくださいね(爆

サンプルを実行していただければわかると思いますが文字列やキー送信位置は現在のキャレット位置です。

 

それでは先ほどのaplkeyでやってみます。

p1にキーコードを指定するわけですがgetkeyと同じコードです。

p2にp1のコードと同時に1のSHIFTキー、2のCTRLキー、4のALTキー送信が出来ます。

#include "hspext.as"
	aplsel "HSPスクリプトエディタ"
	if stat : dialog "送信するウィンドウを捕獲できませんでした" : end
	aplact
	aplobj "edit"
	if stat : dialog "指定したオブジェクトの取得に失敗しました" : end
	repeat 26,65
		aplkey cnt ; a〜zまで送信する
	loop

 

では難しいというかaplkeyより面倒なaplkeydaplkeyuを解説いたします。

実際のキーボードを押したような感じに近く(?)キーを押して送信し、離すという作業が必要になります。

aplkeydが実行されてからaplkeyuが押されるまで押し続けられているのですから、

3つ以上の同時押しが出来るわけですね(CTRL+SHIFT+Aみたいな感じ)。

#include "hspext.as"
	aplsel "HSPスクリプトエディタ"
	if stat : dialog "送信するウィンドウを捕獲できませんでした" : end
	aplact
	aplobj "edit"
	if stat : dialog "指定したオブジェクトの取得に失敗しました" : end
	num=71 ; 押すキーの数
	dim key,num
	key.0  = 'S', 'H', 'I', 'T', 'E', 'I', ' ', 'K', 'E', 'Y', ' ', 'N', 'O', ' ', 'T', 'E', 'S', 'T', ' ', 'C', 'H', 'U', 'U', 13, 13
	key.25 = 'T', 'E', 'X', 'T', ' ', 'M', 'E', 'I', 'R', 'E', 'I', ' ', 'N', 'O', ' ', 'Y', 'O', 'U', 'N', 'I', ' '
	key.46 = 'K', 'I', 'R', 'E', 'I', 'N', 'I', ' ', 'N', 'A', 'G', 'A', 'R', 'E', 'T', 'E', ' ', 'I', 'M', 'A', 'S', 'U', 'K', 'A'
	repeat num
		aplkey key.cnt
		wait 10
	loop
	stop

あまり、というか全然サンプルになっていませんが...載せておきました(^^;

 

最後に「edit」コントロールの情報を取得しましょう。

情報といってもキャレット位置や行数といったものと、データ内容の2種類ありますね。

そのうちのキャレット等の情報を取得するapleditからいきます。

命令名から想像できるように「edit」オブジェクトの情報しか取得できません。

取得できるものも0の現在のキャレット位置、1の全体行数、2の指定行の文字数だけとなっています。

0のキャレット位置取得は先頭から何バイト目か、を表わします。

1の行数は当たり前ですけど1から始まりますので。0からではないので気をつけてください(^^;

2の指定行の文字数は何バイトあるかがp1に返ります。

p2に2を指定した場合だけp3が有効になり何行目を取得するかを指定します。

データ(文字列)を取得するaplgetはオブジェクトに設定された文字列を取得します。

「edit」コントロール内の文字列の取得(メモ帳内のデータ等)を読み込むとは出来ませんので悪しからず。

…とコレはサンプルを表示しにくいものですので説明だけで終わりたいと思います。

「HSPディレクトリ\\sample\\hspext\\APLKEY3.as」を一度お試しください。

 

…変な終わり方となってしまいましたがアプリケーションキャプチャに付いての説明をコレにて終了します。