none
sendinput()によるカーソル移動プログラムの動作について RRS feed

  • 質問

  • sendinput()を使用して、マウスカーソルを移動させるプログラムを作成しました。(下記例参照)

     

    --<Sample>--

    // test.cpp
    //

    #include "stdafx.h"

    INPUT inputdata[]={
            { INPUT_MOUSE, 100, 100, 0, MOUSEEVENTF_MOVE , 0, 0 },
     };

    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow )
    {

     SendInput(1, inputdata, sizeof(INPUT));

     

     return 0;
    }
    --<Sample End>--

     

    このプログラムを、WindowsXP Professionalにリモート接続して、実行しても

    カーソルが移動しません。

     

    制約があるのでしょうか?

     

    ちなみに、 Windows2003Serverにリモート接続して、2003上で実行した場合には、

    期待通り移動します。

     

     

    2008年8月19日 5:38

回答

  • 似ているようなことが以下のところに書いてありますね。

    http://msdn.microsoft.com/ja-jp/library/cc421553.aspx


    セッションの問題であるならば、
    Windows 2003 Server で動作したのは偶然であって、
    Windows 2003 Server であってもセッションが違えば
    正常に動作しないはずですね。

    ちなみに SendInput 自身は成功しているのでしょうか?
    もし失敗しているならば、GetLastError でエラー値を取得すれば
    多少原因がわかるかもしれませんね。

    2008年8月19日 8:57
  • SetCursorPos を利用して、位置を指定してみるというのは如何でしょうか?

     

    http://msdn.microsoft.com/en-us/library/ms648394.aspx

     

     

    2008年8月20日 6:25

すべての返信

  • 制約があるのでしょうか?と聞いているので、
    リモートではないケースも試されているとは思いますが
    念のため確認させていただきます。
    Windows XP 上で、リモートではないローカルの実行ではうまくいきますでしょうか?

    2008年8月19日 8:50
  • 似ているようなことが以下のところに書いてありますね。

    http://msdn.microsoft.com/ja-jp/library/cc421553.aspx


    セッションの問題であるならば、
    Windows 2003 Server で動作したのは偶然であって、
    Windows 2003 Server であってもセッションが違えば
    正常に動作しないはずですね。

    ちなみに SendInput 自身は成功しているのでしょうか?
    もし失敗しているならば、GetLastError でエラー値を取得すれば
    多少原因がわかるかもしれませんね。

    2008年8月19日 8:57
  • 記載していなくて申し訳ありません。

    XPローカルでは、動作いたします。

    2008年8月19日 9:04
  • 関数自身は、失敗してはいないと考えています。

    というのも、マウスカーソルは、動いていませんが指している座標は目的のところを指しています。

    例えば、スタート釦のところに移動するようにプログラムの値を調整して実行すると、“この釦からはじめます”というガイドメッセージが表示されます。

     

    ご紹介頂いたHPはこれから参考にさせていただきますが、上記に書いたようにまったくプログラムが動いていないのではなく、マウスカーソルの表示だけが、追従していないように見えます。

     

     

     

    2008年8月19日 9:21
  • SetCursorPos を利用して、位置を指定してみるというのは如何でしょうか?

     

    http://msdn.microsoft.com/en-us/library/ms648394.aspx

     

     

    2008年8月20日 6:25
  • SetCursorPos()を利用した場合は、リモート側でも動作いたしました。

    ありがとうございました。

     

     

    2008年8月20日 9:13
  • こんにちは。中川俊輔 です。

     

    iversionjpさん、Takashi SAKAMOTOさん、回答ありがとうございます。

     

    teaoさん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、

    iversionjpさん、Takashi SAKAMOTOさんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    teaoさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年9月4日 5:43