【アプリ】LuaMacrosの異変

結局LuaMacrosで落ち着いた。

 

【アプリ】HidKeySequenceの代替 (7) -結局-

 

 

 

HidKeySequenceにはアプリごとに自動で切り替えて なんてことをやっていたけど

今となっては各アプリでそこまで必要ない使い方をしているので

使用しない設定がたくさんある状態だった。

 

いっそのことここでリセットしてスッキリしましょう と

必要最低限の設定にしたら、結構キーが空いたw

 

 

で、使おうとして動きがおかしい事に気づいた。

想定していた処理結果と違う。

 

 

何がおかしいのかキーを押して調べてみると、左手キーボードのキーが

LuaMacrosを貫通(?)して出力されてしまっている。

ex:テンキーの1を押したらCtrl+F13をSendKeyとしているところで、
1が(テキストエディタなんかに)出力された上で、Ctrl+F13が実行されている。

 

いや、ちょっと待ってくれ。

そういう時のために

if (direction == 1) then return end

と記述して、ボタンが押されたら無視する としているのだ。

なんでキーが押された事を拾ってるんだ?

 

気持ち悪いので詳細を見てやろう。


lmc_set_handler("LHKey", function(button, direction)
  print('Callback for device: button ' .. button .. ', direction '..direction)
  if (direct/ion == 1) then return end
 
緑の部分を追加。

こうすることで、ログエリアに押したキーと、キーの状態(押/放)が表示される。

 

Callback for device: button 97, direction 1
Callback for device: button 97, direction 0

テンキーの1を押して放すとこのセットが表示される。

その状態でテキストエディタなんかでテンキーの1を押すと

Callback for device: button 97, direction 1

と同時にテキストエディタ上で1が出力されて

Callback for device: button 97, direction 0

の跡に処理が動いている。

 

うん。まぁ想定通りなんだけど、if (direction == 1) then return end

完全に無視されてるね。

 

なんか書き方が悪いのかと色々調べたけど、ピンポイントでの解決策は見つからず。

 

参ったな。

前はちゃんと動いていたはずなのだが・・・?

 

 

2時間ほどあーだこーだやって、解決せず。

お手上げか。

 

 

 

LuaMacrosを再起動したら直った。

 

そう来たか・・・。

 

 

 

 

ということを調べている中で気がついた。

LuaMacrosを使ってみた系のBlogを見ると、だいたいが同じ記述をしている。

大元がそうなっていて、それをコピーして派生して今に至るんだろう。

 

こんな感じだ。


if (direction == 1) then return end
if (button == 97) then
  lmc_send_keys("abc",50)
end
if (button == 98) then
  lmc_send_keys("def",50)
end
if (button == 99) then
  lmc_send_keys("ghi",50)
end

 

一見何も問題ないように見えるけど、これってどうなのよ と。

 

この状態でテンキーの1(キーコードは97)を押してみよう。

押した → 何も起きない ※if (direction == 1)でTrueになって、そのまま終了

放す → 2番目のif文に突入 → キーコードは97なのでTrue → abcが出力される

ここからが問題。

※abcが出力された後 → 3番目のif文に突入 → 97なのでFalse

→ 4番目のif文に突入 → 97なのでFalse

・・・

最後のif文まで全部チェックするわけだ。

実際には一瞬で終わるだろう。

でも

100あったら?

10,000あったら?

1,000,000あったら?(ねーよ

超絶無駄なわけですよ。

 

なので

if (button == 97) then
  lmc_send_keys("abc",50)
 return
end
if (button == 98) then
  lmc_send_keys("def",50)
  return
end

returnで終わらせてしまうか

 

if (button == 97) then
  lmc_send_keys("abc",50)
elseif (button == 98) then
  lmc_send_keys("def",50)
elseif (button == 99) then
  lmc_send_keys("ghi",50)

end

elseifで以後の余計な判定をしないようにする

 

・・・のが良いのではないだろうか。

 

return ~ endを都度書くよりelseifの方がシンプルなので、無駄なトラブルは避けられそう。

最後のelseifにはendが必要なので忘れないように。怒られるw

 

最初はif~return~endで作っていたけど、可読性を上げるためにelseifを使っている。

疑似switch文も一瞬頭をよぎったけど、面倒なのでやめた(何

 

カテゴリー: PC, ソフトウェア, 技術的 タグ: , , ,  [パーマリンク]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です