メニュー
正規表現
エラー処理
 エラー発生時に指定ラベルへジャンプ
ウィンドウ取得/設定
 KBフォーカスウィンドウ位置
 ウィンドウサイズ取得
 子ウィンドウ(ボタン位置)探索
 チェックボックス操作
監視
EXCEL
 EXCELマクロの動的実行
Wait
 WaitIf:指定条件で待機
 WaitUntil:指定時刻まで待機
サウンド演奏
ユーザー関数
 文字列生成
 システム情報取得
 ヘロンの公式による三角形の面積
 フィボナッチ数列
 外部ファイル化
暗号化/復号化
実用ツール
 ポイント位置の文字列取得ツール
 ウィンドウ最前面表示化ツール
 ウィンドウ半透明化ツール
 クリックキャプチャー
 あっどくりっぷ
 文字数カウントツール
メール

正規表現

GetRegEx:正規表現での項目抽出

元の文字列  "AB123Cab456"

サブマッチ番号指定

数字が1個以上連続する部分を抽出、その2番目を取り出す

正規表現 : (\d+)

コードの使用方法

・パターンマッチ

プログラムコード

・複数パターンマッチ

非数字の連続、数字の連続、非数字の連続、数字の連続

のパターンにてそれぞれの抽出結果を取り出す。

正規表現 : (\D+)(\d+)(\D+)(\d+)

プログラムコード

エラー処理

On-Error-Goto:エラー発生時に指定ラベルへジャンプ

Resume-Next:エラー発生行の次から再開

ユーザー独自のエラー処理(エラーを無視して続行

エラーが発生しても、そのまま処理を続行したい場合があります。
そのような場合、On-Error-Gotoを使用して、ユーザー独自のエラー処理を行うことが出来ます。

エラー処理後は、
Jumpで指定ラベルから処理を続行
Resume-Nextでエラー発生行の次から続行
・そのまま終了
など、ユーザー独自で処理を選択できます。

なお、エラーを表示したい場合は、GetErr()で本来表示するはずだったエラーメッセージを表示できます。


下記の例は、2つの画像(不正なURLと正常なURL)をダウンロードする例です。
エラーが発生しても処理を続行します。
001 !
002 ! 画像のダウンロード
003 !  エラー後に続行
004 !
005      On-Error-Goto // エラー発生時のジャンプ先  MyErr
006 !
007      IEDownload   // エラー画像URL
008      IEDownload   // 正常な画像URL
009      MSG_BOX    // 完了
010      QUIT
011 !
012 MyErr
013      SHOW_MSG    // エラー表示
014      Resume-Next  // 次行から続行<
コードの使用方法

・エラーが起きても続行する

プログラムコード

・エラーで中止 (On-Error-Goto が無い場合)

プログラムコード

監視

指定座標で特定文字列の出現を監視する

指定座標において表示文字列を監視し、特定文字列が表示に応じて処理を行う。

ここでは、GetAccValue() 関数を用いて表示文字列を取得する。

取得した文字列が、
 指定文字列 strTargetA に等しい場合は、サブルーチンAをコール
 指定文字列 strTargetB に等しい場合は、サブルーチンBをコール

指定座標は、変数 x , y で指定。
監視間隔は、変数 TimeSpan で指定。


処理は、ここではメッセージを表示するだけ。

比較文字列の大小文字の区分は問わない。

大/小文字を区別する場合は後記を参照。


確認方法:

指定の入力フィールド座標(YAHOOの検索ボックスなど)の座標を変数 x , y に、対象とする文字列を変数 strTargetA , strTargetB に設定する。
フィールドに文字列(ここでは、 "I am a boy.")を入力。
プログラムを起動すると、ヒットして、"Aを検知 - xx"と表示される。
"This is a pen."と入力すると、"Bを発見 - xx"と表示される。
文字列の一部を消すと、ループ状態に入り、監視を続ける。

コードの使用方法

プログラムコード


確認方法のイメージ

大文字/小文字を区別する場合、および、
指定文字列が含まれる場合の指定

InStr()関数を使用する。

InStr(対象文字列 , 探す文字列 , 区分)

 文字列中に含まれる指定文字列の位置を返却する関数。

返却値   0 :指定文字列が含まれていない

パラメータ
第3パラメータで、大小文字を区別するかを指定

区分 0:区別する 1:区別しない

コードの使用方法

プログラムコード

ウィンドウ

キーボードフォーカスを持つウィンドウ位置取得

キーボードフォーカスを持つ(ボタンや入力フィールドのようにキー入力を受け付ける状態になっている)ウィンドウの位置を取得します。

取得は、
GetWindowHandleFocus でキーボードフォーカスを持つウィンドウのハンドルを取得
GetWindowRect でウィンドウハンドルからウィンドウ位置を取得
GetCaretPos でキャレット位置を取得
の手順で行う。

コードの使用方法

プログラムコード


ウィンドウサイズ取得

各種のウィンドウハンドルの取得方法、およびウィンドウハンドルからウィンドウサイズを取得する方法
下記はアクティブウィンドウの位置/サイズ取得のサンプル
対象ウィンドウはツールで起動する「メモ帳

001   INIT     574 252 1021 704 0,0,1,,0
002 !
003 ! アクティブなウィンドウの
004 ! 位置/サイズを取得
005 !
006   Dim     //左位置 L
007   Dim     //上位置 T
008   Dim     //幅   W
009   Dim     //高さ  H
010   Dim     //ウィンドウハンドル hWnd
011 !
012   AP_Open   //メモ帳を起動
013   Set     //アクティブウィンドウのハンドル
014   Set     //位置情報取得
015   MSG_BOX   //表示

説明

012 AP_OPEN   //メモ帳を起動
013 SetVariable //アクティブウィンドウのハンドル取得

SetVariableの中で記述されている GetWindowHandleActive() の結果が %hWnd% に格納される
014 SetVariable //位置情報取得
 SetVariableの中で記述されている GetWindowRect(%hWnd%,L,T,W,H)
 L,T,W,Hはそれぞれ変数名。
 左位置、上位置、幅、高さのピクセル値が各変数に格納される。
以下サンプルコード

コードの使用方法

アクティブウィンドウの位置/サイズを取得

プログラムコード

クラス名またはタイトルの一部を指定して位置/サイズを取得

プログラムコード

キーボードフォーカスを持つウィンドウの位置/サイズを取得

プログラムコード

子ウィンドウ検索 ボタン位置探索

ウィンドウ内に配置されている子ウィンドウ(ボタンやチェックボックス等)のウィンドウハンドルを取得し、
その情報(クラス名、タイトル、位置:left/top/width/height)を取得します。

使用する関数

子ウィンドウのウィンドウハンドルを取得する関数
GetChildWindowHandle

テスト対象アプリ

マウスレコーダー」の「サンプル」フォルダ内に同梱されている、「チェックテスト.exe


ウィンドウ構成

下図は、マウスレコーダー付属の「ウィンドウ解析」ツールで、「となりのトトロ」(オプションボタン)をポイントしたときに得られる情報



 
1050106 ThunderRT6FormDC (141,194,396,443)   "チェックテスト"   ← トップウィンドウ
329384 ThunderRT6Frame (160,319,365,402)    "オプションボタン"  ← 子ウィンドウ
525800 ThunderRT6OptionButton (176,333,337,356) "となりの犬"     ← 孫ウィンドウ : ターゲット
 

取得手順

サンプルプログラム

022 アプリを起動
023 そのアプリのトップウィンドウハンドルを取得→親ウィンドウハンドルとして hWndP に格納
025 子ウィンドウハンドルを取得
    ここでは、タイトル名だけで検索、再帰検索true として、最下層の子ウィンドウまで対象とする
027 見つかったら、子ウィンドウのサイズ/位置を取得
028 情報をメッセージフォームに表示
032 サンプルアプリを終了する



コードの使用方法

プログラムコード

実行結果



情報表示式

ラジオボタンがチェックされているかは、GetAccIsChecked関数(15.34版以降) で判定
戻り値 1:チェックされている 0:チェックされていない

Acc関連は、MicrosoftAccessible インターフェースに準拠しているアプリケーションで有効(Chromeなどは不可)
各値の意味は、Accessible一覧表を参照

ここでは、ラジオボタンとなりの犬」がチェック(選択)されています。

ターゲットを「となりのトトロ」にすると、GetAccIsChecked は、0 が返ります。

チェックボックス操作

操作概要

位置特定 → 状態判定 → クリック

タイトル文字(下図@)から対象ウィンドウを特定し、さらに、チェックボックス(下図A)の位置を調べ、
チェックされていなかったらクリックしてオン状態にします。


プログラム手順



007-010 固定値定義
      APパス/タイトル、チェックボックスタイトル/クラス名
014-020 変数定義

022-024 対象AP(アプリ)が起動されていなかったら起動


025   AP(親ウィンドウ)のハンドル取得(GetWindowHandle

027   操作概要表示


029   チェックボックスのウィンドウハンドル取得(GetChildWindowHandle
030   チェックボックスが見つかった?
031    NO → メッセージ表示
032-039  YES 見つかった
033    子ウィンドウ(チェックボックス)の位置情報を取得
034    チェックされているか?

035    YES → メッセージ表示(以外、何もしない)


036    NO  → 「チェックしますか?」の確認メッセージ


037   「はい」を押されたら、チェックボックス位置を左クリック(LeftClick
本例ではクリック位置として、X,Y座標をそれぞれ %l%,%t% としています。
これはすなわち、チェックボックスの左上端の位置を意味しています。
チェックボックスの中央をクリックしたい場合は、
X座標:チェックボックスの左位置+チェックボックスの幅 / 2  = %l%+%w% / 2
Y座標:チェックボックスの上位置+チェックボックスの高さ / 2 = %t%+%h% / 2
とする必要があります。


040   取得全情報表示


プログラムコード

コードの使用方法

EXCEL

XLAddMacro:EXCELマクロの動的実行(マクロコード直接実行)

XLAddMacroを利用してEXCELのマクロを動的に組込み実行することが出来ます。

マクロの組込み

・既存のモジュールファイル(xxxx.bas)を組み込む
・マクロコード(VisualBasic)を直接組み込む
2つの方法があります。

下記の例では
EXCELへの文字入力、書式設定、数式設定、および
BMI(肥満度指数)を対話形式で計算するマクロ
を動的に組込み、実行します。

動作条件

・MicroSoft EXCEL がインストールされていること
VisualBasicプロジェクトへのアクセスが許可されていること
   (VisualBasicプロジェクトへのアクセスの許可設定方法

プログラム

001      INIT
002 ! BMI(肥満度指数)の計算
003 !
004 !  マクロコードをEXCELに追加して
005 !  マクロ(BMI)を実行します。
006 !                                
007      手動停止オフ                      
008 !                                
009      XLOpen     // 空のブックを開く           
010      XLAddMacro   // マクロコードを追加          
011      XLRunMacro   // マクロ(BMI)を実行          
012 !                                
013      MSG_BOX                        
014      If                      %MsgBox% = 6
015      XLClose                        
016      End-If                         
017      QUIT      
コードの使用方法

既存のモジュールファイル(サンプル_エキスパート\bmi.bas)を組み込む


マクロコード(VisualBasic)を直接組み込む



Wait

WaitIf:指定条件で待機

WaitIfを使用して指定の日時まで待機します。
下記例では現在の日時から10秒後まで待機しますが、パラメータを変えることにより、好きな時間、または、指定の日付/時刻まで待機することが出来ます。

以下、コード抜粋
001 !
002 ! 指定秒数待機
003 !
004         Set     // 現在の日時                                                      
005         Set     // 待機秒数 既定値                                                 
006 !
007         INPUT_BOX       // 待機秒数入力     待機秒数             %s%
008         Jump    //キャンセル                %s% == ""     END
009 !
010         Set     // 予定日時 +n秒後          予定日時    dateserial(year(%d%),month(%d%),day(%d%),hour(%d%),minute(%d%),second(%d%)+%s%)
011 !
012         WaitIf  // 現在日時<予定日時 の間待機               now()<%予定日時%
013         MSG_BOX                                             ちょうど時間となりました。
014 END
    
004 現在の日時 Now関数

010 待機予定日時を生成 Dateserial関数

    ここでは Second に加算している。
    時、分単位で待機する場合は、それぞれ hour , minute に加算すればよい

012 現在の日時が予定日時より小さかったら待機 WaitIf関数
コードの使用方法



WaitUntil:指定時刻まで待機

WaitUntilを使用して指定の日時まで待機します。
WaitIfでも同じことが出来ますが、これは、日時特化版です。

以下、コード抜粋
!
! 十秒後まで待つ
!
	Set	// 予定時刻										t	Now()+Timeserial(0,0,10)
	WaitUntil	// 指定時刻まで待つ		%t%
	MSG_BOX	// 結果表示											予定時刻:Format(%t%,"hh:nn:ss") [%NL%]現在時刻:Format(Now(),"hh:nn:ss") となりました。
      
10秒間待ちます。
 =現時時刻+10秒後 まで待機

10秒後は、Now()+Timeserial(0,0,10) にて作成。


実行中は、残り待ち時間がタイトルバーに表示されます。


コードの使用方法



サウンド演奏

演奏開始〜一時停止〜再開〜停止

MP3ファイルの制御

演奏(10秒)〜一時停止(5秒)〜再開〜音量変更(50→100)〜再生位置変更(終了15秒前)〜停止
001      INIT                          626450
002      Dim      // ファイル名             
003      Dim      // 総時間(秒)            
004 !                                
005      SHOW_MSG    //                   052801245
006      Set                          0
007      PlaySound   // 演奏開始          ASYNC   50
008      SHOW_MSG2   //                   059854590
009      PauseSound   // 一時停止              
010      SHOW_MSG2   //                   059854590
011      ResumeSound  // 再開                
012      SHOW_MSG2   //                   059854590
013      SetSoundVolume // 音量変更               100
014      SHOW_MSG2   //                   059854590
015      SetSoundPosition// 再生位置変更             %Length%-15
016      SHOW_MSG2   //                   059854590
017      StopSound   // 停止                

説明

005 SHOW_MSG
    表示時間:無し(無限)
    表示方法:Modalオフ(プログラムと平行して表示)
    自動更新:Reflesh(0.3秒毎に表示情報更新)
007 PlaySound    // 演奏開始
    非同期:ASYNC-プログラムと平行して実行
    演奏 :ファイル 変数%FileName%で指定(サンプル\COOL!.mp3
    音量 :50(0〜100)
    回数 :5(ここでは強制停止するので、あまり関係無い)
009 PauseSound    // 一時停止
011 ResumeSound   // 再開
010 SetSoundVolume  // 音量設定
011 SetSoundPosition // 再生位置変更
010 StopSound    // 停止

以下サンプルコード

コードの使用方法


ユーザー関数

文字列生成−1個以上の数字および英字を含む(VBScript)

概要

VBScriptを使用して、1個以上の数字および英字が必ず含まれる文字列(2文字以上)を生成します。
マウスレコーダーは数値計算、反復計算は苦手(時間が掛かる)なので、既存のスクリプト言語を使用します。

INPUTBOXで生成文字列数をユーザーから入力してもらい、
入力チェック(不備の場合は再入力)後、出力用のメモ帳を起動。

文字列生成関数(random_str)をコール。
返却値をメモ帳に出力。
これを指定回数繰り返します。

VBScriptで記述したプログラムはユーザー関数として、冒頭に配置(位置は任意)

関数仕様

関数名: random_str
 入力パラメータ: 生成する文字列の個数

生成方式: ASCIIコードの '!' 〜 '~' (33〜126)をランダムに生成
       生成した文字列の中に、'0'〜'9'がひとつも含まれない、または
       '0'〜'9'以外がひとつも含まれない場合は、再生成する。

プログラム

コードの使用方法


プログラム説明

以下はVBScriptコード

function random_str(length)
'
' 数字入りのランダムな文字列を生成
'
' IN: length 生成する文字列長
'
	random_str = ""
	if length<1 then exit function

	dim s,c
	dim i

	dim cnt_num,cnt_en '数字、非数字出現個数

	randomize

	do

		cnt_num = 0
		cnt_en = 0
		s = ""

		for i=1 to length

			c = 33+(126-33)*rnd(1)
			if ( c >= asc("0") )  and ( c <= asc("9") ) then
				cnt_num = cnt_num + 1
			else
				cnt_en = cnt_en + 1
			end if
			s = s & chr(c)

		next

	loop while (cnt_num = 0) or (cnt_en = 0) '共に出現までループ

	random_str = s

end function
補足:

 関数
  randomize : 乱数を初期化(毎回異なる乱数が生成される)
  rand :     乱数生成
  asc :     指定文字のASCIIコードを返す
  chr :     指定ASCIIコードの文字を返す
 変数
  cnt_num :   数字の出現回数−初期値 0 、数字が生成されたら加算
  cnt_en  :   英字の出現回数−初期値 0 、英字が生成されたら加算

システム情報取得(JScriptとVBScript)

JScriptVBScriptで作成したシステム情報を取得する関数を使用

コードの使用方法



以下はスクリプト部分(説明は省略)

JScriptコード − ユーザー名、ドメイン名、コンピュータ名を取得
function SystemInfo_JS(){

	var rc;

	//ネットワークオブジェクトの作成
	var objNetWork = new ActiveXObject("WScript.Network")

	//ユーザ名
	rc  = "UserName     = " + objNetWork.UserName     + "\r\n";

	//ドメイン名
	rc += "UserDomain   = " + objNetWork.UserDomain   + "\r\n";

	//コンピュータ名
	rc += "ComputerName = " + objNetWork.ComputerName + "\r\n";

	objNetWork = null;

	return rc;
}
    

VBScriptコード  − ユーザー名、ドメイン名、コンピュータ名、およびサービス情報を取得
function SystemInfo_VBS()

        Dim objNetWork
        Dim strUserName,strDomain,strComputer
        Dim Dt

        'ネットワークオブジェクトの作成
        Set objNetWork = CreateObject("WScript.Network")

        strUser     = objNetWork.UserName       'ユーザ名
        strDomain   = objNetWork.UserDomain     'ドメイン名
        strComputer = objNetWork.ComputerName   'コンピュータ名

        Dt =    "UserName     = " & strUser & vbCrLf & _
                "UserDomain   = " & strDomain & vbCrLf & _
                "ComputerName = " & strComputer & vbCrLf & vbCrLf


        'サービス情報

        Dim DiplayName,State,StartMode

        Set wbemServices = GetObject("winmgmts:\\" & strComputer)
        Set wbemObjectSet = wbemServices.InstancesOf("Win32_Service")

        Dt = Dt & "状態  " & "モード  " & "表示名" & vbCrLf
        For Each wbemObject In wbemObjectSet
                DisplayName = wbemObject.DisplayName
                State       = wbemObject.State
                StartMode   = wbemObject.StartMode
                Dt = Dt & State     & String(  8 - Len(State)," ")     _
                        & StartMode & String( 10 - Len(StartMode)," ") _
                        & DisplayName & vbCrLf

        Next

        SystemInfo_VBS = Dt

        Set wbemServices = Nothing
        Set objNetWork   = Nothing

end function
    

ヘロンの公式による三角形の面積(JavaScript)

ヘロンの公式(3辺の長さにより三角形の面積を求める)の関数をJavaScriptで作成

コードの使用方法



以下はスクリプト部分(説明は省略)

JavaScriptコード
function Heron_java(a,b,c){
// 入力  a,b,c 3辺の長さ
// 戻り値 三角形の面積 -1:エラー
//
        var s;
        var rc;

        if( a>0 && b>0 && c>0 ){        //全て正?
                s = (a+b+c)/2;
                rc = Math.sqrt(s*(s-a)*(s-b)*(s-c));
                return rc ;
        }else{
                return -2;              //エラー
        }
}
    

フィボナッチ数列(JavaScript)

フィボナッチ数列を求める関数をJavaScriptにて作成 − フィボナッチ数列とは?

1) n番目の項目値を求める

コードの使用方法


以下はスクリプト部分(説明は省略)
function fib(n){

// フィボナッチ数列:n番目の項 = 前2項の和
//  最初の数項の値
//   0,1,1,2,3,5,8,13,21,34,55,89,144・・・・
//   ここでは繰り返し処理を使用してn番目の値を求める

        var f;          // n番目の値
        var f1,f2;      // それぞれ1つ前、2つ前の値 
        for(var i = 0; i <= n; i++){
                if(i <= 1){
                        f = i;
                }else{
                        f = f1 + f2;
                }
                f2 = f1;
                f1 = f;
        }

        return f;
}
      

2) n番目の項目値を求める−再帰呼び出し

コードの使用方法



以下はスクリプト部分(説明は省略)
function fib(n){

// フィボナッチ数列:n番目の項 = 前2項の和
//  f(0)=0,f(1)=1 f(n+2)=f(n)+f(n+1)
//   0,1,1,2,3,5,8,13,21,34,55,89,144・・・・
//   ここでは再帰処理を使用してn番目の値を求める
//  なお、スクリプト再帰処理の限界か?、32以上ではエラーとなる

        if( n < 2 ){
                return n ;
        }else{
                return fib(n-2) + fib(n-1);
        }
}
      

3) n番目の項目までの値を全て求める

コードの使用方法



以下はスクリプト部分(説明は省略)
本例では、桁数を揃える為に先頭空白詰めの内部関数(figure_change)を使用している。
(内部関数は同一モジュール内であれば、いくつでも定義/使用できる)
function fib_all(n){

// フィボナッチ数列:n番目の項 = 前2項の和
//  最初の数項の値
//   0,1,1,2,3,5,8,13,21,34,55,89,144・・・・
//   ここでは繰り返し処理を使用してn番目の値を求める

        var f;          // n番目の値
        var f1,f2;      // それぞれ1つ前、2つ前の値 
        var rc = "" ;
        for(var i = 0; i <= n; i++){
                if(i <= 1){
                        f = i;
                }else{
                        f = f1 + f2;
                }
                f2 = f1;
                f1 = f;
                rc += "n = " + figure_change(i,3," ") + "  " + f +"\r\n";
        }

        return rc;
}


function figure_change(string,figure,letter){

//-------------------------------------------------------------------------
//桁揃え
//  引き数 string = 結合前の値(文字列)
//         figure = 結合後の桁数(数値)
//         letter = 結合する値(文字列)
//  戻り値 return_string = 結合後の文字列
//-------------------------------------------------------------------------

        var string = String(string);    //結合前の値を文字列とする
        var letter = String(letter);    //結合する値も文字列とする

        var figure = Number(figure) - string.length;    //不足桁数計算

        var return_string = "";

        //結合文字を、不足桁数分追加
        for(var figure_i=0; figure_i<figure; figure_i++){
                return_string += letter;
                if(return_string.length > figure){
                        return_string = return_string.slice(0,figure);
                        break;
                }
        }

        return_string += string;        //結合前の値(文字列)を追加

        return return_string;
}
      

外部ファイル化

フィボナッチ数列を求める関数を外部ファイルとします。
外部ファイルにすることで複数のプログラムから同一の関数を利用でき、開発や保守が容易になります。

使用する外部ファイルは「サンプル」フォルダ内の「MyFunctions.inc

コードの使用方法



暗号化/復号化

ファイル指定での暗号および復号

平文ファイル(サンプル\パスワード.csv)を読込、暗号化後に、デスクトップに パスワード_暗号.csv の名前で保存。
その後、その暗号化済みファイルを読み込み、復号化して パスワード_復号.csv の名前で保存。
途中で、パスワードを設定するかのダイアログを表示

コードの使用方法



以下、手順説明
001        INIT
002 ! ---------------------------
003 ! 平文ファイル⇔暗号ファイル
004 ! パスワード設定可
005 ! ---------------------------
006        Dim       //平文ファイル   Path_Plain    サンプル\パスワード.csv
007        Dim       //暗号化ファイル Path_Cipher   <desktop>\パス・・・
008        Dim       //復号化ファイル Path_Decipher <desktop>\パスワード_復号.csv
009        MSG_BOX   //説明                   暗号化/復号化のサンプル
010 !
011        FileRead  //平文ファイル読込
012        MSG_BOX   //平文表示
013        INPUT_BOX //パスワード入力
014        EnCode    //暗号化&保存
015        MSG_BOX   //暗号化文表示
016        DeCode    //復号&保存
017        MSG_BOX   //復号文表示
    
011 平文ファイル(サンプル\パスワード.csv)を読込
012 読込んだファイル内容を表示
013 パスワード設定
    インプットボックスにパスワード入力を求める
       入力なし時は、パスワード設定無し
014 暗号化&ファイル保存(デスクトップ−パスワード_暗号.csv)
015 暗号化の結果を表示
016 復号化&ファイル保存(デスクトップ−パスワード_復号.csv)
017 復号化した結果を表示

直接文字列指定での暗号化

直接文字列を暗号化、および復号化します。
途中で、パスワードを設定するかのダイアログを表示

コードの使用方法


説明は省略
001        INIT
002 ! ---------------------------
003 ! 暗号化⇔復号化
004 ! ファイルを使用せずに実行
005 ! パスワード設定可
006 ! ---------------------------
007        Dim         //原文       StrSrc
008        Dim         //暗号文     StrEnCode
009        Dim         //復号文     StrDeCode
010        Dim         //パスワード PassWd
011 !
012        MSG_BOX     //説明
013 !
014        INPUT_BOX   //平文入力
015        SetVariable //変数退避
016        INPUT_BOX   //パスワード入力
017        SetVariable //退避
018        EnCode      //暗号化
019        SetVariable //変数退避
020        MSG_BOX     //暗号化文表示
021        DeCode      //復号化
022        SetVariable //変数退避
023        MSG_BOX     //復号文表示
    

暗号化パスワードファイルによるログイン

暗号化されているパスワードファイル(暗号化パスワード)を読込み、そのIDパスワードにより、Webサイトにログイン

パスワードを公にせずログインしたい場合や、パスワードのみを定期的に変更したい場合などに有効。
ただし、このままでは、実行行を精査すればパスワードは丸見えなので、DATデータの「暗号化」および「Exeファイルの実行環境限定」としてExeファイルで実行します。これで万全。

コードの使用方法



以下、手順説明

008〜011 変数定義
        CSVファイルのパスとパスワードを変数に入れて置く
013〜016 CSVファイルから該当のIDとパスワードを読込む
018     サイトをオープン
019〜022 IDとパスワードを入力して「ログイン」ボタンをクリック
023     完了メッセージを表示
001            INIT                    
002 ! ---------------------------                           
003 ! 暗号化されたパスワードファイルから                             
004 ! ID,パスワードを読込んで                            
005 ! Webサイトにログインします                                
006 ! ---------------------------                           
007 ! 変数定義                          
008      Dim     //CSVファイルのパス    CsvPath   サンプル\暗号化パスワード
009      Dim     //CSVのパスワード      CsvPasswd 12345abcde
010      Dim     //ID                   ID
011      Dim     //パスワード           PassWd
012 ! ID,パスワード読込                               
013      GetCodedCsvData //ID           %CsvPath%
014      SetVariable     //値退避       ID         %FuncRet%    
015      GetCodedCsvData //パスワード   %CsvPath%
016      SetVariable     //値退避       PassWd     %FuncRet%
017 ! ログイン                           
018      OPEN_AP         //Webサイトオープン            
019      IE入力          //ID            
020      IE入力          //パスワード         
021      IE入力          //ログインクリック              
022      IEWait          //完了待ち  20000   
023 End  MSG_BOX
   

実用ツール

ポイント位置の文字列取得ツール

マウスポインタ位置とその位置の表示文字列および詳細情報を取得。

操作方法

一時停止方法SHIFTキーで、停止⇔再開 を切り替える
           停止キーは、7行目の変数 StopKey で指定する。

文字列選択CTRLキーを押しながらドラッグすることで文字列を選択できる

プログラム

押下キーの判定WaitEventsAll にてイベント情報を取得
 指定した変数に情報がセットされる。ここでは、
 %Event%: イベント名 = KEY_DOWN
 %Detail%: 詳細情報  = キーコード

表示画面の色:SHOW_MSGのパラメータの %bcolor% で背景色を指定している
 実行中:うす緑  停止中:白

キー名称:停止キーは可変なので、GetKeyName関数を使ってキー名称文字列に変換している

StopKey , key の2つの変数を使用しているのは、画面上に、実行中/停止中の状態を表示するため。
画面上に区分を表示しないのであれば、変数1つで簡素にできるが、状態は判りにくい。


ポイント位置の文字列取得の簡易版
001       INIT                                  666 461 994 697  0,0,1,,0   
002 ! ------------------------------------------------------                
003 ! ポイント位置の文字列取得ツール                           
004 !                                                          
005 !  指定キーで停止⇔再開  キー変更可                     
006 ! ------------------------------------------------------                
007       Set              // 停止キー SHIFT          StopKey 16   
008       Set              // 名称                  KeyName GetKeyName(%StopKey%)   
009 !                                                          
010       Set              // 停止フラグ            Stop 0     
011       Set              // キー状態              key 0      
012       Set              // 表示文言              Msg        
013       Set              // 背景色                bcolor     
014 !                                                          
015       Set              // イベント              Event      
016       Set              // イベント詳細          Detail     
017 !                                                          
018       手動停止オフ                                         
019       MSG_BOX          // 説明表示                 %KeyName% キーで、

 停止 ⇔ 再開

を切り替えます。

文字列の選択は、CTRLキーを押しながらドラッグします。
   
020       SHOW_MSG         // 表示初期位置     0 0 0 7000 5000 0,-2147483643,1,0,0,12,MS ゴシック,False,False,False,False, 00000   
021 !                                                          
022       Do-While         // 無限ループ  1                    
023 !                                                          
024         WaitEventsAll                           %Event% %Detail%   
025 !                                                          
026         If                     %Event% = "KEY_DOWN"            
027           If           // 指定のキーが押され?  %Detail% = %StopKey%            
028             Set        // フラグ反転            key 1 - %key%   
029           End-If                                           
030         End-If                                             
031 !                                                          
032         If             // 停止オフ?  %Stop% = 0            
033           If           // キーが押された!  %key% = 1            
034             Set        // 表示文言 再開          Msg 停止中 − %KeyName% キーで再開
      CTRLキーを押しながら文字列選択   
035             Set        // 背景色 白            bcolor rgb(255,255,255)   
036           Else                                             
037             Set        // 表示文言 停止          Msg %KeyName% キーで停止   
038             Set        // 背景色 薄緑          bcolor 15728346   
039           End-If                                           
040 !                                                          
041           SHOW_MSG     // 文言表示         0     0,%bcolor%,1,0,0,12,MS ゴシック,False,False,False,False, %Msg%

マウス位置 GetCursorPosX(),GetCursorPosY()

Name        : GetAccName()
Value       : GetAccValue()
Role        : GetAccRole()
State       : Hex(GetAccState())
Focus       : GetAccFocus()
ParentName  : GetAccParentName()
ParentRole  : GetAccParentRole()
ChildCount  : GetAccChildCount()
DefautAction: GetAccDefaultAction()
Description : GetAccDescription()00000   
042 !                                                          
043         End-If                                             
044         Set            // 停止フラグセット          Stop %key%   
045       WLoop                                                
                                         

      

コードの使用方法


ウィンドウ最前面表示化ツール

クリックしたウィンドウを常に最前面に表示されるようにします。(または解除
 (無限ループなので、ホットキーまたは本体の「停止」でプログラムは停止させる。)

前面起動の簡易版

001    INIT
002    Set          // オプション
003    Set          // ウィンドウハンドル
004 !
005    SHOW_MSG
006    ShowOption      // オプション選択フォーム
007 !
008    Do-While 1
009      WaitClick     // クリック待ち
010      SetVariable    // ポイント位置のウィンドウハンドル
011      If %Opt% = 1
012               // 処理無し
013      Else-If %Opt% = 2
014        SetWindowPosZ // 最前面
015      Else
016        SetWindowPosZ // 解除
017      End-If
018      SetOption     //「処理無し」にセット
019    WLoop

コードの使用方法



ウィンドウ半透明化ツール

クリックしたウィンドウを半透明化または部分透明化します。(または解除
 (無限ループなので、ホットキーまたは本体の「停止」でプログラムは停止させる。)

前面起動の簡易版

001    INIT
002    Set             // オプション Opt
003    Set             // ウィンドウハンドル hWnd
004    Set             // 透明度 Trans
005 !
006    SHOW_MSG
007    ShowOption ウィンドウ透明化
008    LIST_BOX           // 透明度の指定
009 !
010    Do-While 1
011      WaitClick        // クリック待ち
012      SetVariable       // ポイント位置のウィンドウハンドル
013      If %Opt% = 1
014                   // 処理無し
015      Else-If %Opt% = 2
016        SetWindowTrans    // 半透明
017      Else-If %Opt% = 3
018        SetWindowTransColor // 部分透明
019      Else-If %Opt% = 4
020        SetWindowTrans    // 解除
021      Else
022                   // 以外
023      End-If
024      SetOption        //「処理無し」にセット
025    WLoop

コードの使用方法



クリックキャプチャー

クリックしたウィンドウを順次キャプチャーしてファイルに保存します。

・キャプチャー対象
 デスクトップ/アクティブウィンドウ/ポイントウィンドウ の3種
・保存先
 ユーザーが指定(既定は「設定」で指定されているフォルダ)

クリップキャプチャーの簡易版

ロジック解説は後日

コードの使用方法


あっどくりっぷ

文字列をコピーすると、収集窓に、順次クリップされていきます。
最後に、Ctrl+Vとすると、収集した全文字列が貼り付けられ、収集窓の内容が消去されます。

あっどくりっぷの簡易版

ロジック解説は後日

コードの使用方法



文字数カウントツール

文字列をコピーすると、収集窓に、文字数をカウントします。
カウント種別は

   字数():総文字数
   改行 :改行数 改行コード=CrLf
   byte :Shift-JISコードでの総バイト数
   全角():全角文字数
   半角():半角文字数
   全SP :全角スペース
   半SP :半角スペース
   タブ :タブ

(nn):括弧内の数値は改行/スペース/タブを除いた文字数

コピーしてカウントの簡易版

あくまで簡易版なので、あまりに多数(数万)字の場合、フリーズしたかのような時間が掛かりますので注意。
ロジック解説は後日

コードの使用方法



メール

デスクトップ観察

概要

デスクトップ画面を定期的にキャプチャーし、その画像を指定アドレスにメール送信する。

プログラム手順

・デスクトップをキャプチャー
  指定パス(マイドキュメントの「cap.jpg」)に保存
・メール送信
  指定アドレスにキャプチャー画像ファイルを添付して送信
・指定時間(20秒)待ち → 上記を無限ループとして繰り返す



変数定義 − 送信間隔(20秒毎)




変数定義 − キャプチャー画像を保存するファイル名
 %MyDocument% − マイドキュメントのパス(定義済み)




画像キャプチャー
  画面全体(デスクトップ画面)をキャプチャーする




メール送信

 ここでは添付ファイルを変数で指定
 件名には、送信する時刻がセットされるようにしている。

 下図の設定値はYAHOOメール、かつ架空の値なので
 そのままでは動作しません。
 それぞれのプロバイダに合わせて設定して下さい。

         例: 無料メール設定表




YAHOOメールで受信した例

約20秒間隔で受信しているのがわかる。
添付ファイル付き



メール内容

プログラムコード

コードの使用方法

簡易E−メール送信

メール送信を行う。
Windows標準のメール機能を使用する為、あらかじめ、メール送信機能(SMTP)が設定されている必要がある。
(特別な設定ではなく、通常のメール送信(OutlookやOutlookExpressなどのメーラーによる送信)

ここでは、下記の2つのパターンで送信する

最少入力

・差出人アドレス

・件名

・本文



受信側の「差出人」の欄には、メールアドレスが表示される。

宛先アドレスを省略すると、差出人宛てに送られる。
(本ツールを使う場合は、自分宛に送るのが一般的と思われる)




コードの使用方法

フル入力

・差出人アドレス

・差出人名

・添付
  任意のファイルを添付可
  セミコロン「;」で区切ることにより、任意数添付可

・件名

・本文



それぞれは変数を使用して指定することができる

 − サンプルコードは省略




なお、受信はできない。

受信機能が必要な場合は、次項のコマンドを使用する。
(少々、面倒)

メール受信と自動送信(PC擬似遠隔操作)

メールによりマウスレコーダーを擬似遠隔操作

処理

 定期的(30秒毎)に受信メールを監視し、メールの指示により処理を行い、メールの発信元へ返送後に、また待機状態に戻ります。

動作

 ・メールの件名が「マウスレコーダー」の場合、メールをダウンロード
 ・指示が"スタンバイ"の場合
   返信メールを送信 → スタンバイ → 指示された復帰秒数後に復帰 → メール受信待ち
 ・指示が"電卓起動"の場合
   電卓起動 → メール返信 → 電卓を閉じる → メール受信待ち


設定する情報

ユーザー個別情報(必須 − サンプルの xxxxxx の部分がユーザーごとに変更要
情報 変数名 補足
SMTPサーバー名 %SMTPserver% 送信用サーバー
POPサーバー名 %POPserver% 受信用サーバー
アカウント名 %Account% メールアカウント:受信時に必要
パスワード %PassWd% 同上
自メールアドレス %MyAddress% 返信用アドレスを設定のために必要
自表示名 %MyName% マウスレコーダー
設定値
情報 変数名 補足
メール監視間隔 %Time_Interval% 受信メール監視間隔(30秒)
件名フィルター %SubjectFilter% 件名に当文言が含まれている場合のみメールをダウンロードする

指示メールの形式
設定値
件名 本文 補足
マウスレコーダー コマンド<スタンバイ>
復帰時間<60>
PCをスタンバイ状態にし60秒後に復帰させる
コマンド<電卓起動> 電卓を起動し、10秒後に閉じる

コマンドおよびサブコマンド(時間)は CheckData関数正規表現により抽出。
 コマンド:CheckData(%Mail_Body%,"<(.+?)>")
 サブコマンド:CheckData(%Mail_Body%,"復帰時間<(.+?)>")
操作

 上記メールを、本プログラムでマウスレコーダーが動作中のPCに対して送信すると、
 マウスレコーダーが受信/解析してPC操作を行い応答返信後、再度、メール受信待ち状態になります。一種の擬似PC遠隔操作




注意:
  メールアカウントは、出来れば日常使用のアカウントではなく専用のアカウントを使用して下さい。

  受信したメールは、通常使用しているメーラーの
「受信トレイ」には入らないので注意。
  保存指示をしておくと「MyData」フォルダに格納されます。
  できれば
フリーメールアカウントを取得して、そのアカウントで試すのをお奨めします。
  また、本サンプル改造後の使用については
自己責任でお願いします。

  ちなみに、YAHOOの場合 POP/SMTPサーバーは下記
受信メール(POP3)サーバー pop.mail.yahoo.co.jp
送信メール(SMTP)サーバー smtp.mail.yahoo.co.jp

 (本ツールのようなメールソフトから送受信を行うにはPOPアクセスの設定が必要です。)


    サンプルプログラム概要
001      INIT                          440285
002 ! ---------------------------                           
003 ! ユーザー固有情報                           
004      Dim      // SMTPサーバー名        SMTPserver
xx.xxxxxxxxx.xx
005      Dim      // POPサーバー名        POPserver
xxxx.xxxxxxx.xx
006      Dim      // アカウント名         Account
xxxxxxxx
007      Dim      // パスワード          PassWd
xxxxxxxx
008      Dim      // 自メールアドレス       MyAddress
xxxxxx@xxxx.xxxx.xx
009      Dim      // 自表示名           MyName マウスレコーダー
010 ! ---------------------------                           
011 ! 基本情報変数                           
012      Dim      // 監視間隔              
013      Dim      // 受信件名制限            
014 ! ---------------------------                           
015 ! 受信メール格納変数                           
016      Dim      // 件名                
017      Dim      // 本文                
018      Dim      // ヘッダー              
019      Dim      // リターンアドレス          
020      Dim      // コマンド(本文から抽出)       
021      Dim      // サブコマンド(本文から抽出)       
022 ! ===========================                           
023 ! メインルーチン                           
024 ! ---------------------------                           
025      手動停止オフ                     
026      Do                          
027        SetVariable  // 件名制限              
028        
RecvMail    // メール受信             
029        If                    %Mail_Header% <> [%DQ%][%DQ%]
030          SetVariable  // リターンアドレス          
031          SetVariable  // コマンド抽出            
032          SHOW_MSG                        037351290
033          Case-Call   // 本文で処理分岐           
034        End-If                        
035        Wait      // 待ち         %Time_Interval%     
036      Loop-While                  1    
037      QUIT                         
038 ! ===========================                           
039 ! 個別処理ルーチン群                           
040      Dim      // 一時変数              
041 ! ---------------------------                           
042 ! スタンバイ                           
043 STNBY   SetVariable  // サブコマンド抽出          
044      SetVariable  // 指示秒数を算出(復帰までの秒数)       
045      SHOW_MSG                        051603945
046      
SendMail    // メール送信             
047      PowerStandby  // スタンバイ             
048      Return                        
049 !                                
050 ! 電卓起動                           
051 CAL    AP_Open    // 電卓起動               758012222
052      SHOW_MSG                        051603945
053      AP_Quit    // 電卓を閉じる            
054      
SendMail    // メール送信             
055      Return                        
 
コードの使用方法

×
PageTop