• 締切済み

マウス自体の移動量の取得

kmb01の回答

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.3

BCBで作ってみたけど、質問の方法で上手く動いていますよ。 void __fastcall TForm1::FormShow(TObject *Sender) { ShowCursor(FALSE); int cx = ClientWidth/2; int cy = ClientHeight/2; TPoint pt0(cx, cy); TPoint pt = ClientToScreen(pt0); SetCursorPos(pt.x, pt.y); } void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { static int sX, sY; int cx = ClientWidth/2; int cy = ClientHeight/2; if (X==cx && Y==cy) return; sX += X-cx; sY += Y-cy; AnsiString s; Caption = s.sprintf("%d %d", sX, sY); TPoint pt0(cx, cy); TPoint pt = ClientToScreen(pt0); SetCursorPos(pt.x, pt.y); }

Haten
質問者

補足

実際にプログラミングして頂き大変恐縮です。 私も同じようなコードを試しました。一見うまく動いているようですが、動作のログを取ると思ったように動いていません。 最下行で SetCursorPos()でカーソルを移動しているのですが、次の FromMouseMove が呼ばれた時には未だカーソルは強制的に中央に移動していません。例えば、右側にマウスをずーと動かし続けると、10回のサンプル間はマウスカーソルは右に動き続け、11回目のサンプル(FromMouseMoveが呼ばれた時)で中央に強制移動し、12回目以降はマウスカーソルは再び右側に動き始める、となります。つまり、何時、マウスカーソルが中央に移動したかプログラム側では判定の方法が無いのです。 この方法で、マウス自体の絶対移動変移量を取る事はできないのでしょうか。

関連するQ&A

  • XPのマウスの移動量について

    XPのマウスの移動量について質問があります。 いろいろとマウスの移動量を上げる(マウス自体を少し移動させただけでマウスポインタが画面上をたくさん移動する)方法を調べて、実際に試してみたりしたのですが期待する結果は得られませんでした。 しかしながら、自分とは違うメーカーのマウスを使っている方は移動量が多いのです。 マウスの移動量というのはOSの設定だけではなくマウス自体(ハードウェア)にもよってくるのでしょうか。 それともマウスのドライバにもよってくるのでしょうか。 もしそうであるならマウスを買い換えたいと思っています。 知っている方ご教授ください。

  • DirectInputでの現在のマウス座標は・・?

    DirectInputでマウス座標を取得したいのですが、 lX lY による移動量の取得方法しかわからず、 初回起動時に下のコードで現在座標を取得して扱っているのですが、 ----------------------------------- GetCursorPos(&point); ScreenToClient(hWnd, &point); input_mpos[0] = float(point.x); input_mpos[1] = float(point.y); ----------------------------------- 問題点 1.クライアント領域を抜け、モニターの隅までマウスカーソルが行っても移動量が加算され続け狂ってしまう 2.タイトルバーをダブルクリックして擬似フルスクリーンにすると移動量そのものが通用しない 3.フォーカスが飛んだり、ダイアログボックスが出ると現在座標が狂ってしまう に悩まされています。 常に確実にクライアント内の座標を捕らえ続けられる計算式というか、 定番の手順というものが有ったりするのでしょうか? それとも、マウス座標はDirectXで取得しようとする事そのものが間違いだったりするのでしょうか? 経験者様いらっしゃいましたら、ヒント程度でも構いませんので教えて頂けると幸いです。 orz

  • マウスカーソルの位置を取得したい

    Component上でのマウスカーソル位置は、そのコンポーネントに MouseMotionListenerを設定することにより取得できますが、 Conponentに関係なく画面上でのマウスカーソルの位置を取得するには どのようにすれば良いのでしょうか? 同じ質問ですが、別の表現をしてみると、java.awt.Robotクラスの mouseMoveメソッドを用いれば、(Componentに関係なく)画面上の 任意位置にマウスカーソルを移動できますが、この逆の機能として カーソルの位置を取得する機能は、どの様に実装すれば良いのでしょうか? 以上、よろしくお願い申し上げます。

    • ベストアンサー
    • Java
  • Visual C++ 2008 Express Editionでの カーソル座標取得

    こんにちは.素人の質問ですがどなたか教えてください. Visual C++ 2008 Express EditionのWindowsフォームアプリケーションで,マウスカーソルの位置座標を取得して,その値を画面に表示させることをやりたいと思っています.マウスカーソルの位置座標取得にはGetCursorPos()関数を使用すると調べたのですが,Windowsフォームアプリケーションのプログラム中でどのように使用すれば良いのか分かりません. 宜しくお願いします.

  • マウスポインタが勝手に移動

    光学式のマウスを使っているのですが、マウスポインタが勝手に何もせずに移動するときがあるのです(結構頻繁です)移動するのは決まって画面の右上の隅や、左上の隅や、左下のスタートボタンの上に移動するのです。画面の中央にマウスポインタがあっても一瞬のうちに移動してしまいます。コントロールパネルの中のマウスの項目を見ても変更できるそれらしいものがなくどこで設定をかえればいいのか分からず困っています。それとも、マウス自体が悪いのでしょうか。勝手に動く時以外は正常に動くので壊れてるとは考えにくいのですが・・・ご回答よろしくお願いいたします。

  • デュアルモニタでメインの画面にマウスカーソルを移動

    ツールなどを使わずにマウスカーソルをどこにおいていてもメインモニタの中央等に 移動させる事は可能でしょうか? たまに見失うこともあり、またさっとメイン画面での作業に戻りたいのに サブ画面からマウスを動かしてカーソルを戻すのがもたつきます。 メインとサブ画面を行き来する時にスマートに出来ないので… 使用パソコンはWIN7の64Bitです

  • マウスのdpi

    マウスのdpiについての質問です。 dpiが大きいとマウスの細かい動きを反映してくれるということはわかったのですが、dpiの大きさはカーソルの移動量にも影響するのですか?つまり、マウスを1センチ動かしたとき、dpiが低い場合と高い場合では、実際カーソルがディスプレイ上で動く移動距離が異なるのかどうか、ということです。もし変わるようでしたら、1000dpiのマウス設定から2000dpiのマウス設定にした場合、移動距離も2倍になりますか?

  • PCのマウスが使えないのですが

    win10のノートパソコンです。マウスを操作してもカーソルが動かなくなりました。 ひょっとすると再起動直後に出る「マウスが使えるようにする」というような 意味のポップアップで、「使用しない」をクリックして消してしまったから とも思います。マウスが使える方法を教えてください。 なお、PCのキーボードの近くにある操作盤ではカーソルが使えます。 これについてですが、「右クリック」とマウスの中央にあるダイヤル?のように 「画面を上げたり下げたり移動」させる方法も教えてください。

  • マウスのホイールクリックによるスクロールができなくなった

    説明しづらいのですが マウスのホイールをクリックするとカーソルが変わって、その状態でマウスを移動させるとスクロールする機能がありますよね。 その機能が突然できなくなってしまいました。 この機能だけが動作しなくなっただけで、ホイールクリック自体はできます。 マウスが壊れたのかと思って、他のマウスでもやったところ同じ結果だったので、マウスの故障というわけではないみたいです。 分かる方がいましたらお願いします。 OS:vista Home Premium

  • マウス

    私は、 レーザーマウス(ELECOM「PRUMIE」M-P3UP2RBK)と トラックボール(東京ニーズ「Jr.TRACK2」NTB-800 USR)を 両方接続して使っているのですが、トラックボールの方のカーソルの移動が異常に遅いので、レジストリを編集して最適な速度にしました。 ところが、そうするとマウスの方のカーソルの移動が速すぎて、とても操作できません。 そこで、マウスごとに速度を設定することなどできるでしょうか? 両方とも、Windows XP標準のマウスドライバで動作するものです。