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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0323
大富豪複数のマウスの座標取得25解決


大富豪

リンク

2022/3/23(Wed) 12:07:37|NO.95813

お世話になります。

【複数のマウスの座標取得】
そもそも可能なのか分かりませんが・・・。

PC1台にマウス(同一型式)を3台(またはもっと)繋げて、
HSPでそれぞれの座標を個別に取得する事は可能でしょうか。

※sample\basic\mouse.hsp
(このサンプルの×3並列)

PC1台にマウスA/B/Cを接続。
それぞれを別々に取得

mouseAx,mouseAy,
mouseBx,mouseBy,
mouseCx,mouseCy,

とか、
1つのプログラムで3つのマウス座標を同時に個別に取得したいです。
宜しくお願いします。



この記事に返信する


大富豪

リンク

2022/3/23(Wed) 12:55:58|NO.95814

windowsがそもそも同時にマウスを認識できないハズなので、

(先に入力(動き)したほうが優先になり、
それが動作中の間は他のマウスを動かしても認識しないんですよね)

たぶんhspusbio当たりかと思うのですが;
uio_getdevs
uio_getdevs

HSPでどのUSBポートを取得するかを切り替えるとか、
何か入力があればどのマウスUSBポートからの信号なのか
を見に行くとかでも良いです。

サンプルソースがなかなか見つかりません;

可能であればそれぞれのマウスが同時に別の動きをしても
それぞれ取得するポートを切り替えて
あたかも別々の座標を取得出来ているような感じでもいいのですが、

頻繁な入力デバイスの切り替えはあまりよくないような気もします・・・。
その方法も分かりません;



zrs90(5さい)

リンク

2022/3/23(Wed) 13:35:03|NO.95815

複数パッドが出来るので
複数マウスもあるだろう...と思って検索したら
ない様ですね。(※探し方が悪いのかも)


ただ、hsp3と関係ないソフトなら存在してます。
チラ見程度しか、見ませんでしたが
それだと、マウス6個まで可能とか。
(※見間違いならすみません)



zrs90(5さい)

リンク

2022/3/23(Wed) 13:39:34|NO.95816




zrs90(5さい)

リンク

2022/3/23(Wed) 14:02:00|NO.95818

●hsp3の、USBハードの接続なら
ここのhpに資料とかあったはず。

https://mclab.uunyan.com/



大富豪

リンク

2022/3/23(Wed) 18:48:41|NO.95825

>zrs90(5さい)さん
ありがとうございます。
はい、なんとなくそういうソフトがあるのは
薄々知っているのですが、
座標を取得してHSP上で色々やりたい事がありまして^^;。
リンク参考にさせて頂きます。

hspusbio / uio_getdevs / uio_seldev
これは機械言語とかの分野になるんですかね・・・
探しても具体的なHSP上での運用方法が出て来ません・・・



zakki

リンク

2022/3/23(Wed) 19:28:29|NO.95826

試してませんが、USBのレイヤーまで下りて行かなくてもWM_INPUTと生の入力データで相対座標なら得られるみたいです。
仕組み的に絶対座標は自分で管理するしかないような気がします。

https://p-tal.hatenadiary.org/entry/20090902/1251852285
https://docs.microsoft.com/ja-jp/windows/win32/inputdev/raw-input



zrs90(5さい)

リンク

2022/3/23(Wed) 19:48:30|NO.95827

hspusbioは、電子工作の知識が必要なキット(基板)
(中学校とかで、ラジオとか作った事がありますね?)

恐らくPCから、USB接続?してその
基板に付いている物を、hsp3から制御する?
...みたいな事が出来ると思います。
(※実物は調べた事も、見た事もないですが。)

hspusbio.txt に入手先等が書いてあります。


...で、ソフトの話に戻しますが
hsp3 で、ゲームパッドの複数接続が可能ですから
WinApi をいじれば、出来るような気はします。
(※私のレベルではムリですけど...)



GENKI

リンク

2022/3/23(Wed) 23:53:52|NO.95828

昔DirectXで取得できるような話を見た覚えがあったので調査。Wikipediaによると、DirectX7で複数マウス接続が可能になったがXP以降は機能しなくなったとのこと。だめかー。
ゲームパッドとは違って需要がないですから仕方ない。

USB/BT接続のHIDとして通信データを直接受け取れば何個でも大丈夫ですが、実装どうやればいいかわかりません。
なお、途中まで調査した資料はこちら。
https://mclab.uunyan.com/lab/usb.htm


> たぶんhspusbio当たりかと思うのですが;

hspusbioは「USB-IO」専用のモジュールだったと思うのですが…使えるのかな?


> 試してませんが、USBのレイヤーまで下りて行かなくてもWM_INPUTと生の入力データで相対座標なら得られるみたいです。

Rawinput ってなんだっけ?と思って調べていたらこんなの出てきました。

【HSP3】複数台のマウスが接続されている場合は、どれからの入力なのかを判断するサンプル(てきとー)
https://codetter.com/?p=823



zrs90(5さい)

リンク

2022/3/24(Thu) 10:06:32|NO.95832

zakki さん、GENKI さん
いつもありがとうございます。

zakki さんの説明は、いつもサラッと書いて
あるのですが、私のスキル程度では、絶対ムリです。

GENKI さんの最後に紹介して頂いたリンク先の
説明見て数秒後...(※この時まだ接続してません)

2次元に、穴開けて埋まりに行きたくなりました(恥)

結論から言うと 複数マウス hsp3 で外部検索、掛けると
このリンク先、ほぼ一発で出て来ました。はい。
(※飲んでた炭酸水吹いた)

...イノビアさんの昔の製作物らしい?
相変わらずスマホ投稿なんで
チェックは出来ませんが
動作する確率は高いです。

この所、外部検索で、hsp関係のワード付けると
検索していた物が、消滅する事が多々あり
(※Android、hgimg4関係とか...)
hsp3 を付けるのを忘れて(※サボって)
検索した結果、見つけられなかった...のが原因。

さらに情けない事に、私の検索方法を確か
スレッド主さん?に以前、説明した事があり
そこに書いてあると言う失態っぷり...


−追記−

別スレッドの話になりますが
zakki さんありがとうございました。

実の所、あのスレッドが出た時点で
答えられるのはzakkiさん以外いないよなぁ...と。

スマホ対応は出来なかった?ようですが
dish.jsの、日本語入力を実現してくれる方が
いましたね。

この掲示板で半年程、投稿を見て来ましたが
スレッド主さんが、zakki さんの助言から
この短期間に、解決まで持ち込んだ方は
初めて見ました。...正直驚いています。



zezenana

リンク

2022/3/24(Thu) 11:17:20|NO.95834

> 大富豪 さん

関連した制作をしたことがありましたのでコメントさせて頂きます。

複数マウスの座標取得は Win32APIのRaw入力デバイス関数で実現できます。

手法としては、zakki さんの言っていることがすべてでして、
WM_INPUT メッセージにて取得できるマウスデバイスのハンドル値を
調べることで、どのマウスの入力データなのかを判断区別できます。

マウスの入力座標データは相対移動量となります。
マウスごとの絶対座標の取得については私も調査していましたが解決していません。。

Windows自体が接続されたマウスごとに絶対座標を個別管理しているのかも不明です。

以下サンプルでは、番号、ハンドル値、XY座標、ボタン情報を表示します。
XY座標は相対座標を加減算した値となっています。
ウィンドウがアクティブ時のみ、マウス入力処理を行なっています。
マウスカーソルと座標は連動していないので画面四隅で止まっても移動量は増減されます。

サンプルでは事前にマウス接続数を処理していませんので(Windowsドライバ系の処理となる)
新たに別なマウスの入力(ハンドル)があれば表示が追加されていきます。

この辺りが必要であれば、GENKI さんの URL添付している inoviaさんの SetupAPIの処理が
参考になるかも知れません。


#uselib "user32" #func RegisterRawInputDevices "RegisterRawInputDevices" int,int,int #func GetRawInputData "GetRawInputData" int,int,int,int,int #define WM_INPUT $00FF #define RID_INPUT $10000003 #define MAX_MOUSE 16 dim hMo,MAX_MOUSE dim moX,MAX_MOUSE:dim moY,MAX_MOUSE:dim moB,MAX_MOUSE oncmd gosub *on_wminput,WM_INPUT dim RIDEV,3 RIDEV.0=$01+($02<<16) RIDEV.1=0 //0=アクティブ時のみ/$100=すべて RIDEV.2=hwnd RegisterRawInputDevices varptr(RIDEV),1,12 if stat==0:dialog "RID Error":end repeat redraw 0:color 255,255,255:boxf color:pos 0,0 repeat mxMo mes strf("%2d)$%08X:(%5d,%5d):$%08X",cnt+1,hMo.cnt,moX.cnt,moY.cnt,moB.cnt) loop redraw 1:await 1000/30 loop:stop *on_wminput GetRawInputData lparam,RID_INPUT,0,varptr(sz),16 if sz{ dim RIDDT,(sz>>2)+1 GetRawInputData lparam,RID_INPUT,varptr(RIDDT),varptr(sz),16 if stat>0{ hRid=RIDDT.2:setd=0 repeat MAX_MOUSE if hMo.cnt==hRid:setd=1 if hMo.cnt==0:hMo.cnt=hRid:setd=1:mxMo++ if setd:moX.cnt+=RIDDT.7:moY.cnt+=RIDDT.8:moB.cnt=RIDDT.5:break loop }} return



大富豪

リンク

2022/3/24(Thu) 13:08:49|NO.95835

>zakkiさん、zrs90(5さい)さん、
>GENKIさん、zezenanaさん

皆様、
ご返答頂き誠にありがとうございます。

自分で内容を理解しないとアレンジできないので
なんとか理解しようとしているのですが、

私の頭部に搭載している低速CPUでは
あまりにも能力不足でございます@@;
(やりたい事と現実の乖離がすさまじいです・・・)
時間が掛かると思いますがトライします@@;

HSPヘルプにあるhspusbioがどうしても気になっていまして;
外部USBデバイス?からの入力と、
なんと信号出力(uio_out)も出来る?!
と書いているので気になりました。

思考回路がパンクしそうですので、
また改めてじっくり勉強させて頂きます。



大富豪

リンク

2022/3/25(Fri) 22:52:50|NO.95843

ご回答ありがとうございました。
難易度が高いです;



zrs90(5さい)

リンク

2022/3/26(Sat) 17:14:52|NO.95847

蛇足。参考になるかは不明ですが
こんな記事も。これは Linux用?らしい。

(※検索ワードWindowsでいれたはずだが
なんで引っかかって来るかな?
ページがやたら重いし
下は開発が止まった物らしい。(英語))

https://eng-blog.iij.ad.jp/archives/963

http://multicursor-wm.sourceforge.net



zrs90(5さい)

リンク

2022/3/27(Sun) 12:13:09|NO.95855

蛇足(その2)

調べていて分かった事ですが
このapi fps系のゲーム等にも有効な事
その反面かなり難があるようで。
(※ダウンロード含めて、自己責任でお願いします)

...私が出来るのは、ここまでです。
興味のある方は、hsp3化 チャレンジ
して見て下さい。

●EitherMouse
例によって、hsp3に関係ない
ソフトです。動作説明等が
何かの参考になるかも。

https://www.gigafree.net/utility/mouse/EitherMouse.html


●Raw Input API 資料
後書きの座標関係の話に
ヒントがあるような?

https://qiita.com/i_saint/items/957d76a238bd8f046b64


●Raw Input API 資料

http://pc98.skr.jp/post/2020/1231/


●Raw Input API 資料

https://wiki.onakasuita.org/pukiwiki/?Raw%20Input


●cによるマウス複数制御と
デモダウンロード??

https://tech.mutate.jp/rawinput/



大富豪

リンク

2022/3/28(Mon) 14:59:33|NO.95863

>zrs90(5さい)さん。
ありがとうございます。
同時制御については私の理解力をはるかに超越しております・・・
かなり難しいです;

>zakkiさんのNO.95826
のデバイス情報取得だけでもと思いましたが、
それすら・・・@@;

※複数マウスの同時接続はもともと出来ますが
(マウスA/B/C...で何らか先に入力されたほうのマウスが有効になる)
(ifA-ON/thenB-OFF/ifB-OFF/thenA-ONのような処理の感じだと思いますが、
それを無理やり高速で切り替えれば出来ない事もないのかと)

☆難易度レベルを一段階下げて、
とにかく何番のUSBポートからの入力なのかがHSPで判別できればと。
(PCには元々複数のUSBポートがありますが、どのポートからの入力なのかを識別)
(外部デバイスからPCに向けて送信しかなく、
そもそもUSBポートにiD割り当てが無いとか・・・なんですかね;)

uio_seldevとかがHSPのヘルプに出ていましたが、
ここまで難しいとは思いませんでした^^;



zakki

リンク

2022/3/28(Mon) 20:18:49|NO.95869

zezenanaさんのスクリプトで完成してて、後は自分の好きなようにmoXとmoYを使う感じでカーソル2個あるツールとかゲームとか楽しいもの作れそう。
Alt-F4で閉じてください。


#uselib "user32" #func RegisterRawInputDevices "RegisterRawInputDevices" int,int,int #func GetRawInputData "GetRawInputData" int,int,int,int,int #define WM_INPUT $00FF #define RID_INPUT $10000003 #define MAX_MOUSE 16 bgscr ,ginfo_dispx,ginfo_dispy,,0,0 mouse -1,-1 dim hMo,MAX_MOUSE dim moX,MAX_MOUSE:dim moY,MAX_MOUSE:dim moB,MAX_MOUSE oncmd gosub *on_wminput,WM_INPUT dim RIDEV,3 RIDEV.0=$01+($02<<16) RIDEV.1=0 //0=アクティブ時のみ/$100=すべて RIDEV.2=hwnd RegisterRawInputDevices varptr(RIDEV),1,12 if stat==0:dialog "RID Error":end repeat redraw 0:color 255,255,255:boxf color:pos 0,0 mes "" + ginfo_dispx + " " + ginfo_dispy repeat mxMo pos moX.cnt+50,moY.cnt mes strf("%2d)$%08X:(%5d,%5d):$%08X",cnt+1,hMo.cnt,moX.cnt,moY.cnt,moB.cnt) line moX.cnt,moY.cnt,moX.cnt+16,moY.cnt+16 line moX.cnt,moY.cnt,moX.cnt+16,moY.cnt line moX.cnt,moY.cnt,moX.cnt,moY.cnt+16 loop redraw 1:await 1000/30 loop stop *on_wminput GetRawInputData lparam,RID_INPUT,0,varptr(sz),16 if sz{ dim RIDDT,(sz>>2)+1 GetRawInputData lparam,RID_INPUT,varptr(RIDDT),varptr(sz),16 if stat>0{ hRid=RIDDT.2:setd=0 repeat MAX_MOUSE if hMo.cnt==hRid:setd=1 if hMo.cnt==0:hMo.cnt=hRid:setd=1:mxMo++ if setd { moX.cnt+=RIDDT.7:moY.cnt+=RIDDT.8:moB.cnt=RIDDT.5 if moX.cnt < 0: moX.cnt = 0 if moX.cnt > ginfo_sx : moX.cnt = ginfo_sx if moY.cnt < 0: moY.cnt = 0 if moY.cnt > ginfo_sy : moY.cnt = ginfo_sy break } loop } } return



zrs90(5さい)

リンク

2022/3/28(Mon) 21:14:53|NO.95870

zezenana さん、zakki さん 
ありがとうございます。

私の最後の書き込みの、多分、cかc#のソース?
覗いてくれる方が出るかな?...とは考えてました。
(※ライセンス等が不明な上、ちょっと怪しいんですが。)
... 結構探したつもりでしたが、役に立ちませんでしたねぇ...

私は、スマホ投稿のみなので、残念ながら動かせませんが
(※スマホで、ベーマガの打ち込みスタイルは
勘弁して下さい。)


ー追記ー

ノートPCのタッチパッド付きの場合は
タッチパッドと、マウス一個の組み合わせに
なるんでしょうか?



大富豪

リンク

2022/3/28(Mon) 22:57:19|NO.95872

>zakkiさん
ありがとうございます。

ご回答頂いた方のどこかのリンクにあったような気もしますが・・・。
シンプルに【任意のマウスの入力情報が、
何番のUSBポートからの入力なのかを判別するだけ】
は可能なんですかね。

全く使い方は分かりませんが、
winAPIのWinUSBの関係なんですかね;

例えば、
repeat
マウス(A)がクリックした瞬間に、
その入力元のUSBポートIDを取得、
=if(USB01)⇒thenマウス(A)の入力情報だと判別。

マウス(B)がクリックした瞬間に、
その入力元のUSBポートIDを取得、
=if(USB02)⇒thenマウス(B)の入力情報だと判別。
loop

そんな感じでシンプルに出来れば、
理解も応用もしやすいかと思いまして・・・。

すみません。

>zrs90(5さい)さん
マルチウインドウとかでワークスペースが拡大した事もあって、
マルチ動作で処理の集約とか色々面白い事ができそうなんですけどね;
私には難易度が高すぎでございました^^;


で、原点回帰ですが、
HSPヘルプにある
hspusbio /USBデバイス制御命令
これが何者なのか気になるわけです・・・。



zezenana

リンク

2022/3/28(Mon) 23:24:01|NO.95873

クローズしたスレに追加するのはなんですが、名前が出ましたので。

>大富豪 さん

>それを無理やり高速で切り替えれば出来ない事もないのかと)
基本的にWindowsのマウスカーソルは複数接続されたマウスごとに切り替えて使用することはできません。

それを無理やり行うとしたら、接続しているすべてのマウスドライバを列挙して
認識させたいマウス以外のマウスドライバを無効化する必要がありますが
無効化の処理は管理者権限が必要なこととドライバ無効処理が重いので高速切替などは
現実的ではありません。

私のサンプルが既に複数マウス接続対応していると思うのですがどうでしょうか?

今だと zakki さんの改良版サンプルが視覚的にも理解しやすいです。
Windowsのマウスカーソルを消して、自作カーソルを表示することで対応できます。

>とにかく何番のUSBポートからの入力なのかがHSPで判別できればと。
これを実現するには、SetupDiのAPIにてユニバーサル シリアル バスコントローラーと
ヒューマン インターフェース デバイスの関連付けを取得する必要があります。
インストールレジストリ情報を介した Windowsドライバ系の処理なので難易度は高いかもです。

>zakki さん

解りにくかったサンプルを解りやすく改良して頂いてありがとうございます。

>zrs90(5さい) さん

>(※スマホで、ベーマガの打ち込みスタイルは
iPhone のみのネット環境でしたら USB OTGケーブルでUSBメモリにファイル転送するとか
無線ルーターのUSB機能を介してのネット未接続でのファイル転送という手もありますよ。

ノートPCのタッチパッドもデバイスマネージャ上でマウスドライバ扱いと
なっているのであれば、2つ目のマウス扱いとなります。
専用のデバイスドライバなど、マウス以外の特殊なデバイスと認識されているのであれば、
認識しないかも知れません。



zrs90(5さい)

リンク

2022/3/28(Mon) 23:59:25|NO.95874

USB-IO hsp3 で検索。

関連する物が色々出てきます。
(※GENKI さんのHPとか。)

大富豪さん の想像してる物とは
少し違う気がしますが...一応。

元々、hspusbio 自体、命令も少ないですし
コネクターを介して、簡単なセンサーや
モーター、基板上に実装されたLED等
...を制御出来る程度?かと。

(※この基板は、USBと別にコネクター
が付いたデラックス版?の方ですが
この手のハードを、扱ってる方は
一般人の想像を、軽く超えて来るので
実の所、何が可能か分からないですが。)


実物の画像と、説明が載ってます。
過去のHSPプログラムコンテストの
賞品になっていたようで。

https://www.onionsoft.net/wp/archives/tag/usb-io



GENKI

リンク

2022/3/29(Tue) 00:04:42|NO.95875

忘れていたので調べました。


>> 大富豪さん
> hspusbio /USBデバイス制御命令

HDLでも読めますが、まずはこちら。

hspusbio.txt
https://www.onionsoft.net/hsp/v36/doclib/hspusbio.txt

書いてあるとおり、モルフィー企画さん、テクノキットさんで過去に販売されていた商品です。
現在は、Km2Netさん(http://km2net.com/)が取り扱っているようですね。

外観はこんな感じ。

https://akizukidenshi.com/catalog/g/gM-05131/

「USB-IO」は、自分で電子工作したものをパソコンから電子制御するための装置です。
hspusbioは「USB-IO」と通信するために専用に作られたプラグインです。
本も出ていますので、本屋さんで見かけたら手にとって見てください。

かんたん!USBで動かす電子工作
https://akizukidenshi.com/catalog/g/gS-05143/



大富豪

リンク

2022/3/29(Tue) 00:13:58|NO.95876

>zezenanaさん

>何番のUSBポートからの入力なのかをHSPで判別
>インストールレジストリ情報を介した Windowsドライバ系の処理

レ、レジストリ・・・怖いです・・・@@;


>WM_INPUT メッセージにて取得できるマウスデバイスのハンドル値を
>調べることで、どのマウスの入力データなのかを判断区別できます。

この辺も気になるところですが・・・。
ほかの件でもあったのですが、
デバイス関係の制御はかなり難しい分野なんですね。

やはり私が理解するには、
だいぶ能力不足という事で落ち着きそうです;

ご対応頂きありがとうございました。



大富豪

リンク

2022/3/29(Tue) 00:23:52|NO.95878

>zrs90(5さい)さん
>GENKIさん

タイミング的に順番が前後しました、
すみません。

いわゆるArduinoとかの関係でしょうか@@;
ハード機器との連携?にも大変興味がありますので、
大いに参考にさせて頂きたいと思います。

全くの無知の分野ですが;
PC内だけではなく今後AIとかロボット制御とかで
必要になってくるのではと思っています。
(ハード←接続→ソフト)

そちらの方面も勉強致します、
ありがとうございました。



zrs90(5さい)

リンク

2022/3/29(Tue) 01:23:00|NO.95879

zezenana さん
重ね重ね、ありがとうございます。



zrs90(5さい)

リンク

2022/3/29(Tue) 01:41:39|NO.95880

GENKI さん
ありがとうございました。
お手数をおかけしました。

このキット、私が紹介した物と
部品構成が、ずいぶん違いますね。
同じ物と思ってました。

大富豪さん すみませんでした。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.95813への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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