Можно ли отправлять ключи / отправлять сообщения непосредственно в HtmlElement, а не в элемент управления веб-браузера? - PullRequest
1 голос
/ 19 апреля 2010

Я хотел бы отправлять ключи непосредственно элементу управления веб-браузера c #, а не только окну с правильным фокусом.

Сейчас я могу отправить ключ, используя PostMessage и documentHandle, и сфокусироваться следующим образом

т.е. Псевдокод

HtmlElement el = getelement();
el.Focus();
IntPtr docptr = browser.Handle;
PostMessage(docptr,WM_KEYDOWN,1,0);
.... KEYCHAR, KEYUP..

Мне было интересно, знает ли кто-нибудь какой-нибудь способ сделать это в фоновом режиме, чтобы фокус не был на элементе. По сути, есть способ получить IntPtr для самого HtmlElement, чем использовать его вместо этого в PostMessage или SendKeys API, а не в дескрипторе / ptr браузера.

Ответы [ 4 ]

0 голосов
/ 05 ноября 2010

Мне потребовалось много времени, чтобы найти это, но вам нужно p / invoke GetWindow с дочерней командой, чтобы многократно получать дескрипторы дочерних окон, пока не дойдете до того, который отвечает на GetClassName с помощью "Internet Explorer_Server" или чего-то подобного .

Затем PostMessage для этого hWnd и activeElement веб-браузера получит их. Убедитесь, что у вас есть WM_KEYUP, так как это кажется важным.

0 голосов
/ 19 апреля 2010

Посмотрите на такие вещи, как WaitN и Selenium.

IE также имеет хороший программный интерфейс для управления браузером.

Но есть и недостатки ...

В настоящее время я работаю над программой, которая использует распознавание изображений и управление мышью / клавишами для управления браузером, поскольку я действительно могу делать только то, что хочу с визуальным представлением.

Однако это будет доминировать в компьютере и нуждается в полном контроле. Если вы не запустите его на виртуальной машине.

0 голосов
/ 20 апреля 2010

Вы не можете. Это безоконные элементы управления, сообщения мыши / клавиатуры обрабатываются их родительским окном, а родительское сообщение передает только активный элемент управления.

0 голосов
/ 19 апреля 2010

Это неправильный путь.

Вы можете использовать HtmlElement API для непосредственного управления элементом.

Для точных инструкций, пожалуйста, сообщите нам, что вы пытаетесь сделать.

...