・マウスの左クリック操作を、複数あるマウスのいずれかのみに指定する
・指定外のマウスは、左クリックのみが無効になる
・指定方法は、GUIでもCUIでも可
・対象OSはWinXP
・接続マウスはUSB、2〜3個
Visual Studio .NET2003がありますので、Basic以外でも構いません。当方、Winのプログラミングは全く素人です。勉強をしていますが、書けるようになるまでには、かなりの時間がかかりそうです。
ズバリと使用できるようなソースをご提示いただいた方には、200pt差し上げたいと思います。
以上、よろしくお願いいたします。
Raw Input APIを利用すると複数のマウスがあっても1つの状態が取得できるようです。
http://hp.vector.co.jp/authors/VA000092/win32/GenericInput.html
Win32プログラミングノート --- Raw Input ---
すみません、VBのソースが見つからなかったもので…VC++のサンプルソースです。
http://homepage1.nifty.com/MADIA/vb/VBKANREN.htm
API 技術関連 - VBでのWin32APIのサンプル
URL先にマウス関係のVBのAPIサンプルがあります
まず、結論から
されようとしてることは。VBでは100%無理です
・USBマウスにもよりますが、OS上でIDの識別は出来ません
・IDの識別があったとして、デバイスドライバからの制御が必要になりますから、デバイスドライバを作成しなければなりません
・デバイスドライバはVBでは作ることができません
つまり、VB上から見る限りでは、複数繋いだマウスを識別することは不可能なのです
http://www.microsoft.com/japan/msdn/vs/vb/vbtchaccessingregistry...
このページは、存在しないか、削除されています。
では、無理か?
いくつか方法はあります
・USBではなくシリアルにマウスを接続し、COMポートからマウスを操作する(欠点、入手困難、プログラムに中級程度の知識が要る)
・HKEY_LOCAL_MACHINE¥System¥CurrentControlSet¥などのレジストりを直接操作する(再起動が必要、プログラミングに知識が必要、レジストリ操作するので危険、VBで直接アクセスできないので .NetFrameWorkガ必要)
・ソフトではなく、切り替え式のUSBハブを作る(これが一番楽かも^^;)
デバイスドライバを作られるのならVBではなく、VCだけでも無理です。デバイスドライバ用のSDKが必要になり、かなり高度な技術が必ようになります
詳細なご回答、ありがとうございます。なんと! VBなどでは、不可能なのですね。ううむ....困りました。VCもありますが、それでも×とは.... デバドラ作成はとても無理ですし、左クリックだけを選択したいので、単純なUSBハブもNGです。レジストリ操作の件も難しそうですし... 以外なアプローチがないか、もう少し、ご回答をお待ちしてみます。
Direct Input を使ったやり方ですが、
「Windows 98ではIDirectInput8::EnumDevicesで素直にデバイスご
とに取れるのだが、Windows 2000とXPではマウスやキーボードとい
うデバイスにまとめられてしまう。
どうやら、Windows 2000とXPではOSが数個のマウスやキーボードを
ひとつのマウスやキーボードとまとめるらしい。」
という記述がありました。
通常の方法では、複数マウスの個別認識はできなさそうですね。
「ダブルマウスシステム」というマウス複数台を利用したシステムを
研究しているところもあるようなので、
方法はありそうです。
一度、問い合わせてみてはいかがでしょうか?
http://www.cqpub.co.jp/hanbai/books/33/33191.htm
[絶版→新版移行2005.10.4] USBハード&ソフト開発のすべて
「USBハード&ソフト開発のすべて」
参考になるか分かりませんが、一応、本の紹介を載せておきます。
回答になっていないので、ポイントは結構です。
詳細なご回答を、ありがとうございました。先ほどの方もおっしゃってましたが、どうやら、難しそうですね。
参りました.... 簡単なコトだと思っていたのですが....
ご提示いただいたページを、じっくりと拝見してみます。あきらめきれないので、もう少し、他の方のご回答を待ってみます。
「『WindowsXPから、複数マウスの使用はDirectInputから切り離
されました』だと。
(本文は英語だったけど、日本語訳するとこんな感じ) そのかわ
りにRaw Input APIとかいうのを使えば複数マウスが取得できるん
だそうだ。」
だそうです。
Windows XP だと、Raw Input API を使うしか無さそうですね・・・。
了解しました。みなさま、同じご指摘のようですね。
実際に、この「Raw Input API」を使用したサンプルソースの紹介をしていただけると助かります。
希望条件を実際に実現(左クリックの機器指定)している内容だと、大助かりです。
http://www.vector.co.jp/soft/dl/winnt/prog/se244983.html
USB/PCMCIAデバイス管理用DLL(WindowsNT/2000/XP/Vista / プログラミング)
OSがプログラムに渡してくれる情報の中には、どこからの入力か…というハード的な情報は含まれていません。
そぉいう意味ではまったくもって不可能です。
新しいディバイスドライバを作るという点でもVBならずとも無理なんじゃないだろうかと思います。
…が、100%無理かといわれると、ん〜、なんか手はないかと昼からひっかかってました。
で、考えたのが、「マウスをコントロールするディバイスドライバをコントロールするプログラムを書く。」これならばOSに乗っかったプログラムからもマウスディバイスごとに指示ができるのではないでしょうか。
指定マウスのドライバを一時的に不能にしてしまえば、すくなくとも要件は達することができます。(* ´¬`)。oO(すごいことになりますな)
で、手段としては、掲題のURLのプログラムがドライバにソースがくっついております。
隠しAPIもいいところなので、正直素人プログラマーが手を出していいレベルだとは思えませんが、参考までに可能性として提示します。
むむむ... いろいろとお考えいただいたようで、すみません。ありがとうございます。かなり厳しいようですね....
ご指摘の手法と、ご指摘のDLLを使って、実現できないか、トライしてみます。しかし、Win系のプログラミングは、全くの素人(ゼロからスタートVB超入門を読んでます)ですので、道のりは遠そうです。
簡単なのかな...と、勝手読みしていたのが、甘かったのですね。
http://www.personal-media.co.jp/tron/developer/doc/brightv.r4/de...
第1章 デバイスドライバ共通仕様
URLは関係ありません。
ウチは素人ですが、素人考えで、
デバイスドライバーを一から作らなくても、ノートパソコンのデバイスドライバーを改変する事はできないのでしょうか?
売ると問題でしょうが、実験の為なら、、、。
http://www.katch.ne.jp/~morii/xgc/
Xbox コントローラ用デバイス ドライバ
無関係URLその2
ゲーム用のコントローラ(デバイスのある物)をばらして、各ボタンから、配線をマウスにつなぎ、ひとつのコントローラーを複数のマウスに改造する。
ゲームのコントローラーのボタンの設定をすべて左クリックと同じにしたら、、、あ、左クリックだけなら、シングルボタンのマウスにしたら沢山のマウスが、、、
http://www.xlsoft.com/jp/products/windriver/windriver.html
XLsoft Corporation : エクセルソフト デバイスドライバ開発ツール WinDriver - WinDriver
更に無関係URL
何の実験か想像できませんが、画面上の表示がTHMLなら、邪魔スクリプトで右クリックできないようにするのが楽チン
大変申し訳ありませんが、いずれの内容も、参考にはならないようです。すみません。
英語のページですが、このページにRaw Input APIのサンプルがサンプルが掲載されています。Visual C++でも使えるようです。
難しそうですが、がんばってコンパイルしてみます。手元には、Visual C# .net 2003があります。これでいけるかな?
参考先のホームページが、ちょっと高度のようです。VC++もどうにか動きそうですので、試してみます(試せるかどうかが、やや不安...)。もう少し、ダイレクトなご回答がいただけると、幸いです。