HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0820
SADOUSキーフックのような状態+キーが謎の動作をする6解決


SADOUS

リンク

2014/8/20(Wed) 02:51:24|NO.64037

ソース丸投げで申し訳ありませんが、浅はかな知識でよく理解もせず
掲示板で得たサンプルを見よう見まねで使用していた結果ボロが出てしまいました。
なので、理解したつもりで入れた//コメントが大量に入っています。(汗)
「あ、これ以前に書いたことあるような」というような部分もあるかもしれません。
https://www.dropbox.com/s/3m9n7z2set9f1cx/mcmp103source.zip

具体的には、このソフトを起動した状態でこのソフト以外の場所で
・ALTキーを押しても全く反応しない→キーフック?
・Wキーを押すと反応しなかったりctrl+Aやdelなどのような動作をする(不規則)

mouse_eventやgetkeyでwを取得していたりするのが関係していそうだと踏んでは
みたものの、そもそもmouse_eventとgetkeyがどう関係しているのかもサッパリ無知無知
なので原因究明しようにも何から調べたらいいのかもサッパリで・・・
というかmouse_eventとgetkeyって干渉するものなのか・・・な?


何が原因でこのような動作をしているのか教えてもらえませんか?
ソフトの性質上かなり厄介なバグなのでしっかり理解しておきたいところです。



この記事に返信する


SADOUS

リンク

2014/8/20(Wed) 03:07:50|NO.64038

因みに、キーフックをやった覚えはなく
これが影響しているのかなー?と思うものを挙げてみると以下のとおりに。
QueryPerformanceCounter:await計測に
WindowFromPoint:マウス直下に何があんのか
getkey
mouse
mouse_event

あ、書き忘れてましたけど
ctrl+F5を長押しすると僕がデバッグ用に使ってたリアルタイム変数監視ウィンドウ(仮)が
でてきました。すっかり忘れてました。



SADOUS

リンク

2014/8/20(Wed) 03:23:37|NO.64039

連投すみません
プログラムの説明がなしじゃ丸投げで長く失礼ですよね。

120行目までは初期設定で外部関数を読み込んだり初期値などが詰まってます。
その後にメインループ
サブルーチンジャンプにコメントが挟んであったので主な行き先・動作は
すぐに分かると思います。
131行目の描写ルーチンで、

if rend=0 or rend_fr\k_drw=0{ gosub*scini ;描写 gosub*drow gosub*helpdrow if debugonoroff==1:gosub*debug }
とありますが、rendは確か連打モード(mouse_event[0-1]高速切替)のオンオフを意味し、
rend_fr\k_drw(定数=500)は連打モード時に描写回数を減らすためのもので
rend_frはHSPが扱えるだいたいの桁に到達するまで加算され続ける。
→195行目


ちょっと分かりにくいのは、[;キー判定]とコメントされたルーチンでは
キー判定以外にも変数更新も入っていたりするので[;MCM処理]と
少しゴッチャになるかもしれない・・・



KOMARI

リンク

2014/8/20(Wed) 12:17:31|NO.64044

適当にソース読んだからよくわかりませんが、

>>・ALTキーを押しても全く反応しない→キーフック?
少なくともこちらでは確認できませんでした。

>>・Wキーを押すと反応しなかったりctrl+Aやdelなどのような動作をする(不規則)
Wキーをいつでもgetkeyし、それに対してmouse_eventしているんだから当然の動きではないでしょうか。
いつでもそういう動きをするのかは知りませんが、こちらが試したサクラエディタ上の動作で考えると、

>>ctrl+A
 クアドラプルクリックをすると全選択になる。
>>del
 適当に範囲選択して移動すると、上書きして移動する。(ので消えたように見える)

納得の動きですね。
>>mouse_eventとgetkeyって干渉する
わけではありません。
Wキーを4連打すれば前者になるし、Wキーを連打しながらマウス動かしてりゃ後者になることもあるでしょう。
まあサクラエディタに限らず、少なくとも一般のエディター上ならこんな動きをするんじゃないかなあ。

・余談
Wキーでクリックさせているが、例えばWキーで上や前方向に移動するゲーム上で使いたいとなった場合はどうするのだろうか。
もちろん、ユーザーは他のキーに割り当てを変えることを望むわけだが(・ω・)……



SADOUS

リンク

2014/8/20(Wed) 17:40:12|NO.64066

>KOMARIさん
Wキーの動作については納得です。色々と標準外のものを取り入れていたので
余計に難しく考えていたようです。

>ユーザーは他のキーに割り当てを変えることを望むわけだが(・ω・)
たしかに3Dゲームとかは特にWキー被ってしまいますね。
MOVE/連打モード同様選択できるようにしないとです。


と、ALTのみで確認しているキーフック?のような現象が起きるかどうか確かめるだけに
なりました!
他のキーでも変な挙動があったら、考えられる原因も合わせて教えて下さい。
■こちらの環境
windows 7 64bit
ノートパソコン テンキー付キーボード



KOMARI

リンク

2014/8/20(Wed) 19:09:56|NO.64070

今更ですが、Altキーに関してはどういう状況で反応しませんでしたか?(何の目的で何に対してAltキーを押下したか)
Altキーを押下したことでアクティヴウィンドウが変わったとか、クリック中もしくはクリックのしすぎでそもそもキーが無効化されるようなものが対象になっていませんか?



SADOUS

リンク

2014/8/20(Wed) 22:46:12|NO.64092

どうも勘違いだったのか何だったのか、ALTキー無効化のバグが再現できない。
バグが起きないに越したことはありませんが、ちょっと腑に落ちない感も。

Wキーmouse_eventについては、
キー割当の選択・機能の無効化に加え、余裕があれば入力フォームの監視でも
してみようかなとか・・・やめておこう



ONION software Copyright 1997-2021(c) All rights reserved.