その他ツール > KMmacro

KMmacro


KMmacro

キーボードマクロ
 あくまで、キーボード・マウスの操作を自動化するもの
 マウスの操作は指定した画面の位置で操作を行うため、ウィンドウの位置がずれると操作が上手くいかない
 マクロを実行しながらPCの操作を行う場合、マウスの位置クリップボードの内容を変更してしまうことになる。

XISMOで使うか分からないけど

キーボードマクロ&マウスマクロ KMmacro
https://www.vector.co.jp/soft/winnt/util/se211440.html
掲示板(製作者たわしと氏が管理しています)
https://trick-room.bbs.fc2.com/

私の使用している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を実行)
  • _終了 ;多分、終了。ESC キーで終了可能
[_切替 ;ファイルを呼び出し、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)などカッコの後にスペースなど


メモ

気が付いたことを書き込む自分用ログ、ログインするの面倒なため、掲示板


  • 全角文字、文字コードASNIでマクロファイル出力(メッセージ文はOK) - dbot (2022-07-11 01:29:12)
  • 文字( )の扱い方法が解らない "(" err:(~)が閉じていません とメッセージされる - dbot (2022-06-12 14:39:56)
    • " ( ) "を変数にセットし、stringで分割して設定。ただし"("部分を変数にセットして使用するとエラー - dbot (2022-06-12 20:27:40)
      • ()が""に近い扱いになっている(%13)が文字列%13になってしまう - dbot (2022-06-12 20:36:57)
  • exitfor 次のnext文までスキップの模様、forが多重になっている場合注意 - dbot (2022-06-12 12:43:46)
  • for文 for A=1 to 1 ”A=1"とスペースを入れずに記述、スペース有の場合成立したあつかいでfor終了 - dbot (2022-06-12 11:40:16)
  • if文の比較記号は、(=とスペースを入れずに記入、入れた場合成立せずにelse扱い - dbot (2022-06-11 10:26:02)
  • メッセージ 表示するデータが1個の場合message %1 (& %20)  &の記入必要、 message %1 (%20)は文字列”%20”と表示される - dbot (2022-06-10 23:49:24)
  • 改行は”¥n” ダブルコーテイションで囲む。¥nは文字列¥nとして処理される - dbot (2022-06-10 23:35:52)
  • 文字間のスペースは1バイトスペース。2バイトスペースが紛れ込むと期待した処理の解釈とならない - dbot (2022-06-08 15:41:48)
  • IF文の終わりのendifは間にスペースなし、end△ifの記述はendと解釈される - dbot (2022-06-08 15:38:02)
  • コマンドプロンプトから取得したタイムスタンプの比較で行き詰ってたので参考になり申した - 名無しさん (2021-04-14 09:52:25)
最終更新:2022年07月06日 01:03