[英]mouse_event WinAPI call not working when cursor is over Flash
[英]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代碼運行良好,並且我從畫筆中獲得了點,但是當我想要應用程序時,我想單擊要運行該命令,鼠標永遠不會移動,並且沒有注冊任何點擊,就好像應用程序正在攔截這些調用並忽略它們一樣。 所以這導致我兩個問題
好的,所以每個人都告訴我改用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.