KMmacro
KMmacro
キーボードマクロ
あくまで、キーボード・マウスの操作を自動化するもの
マウスの操作は指定した画面の位置で操作を行うため、ウィンドウの位置がずれると操作が上手くいかない
マクロを実行しながらPCの操作を行う場合、マウスの位置クリップボードの内容を変更してしまうことになる。
XISMOで使うか分からないけど
私の使用しているverは0.61、新しいverが出ているようです。
ファイル構成
KMmacro.exe ;KMmacro.exeの本体
KMmacro.HOT ;KMmacro.exeのホットキー設定ファイル、指定方法はKMmacro.txt参照・最大32個
KMmacro.ico ;KMmacro.exeのアイコン、差し替え可
KMmacro.INI ;KMmacro.exeの設定ファイル、指定方法はKMmacro.txt参照
KMmacro.LST ;アクティブなプログラムによりメニューを切り替える場合に使用、指定方法はKMmacro.txt参照
KMmacro.MAC ;「¥_実行」で実行されるマクロ。直前に「^_記録」したキーボードマクロ、ファイル出力にかかわらず保存される。
KMmacro.MNU ;KMmacroのメニューに表示される、マクロ・最大64
KMmacro.txt ;Readme、使用方法、構文など
KMrec.exe ;マクロの記録を行う実体、「^_記録」で実行される
KMrec.INI ;KMrec.exeの設定ファイル、指定方法はKMmacro.txt参照
loop.mac ;マクロサンプル loop文
test.MAC ;マクロサンプル 演算、IF文
ポップアップメニュー
^_記録 ;マクロの記録を行う。この時記憶したマクロはKMmacro.MACに書き込まれる、保存した場合、KMmacro.MNUに登録する。
\_実行 ;直前の「^_記録」で記録したマクロを実行する。(KMmacro.MACを実行)
[_切替 ;ファイルを呼び出し、xxx.MACの場合マクロを実行。xxx.MNUの場合メニューの切り替え
]_編集 ;ファイルを呼び出し、編集する。デフォルトはメモ帳が起動される
これ以降はKMmacro.MNUに登録されたマクロが表示される。
L_繰り返し ;マクロサンプル(loop.mac)を実行する。
KMmacro.MNU
KMmacroのメニューに表示されるマクロ・最大64
「^_記録」で保存したマクロが追加される。上書き保存したマクロも別に表示される。
「^_記録」で追加されたマクロは、保存時のファイル名をマクロ名として使用する。
パスが記述されていない場合は、本体からの相対アドレス
1カラム目が「:」をマクロ名として認識
続く文字列をそのマクロの実行ファイル名として認識(直後の一個)exeファイルの実行はKMmacro.txt参照
:L 繰り返し マクロ名
loop.mac マクロファイル
:A_埋め込み マクロ名
C:\Users\xxx~\A_埋め込み.MAC マクロファイル
備考
マクロの記録中に、中断して記録しているマクロを修正できる
マクロ、拡張子.MAC
Delphiの構文が参考になるかも
マクロ
変数
先頭に%を付け変数として認識する。
%0~%63:デフォルトで用意されている変数、DIM宣言不要
その他の変数を使用する場合はDIMで宣言すること。宣言が無い物は文字列として認識する
DIM %WORK
SET %WORK 2
INC %TEST 1 ;DIM宣言していないため、文字列"%TEST"として扱い、演算が出来ない
配列、[]で配列数・添え字を指定。続けて記述すること
DIM %TBL[2]
SET %TBL[0] A
SET %TBL[1] 2
構文エラー
SET %TBL[ 0 ] A ;[と「添え字」と]の間に空白があるため、認識できない
SET %TBL [1] A ;OK
SET %TBL[1] 2 ;OK
演算
INC %変数W A ;%変数WにAを加算、Aを省略すると1、定数/変数の記述可
DEC %変数W A ;%変数WからAを減算、Aを省略すると1、定数/変数の記述可
演算・比較などでも使用可
SET %変数W (+ A B) ;%変数W←A+Bの結果を設定、ABは定数/変数の記述可。
SET %変数W (- A B) ;%変数W←A-Bの結果を設定
SET %変数W (* A B) ;%変数W←A*Bの結果を設定
SET %変数W (div A B) ;%変数W←A/Bの「商」を設定(整数の除算) 例(div 10 3) は3
SET %変数W (mod A B) ;%変数W←A/Bの「余り」を設定(整数の除算)例(mod 10 3) は1
IF (= %変数W (mod A B)) THEN ; %変数W とA/Bの「余り」を比較
比較系
結果は文字列"True"と"Fals"
IF (>= A B) THEN ; A >= Bならば"True"、そうでなければ"Fals"
IF (> A B) THEN ; A > Bならば"True"、そうでなければ"Fals"
IF (< A B) THEN ; A < Bならば"True"、そうでなければ"Fals"
IF (<= A B) THEN ; A <= Bならば"True"、そうでなければ"Fals"
IF (= A B) THEN ; A と Bが等しければ "True"、そうでなければ"Fals"
IF (<> A B) THEN ; A と Bが等しくなければ"True"、そうでなければ"Fals"
IF (not A) THEN ; A が"True"、ならば"Fals"、それ以外なら "True"
IF (or A B C ...) THEN ; A,B,C...いづれかが"True"ならば"True"、そうでなければ"Fals"
IF (and A B C ...) THEN ; A,B,C...いづれも"True"ならば"True"、そうでなければ"Fals"
IF (in A B) THEN ; 文字列Bに、文字列Aが含まれていれば"True"、そうでなければ"Fals"
文字列操作
2バイト文字を1文字として数える・・・らしいが文字ばけするので解りません
SET %変数W (& A B C ...) ; %文字列A・文字列B・文字列Cを結合した文字列
SET %変数W (len A) ; 文字列Aの文字数
SET %変数W (pos A B) ; 文字列Bに文字列Aが含まれていた場合、その位置(1相対)を、無い場合は0
SET %変数W (substr A i j) ; 文字列Aのi文字目からj文字数を返す。iが無効な場合1、jが無効な場合最後まで
SET %変数W (trim A) ; 文字列Aの右端と左端のスペースとタブを取り除く
SET %変数W (ltrim A) ; 文字列Aの 左端のスペースとタブを取り除く
SET %変数W (rrim A) ; 文字列Aの右端 のスペースとタブを取り除く
クリップボード
CLIPBRD A ;文字列Aをクリップボードに書き込みます。ペーストが必要
GETCLIPBRD %変数W ;クリップボードの値を%変数Wに取得する
PASTE 文字列 ;指定された文字列をアプリケーションにクリップボード経由でコピーします(入力します)。ペースト不要
SEND 文字列 ;指定された文字列をアプリケーションに送信します。オプションで動作が変わる。
キーボード
KEY 文字列 ;文字を打ち込む。キーの打刻を行うため"!"などは下記参照。漢字不可、文字列は定数として扱う多分
KEY [Shift]++ 1 [Shift]-- ;"!"(SHIFT + 1)を打ち込む。3コマンドを一行で記述した表記方法
KEY [Ctrl]++ C [Ctrl]-- ;「Ctrl+C」の動作[Ctrl]++、Ctrlを押した状態で"C"を押し、[Ctrl]--、Ctrlを離す
条件
IF (条件A) THEN ;処理は複数記述可能ENDIF必須
条件Aが偽の場合の処理
ELSE
条件Aが真の場合の処理
ENDIF
IF (条件A) THEN ;条件Aが真の場合の処理する(一コマンドのみ)
UNLESS (条件A) THEN ;条件Aが偽の場合の処理する(UNLESS ブロック形式が使える?)
ループ
;条件を満たしていても必ず一度ループ処理を行う。増分指定無しの場合1
FOR 変数名=初期値 TO 終了値 STEP 増分 ;変数名=初期値の記述は間スペースを入れない
:(処理)
条件 EXITFOR ;以降をスキップし再びループに入る?ループを終了?
処理
NEXT
コール ;ラベル名は":ラベル"で一つの処理名
CALL :ラベル ;ラベルは":ラベル"続けて記述
処理
END ;ENDが無い場合、終了せずに次の行を実行する
:ラベル ;サブルーチン
処理
RETURN ;コール元に復帰
マクロの終了
END ;サブモジュールなどでENDが記述されていてもマクロは終了する
例
クリップボードのツィッターの画像イメージのファイル名をawikiのimageのプラグインの書式に変換する
;
;** awiki IDメモ用 twitter **************************************************
;クリップボードの画像イメージ(ツィッター)をawikiのimegeの書式に置換する
; &image(画像ファイル名&name=small,画像ファイル名&name=large)
;****************************************************************************
;
GETCLIPBRD %20 ; 作業域に転送
IF (in "format=" %20) THEN ;画像である
SET %21 (POS "&" %20) ;サイズ指定区切り位置
IF (= %21 0) THEN ;
SET %21 (len %20) ;サイズ指定なし,全部
ELSE
DEC %21 ;サイズ指定区切り手前まで
ENDIF
SET %10 (SUBSTR %20 1 %21)
ELSE
SET %10 "*** IMG GET ERR NG2 ***" ;画像取得失敗
ENDIF
SET %20 (& "&image(" %10 "&name=small," %10 "&name=large)")
PASTE %20
END
注意事項
構文エラーとならない場合が多い、また記述ミスを文字列として解釈し動作する為、エラーが解りにくい
文字列は""(ダブルコーテーション)で囲む記述と囲まない記述どちらも可能
変数も同じくダブルコーテーションで囲んでも変数として認識する。
頭に%がついてもDIM定義されていないと変数でないと解釈し、文字列として処理される。
同様にコマンドの記述ミスも文字列扱いになる。
カッコ()を使用した関数の場合、(の後は続けて記述する。間にスペースがあると期待した動作をしない。
2バイトスペースの混在に注意、文字列として解釈され期待した動作にならない。ぱっと見解らない為、メモ帳の検索でつぶしておくこと。
2バイト文字が扱えるらしいが、文字化けの対処方法が分からない。
エラーなどなど
- 2バイトスペースの混在に注意、文字列が記述されていると解釈される。ぱっと見解らないのでメモ帳の検索などで確認。
- カッコ()を使用した構文は(の後を続けて記入。間にスペースを入れると期待した動作をしない
IF (= %SW_WDG_HI "1") THEN ;IF判定される
IF (=%SW_WDG_HI "1") THEN ;IF判定されない
比較記号の後はスペースが必要
- マクロの構文がペーストされる→なんらかの記述ミスを文字列として解釈しペーストしているパターン
変数、関数など記述ミス、間空けのためのスペースが2バイトスペース
- 無条件にelseが実行される。if文の条件記述ミス、if ( = A 0)などカッコの後にスペースなど
メモ
気が付いたことを書き込む自分用ログ、ログインするの面倒なため、
掲示板
最終更新:2022年07月06日 01:03