質問

私はQTを使ってC ++でリモートデスクトップクローンを書いています。これまでのところ私は罰金の周りにマウスカーソルを移動することができますよ。 QTは、そのための素晴らしいsetPos機能を持っています。しかし、私は、API /ライブラリは、マウスボタンのクリックをシミュレートするために使用すべきことの失われたビットです。

私の知る一つの方法は、ウィンドウのHWNDを使用してウィンドウにWM_(イベント)を送信することです。しかし、私はマウスを完全に制御を取るために、より顕著な方法があった期待していました。マウスの左ボタンがクリックされたオペレーティングシステムを指示する他の方法はありますか?

感謝します。

役に立ちましたか?

解決

これは、C#であるが、あなたのアイデアを得るために役立つかもしれません。

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
   public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);

   private const int MOUSEEVENTF_LEFTDOWN = 0x02;
   private const int MOUSEEVENTF_LEFTUP = 0x04;
   private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
   private const int MOUSEEVENTF_RIGHTUP = 0x10;

   public void DoMouseClick()
   {
      int X = Cursor.Position.X;
      int Y = Cursor.Position.Y;
      mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
   }
役立つかもしれない

リソース:

http://msdn.microsoft.com /en-us/library/ms646260%28VS.85%29.aspxする

http://www.codeguru.com/Cpp/ WP / win32の/ article.php / c4543 /

他のヒント

すべてのtogegherを組み合わせることで、ここではQtのためのコードがあります:

#include <windows.h>
QApplication::desktop()->cursor().setPos(globalX,globalY);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 1, 1, 0, 0);

ルーカスŠalkauskasのソリューションは、かなりの時間が私のために働いたが、今日それが突然、次のエラーになりました(おそらくWindows Updateでいくつかの.NET更新に?)

  

のPInvoke関数の呼び出し   「SampleMethodは」アンバランスを持っています   スタック。これは可能性がありますので、   管理のPInvoke署名はしていません   非管理対象の署名と一致。   呼び出し規約にいることを確認し、   PInvokeシグネチャのパラメータ   ターゲット管理対象外の署名と一致します。

だから私は、 pinvoke.netサンプルコードするに切り替え、それが動作しますさてます:

[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

[Flags]
public enum MouseEventFlags
{
    LEFTDOWN = 0x00000002,
    LEFTUP = 0x00000004,
    MIDDLEDOWN = 0x00000020,
    MIDDLEUP = 0x00000040,
    MOVE = 0x00000001,
    ABSOLUTE = 0x00008000,
    RIGHTDOWN = 0x00000008,
    RIGHTUP = 0x00000010
}

public static void LeftClick(int x, int y)
{
    Cursor.Position = new System.Drawing.Point(x, y);
    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top