我正在使用QT編寫C++中的遠程桌面克隆。到目前爲止,我可以將鼠標光標移到正確的位置。 QT有一個很好的setPos功能。不過,我有點迷失於用來模擬鼠標按鍵點擊的API/Library。在Windows中模擬鼠標按鈕點擊
我知道的一種方法是使用窗口的HWND將WM_(event)發送到窗口。但是,我希望有一個更明顯的方法來完全控制鼠標。是否有任何其他方式告訴操作系統鼠標左鍵已被點擊?
謝謝。
我正在使用QT編寫C++中的遠程桌面克隆。到目前爲止,我可以將鼠標光標移到正確的位置。 QT有一個很好的setPos功能。不過,我有點迷失於用來模擬鼠標按鍵點擊的API/Library。在Windows中模擬鼠標按鈕點擊
我知道的一種方法是使用窗口的HWND將WM_(event)發送到窗口。但是,我希望有一個更明顯的方法來完全控制鼠標。是否有任何其他方式告訴操作系統鼠標左鍵已被點擊?
謝謝。
這是在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
這是非常錯誤的,參數不是* long *。 – 2011-01-10 21:37:34
盧卡斯Šalkauskas'解決方案已經爲我工作了一段時間,但今天它突然導致了f ollowing錯誤(也許是由於Windows更新一些.NET更新?)
一個調用的PInvoke功能 'SampleMethod' 有不平衡的 堆棧。這很可能是因爲 託管的PInvoke簽名不會與 匹配非託管目標籤名。 檢查PInvoke簽名 的調用約定和 參數是否與目標非託管簽名相匹配。
所以我切換到pinvoke.net sample code,現在工作得很好:
[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);
}
結合所有togegher,這裏是Qt的代碼:
#include <windows.h>
QApplication::desktop()->cursor().setPos(globalX,globalY);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 1, 1, 0, 0);
它真的有效! – 2013-04-22 10:19:55
嗨尼克。您如何在遠程桌面上取得成功?我目前正在使用遠程支持擴展應用程序。我想知道,你是如何解決文本輸入的文本組件(如果有的話)?在Qt中很容易識別,光標下的Widget是QLineEdit還是類似的。但是對於本機Windows對象應該怎麼做? – 2014-07-21 23:03:47