Я пытаюсь имитировать левый щелчок мыши для объекта InternetExplorer, даже если объект IE является фоновым окном. Системная функция, которую я использую, - SendMessage. Ниже приведен соответствующий код.SendMessage не работает с объектом InternetExplorer
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
InternetExplorer IE = new InternetExplorer();
IntPtr handle = (IntPtr) IE.HWND;
int x = 50;
int y = 50;
IntPtr lParam = (IntPtr)((y << 16) | x); // X and Y coordinates of the click
IntPtr wParam = IntPtr.Zero;
const uint downCode = 0x0201;
const uint upCode = 0x202;
SendMessage(handle, downCode, wParam, lParam); // mousedown
SendMessage(handle, upCode, wParam, lParam); // mouseup
Я точно знаю, что указанная позиция создаст новое окно IE при щелчке левой кнопкой мыши. Однако этого не происходит, используя код выше. Итак, что мне здесь не хватает?
обновление
ОС - Windows 7 Professional. IDE - это Visual Studio 2013 Pro.
Я также попытался добавить манифест и указать UIAccess = "true" на this page. Но это не сработало.
FYI Есть более эффективные способы вызова кликов по элементам (через DOM), если это ваше намерение –
Спасибо, Алекс. Я обязательно попробую DOM-подход. Однако, тем не менее, я все еще хотел бы понять, почему SendMessage не работает. – JBT
Ответ здесь: http://stackoverflow.com/a/3443518/932282, а также: http://stackoverflow.com/a/7121314/932282 – mhu