簡體   English   中英

Cursor.Postition和Mouse_Event被阻止

[英]Cursor.Postition and Mouse_Event being Blocked

我正在開發一個應用程序,以自動將某些輸入輸入到另一個應用程序中。 而且我遇到了一個問題。 以下是我正在使用的功能代碼

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

public enum MouseButton
{
    MOUSEEVENTF_LEFTDOWN = 0x02,
    MOUSEEVENTF_LEFTUP = 0x04,
    MOUSEEVENTF_RIGHTDOWN = 0x08,
    MOUSEEVENTF_RIGHTUP = 0x10
}

這是我用來移動並單擊的代碼

Point LocPoint = GetLocation(Column, Row, Item);
Console.WriteLine("Column: {0}\tRow: {1}\tItem: {2}\tPoints: {3}\tCursor: {4}", Column, Row, Item, Points, LocPoint.X + "," + LocPoint.Y);

Thread.Sleep(200);
Cursor.Position = LocPoint;
Thread.Sleep(10);

MouseClick.mouse_event((int)MouseButton.MOUSEEVENTF_LEFTDOWN | (int)MouseButton.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Thread.Sleep(200);

但是在這里,當我沒有要輸入的應用程序作為活動窗口時,事情變得很有趣,但是說mspaint代碼運行良好,並且我從畫筆中獲得了點,但是當我想要應用程序時,我想單擊要運行該命令,鼠標永遠不會移動,並且沒有注冊任何點擊,就好像應用程序正在攔截這些調用並忽略它們一樣。 所以這導致我兩個問題

  1. 這可能嗎? 如何檢測鼠標和設置電線之間的差異
  2. 有沒有辦法解決此問題或使用另一種方法?

好的,所以每個人都告訴我改用SendInput。 好的,所以我將代碼更改為使用SendInput。 我還嘗試了C#SendKeys作為測試。 目前,我已經回到基礎上,我只是想將字母A輸入到我手動設置目標的文本輸入框中。 當我在記事本中運行它時,SendInput和SendKeys都鍵入字母A,但是當我在另一個應用程序中時,我試圖將其自動顯示為空白。 這是我正在使用的SendInput代碼。

INPUT[] Inputs = new INPUT[2];
Inputs[0].type = WindowsAPI.INPUT_KEYBOARD;
Inputs[0].ki.wVk = 0;
Inputs[0].ki.dwFlags = WindowsAPI.KEYEVENTF_UNICODE;
Inputs[0].ki.wScan = 0x41;

Inputs[0].type = WindowsAPI.INPUT_KEYBOARD;
Inputs[0].ki.wVk = 0;
Inputs[1].ki.dwFlags = WindowsAPI.KEYEVENTF_KEYUP;
Inputs[0].ki.wScan = 0x41;

WindowsAPI.SendInput((uint)Inputs.Length, Inputs, Marshal.SizeOf(Inputs[0]));

因此,在無奈之后,我決定在Visual Studio的調試模式之外運行該應用程序,結果沒有任何結果。 但是,即使通過UAC,我也決定通過“以管理員身份”運行該應用程序,但令我驚訝的是,該應用程序正確地移動了鼠標,單擊並輸入了文本。 我不知道為什么這是必需的,因為我以前曾使用過方法,並且從來不需要這樣做,但是這似乎是解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM