Сейчас на форуме: Rio, tyns777, zombi-vadim (+5 невидимых) |
eXeL@B —› Программирование —› подскажите порядок команд по разбору содержимого окна класса DirectUIHWND |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 26 августа 2012 17:38 · Личное сообщение · #1 возьмем пример окна "Мой компьютер" в виндовс хр. левая часть окна является DirectUIHWND. как можно прочитать его содержимое? а потом еще и выбрать определенный пункт? ссылку http://wmsdk.com/2009/07/09/directui-iaccessible/ не предлагать, потому как китайская грамота... нужен порядок команд, с помощью которого можно достучаться до содержимого окошка. с классом SysListView32 все получилось замечательно - читаю, выбираю. а вот в 7 виндовсе мое целевое окошко DirectUIHWND, и из-за этого затык... 4000 строчек кода и висит уже который месяц. насколько я понял: 1. сначала нужно найти хэндл окошка - это есть 2. проверить на доступность AccessibleObjectFromWindow - это есть, возвращает S_OK 3. посчитать количество child - есть, но видимо работает не верно. так как возвращает 0, хотя в этом окне ясное дело есть дочерние объекты. читаю командой get_accChildCount - конечно возможно я напутал с синтаксисом get_accChildCount, и поэтому он мне хоть и пишет S_OK... но само количество child пишет 0. но я полагаю что между AccessibleObjectFromWindow и get_accChildCount должна быть еще какая-то команда... ну не может это окно иметь 0, так как внутри него есть пункты всевозможные. |
|
Создано: 17 октября 2012 17:11 · Поправил: le-greem · Личное сообщение · #2 Вот код консоли. Самое удивительное, что тот же самый код, исполненный в вышеуказанной библиотеке(в обработчике кнопки) работает вполне себе корректно. Какая то ерунда. Уже голову сломал. Вполне очевидно, что ошибка у меня, но найти никак не могу. Увы. #include "stdafx.h" #include <conio.h> #include <OleAcc.h> #pragma comment(lib, "oleacc.lib") int _tmain(int argc, _TCHAR* argv[]) { HWND hwnd = (HWND)0X0002028C; //хэндл окна которое будет разбираться на дочерние элементы IAccessible *pIAcc = NULL; HRESULT hr = AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IAccessible, (void**)&pIAcc); //получаем указатель на интерфейс окна с указанным хэндлом VARIANT varRole; //роль(тип) объекта VariantInit(&varRole); VARIANT varChild; VariantInit(&varChild); IAccessible *pIAccChild = NULL; varChild.vt = VT_I4; varChild.lVal = CHILDID_SELF; LONG iChildCount; long returnCount; hr = pIAcc->get_accChildCount(&iChildCount); VARIANT* pArray = new VARIANT[iChildCount]; hr = AccessibleChildren(pIAcc, 0L, iChildCount, pArray, &returnCount); hr = pIAcc->get_accRole(varChild, &varRole); wprintf(L"\n Role = %d", varRole.lVal); wprintf(L"\n Childcount = %d", iChildCount); getch(); return 0; } |
|
Создано: 17 октября 2012 18:01 · Личное сообщение · #3 le-greem Скорее всего неправильный хендл окна указываете, у меня все работает. Code:
|
|
Создано: 18 октября 2012 09:59 · Личное сообщение · #4 Нет. Хэндл окна (точнее контрола из этого окна) верный. Проверял spy++ каждый раз при попытке запустить свой код. В это сложно поверить, но код не работает. Вместо свойств контрола выдает свойства окна и непонятно с чего вдруг. Пару раз видел на англоязычных форумах(к сожалению, искать долго, поэтому источника не приведу) вопросы по данному явлению но все они остались без ответа. Можно было бы просто смириться если бы не безукоризненная работа библиотеки. |
|
Создано: 18 октября 2012 12:06 · Личное сообщение · #5 le-greem Ваш код работает ровно настолько насколько вы его написали. Смотрите в атаче пример, немного дописал код. 06c3_18.10.2012_EXELAB.rU.tgz - WSpy.rar |
|
Создано: 08 февраля 2015 14:07 · Личное сообщение · #6 F_a_u_s_t, не посодействуешь еще раз? в том оригинальном коде ты сделал ехе файл с поиском класса окна - "мой компьютер", можно ли там сделать поиск по классу "Chrome_WidgetWin_1"? мы тогда портировали код портировали... да не выпортировали эксплорерный список читает, а вот недавно я решил потестировать на окне хрома, и что-то нифига - не читает зараза такая. вот не ясно - или у нас в коде косяк, что скорей всего... или может быть класс окна в хроме другой? твой код изначально правильный, вот на нем бы проверить. |
|
Создано: 08 февраля 2015 20:05 · Поправил: F_a_u_s_t · Личное сообщение · #7 SeregaZ пишет: можно ли там сделать поиск по классу "Chrome_WidgetWin_1"? Какие именно косяки у вас? Без кода хз, какие у вас проблемы. Code:
или так, скопировано с просторов интернета, но на вид рабочее: Code:
|
|
Создано: 09 февраля 2015 07:11 · Личное сообщение · #8 не не нужен без дочернего, только первый - Chrome_WidgetWin_1 - в нем находит хотя-бы этот селектор сертификатов, но не читает содержимое поле выбора. а если находить окно, потом дочернее - но даже этот селектор не показывает. я про тот ехе файл спрашивал в сообщении https://exelab.ru/f/action=vthread&forum=6&topic=20266&page=0#20 там поиск по моему компьютеру. нельзя ли сделать точно-такой-же, но с перламутро... эээ... с поиском окна Chrome_WidgetWin_1, вместо моего компьютера. а я бы его запустил и посмотрел читает ли он это хромное окно с сертификатами или не читает. если читает - значит ошибка у меня. если не читает - значит хром использует что-то хитрое. |
|
Создано: 13 февраля 2015 03:16 · Личное сообщение · #9 SeregaZ пишет: но не читает содержимое поле выбора. а если находить окно, потом дочернее - но даже этот селектор не показывает. Дык, код же не полностью, не все реализовано, смотрите в MSDN по использованным функциям, там есть примеры на сишке. А так, я бы на вашем месте перестал насиловать труп и писать на живом языке, ну или хотя бы vb net'e на кодеплексе есть код полного разбора окна, AccExplorer или AccChecker как то так называется. |
|
Создано: 13 февраля 2015 07:14 · Личное сообщение · #10 |
|
Создано: 13 февраля 2015 08:23 · Поправил: unknownproject · Личное сообщение · #11 DenCoder пишет: Хорошо... давно его насилую, ни одной неработающей программы не было! А я на паскале прогаю и тоже, как ни странно, ни одной неработающей и глючной проги не было.Удивительно просто! Криворукость программиста от ЯП не зависит, а си давно разложился в виде отрыжек аля жаба,жабаскрипт, экшнскрипт и прочий андроид.Единственное, что нормально кодилось на си во все времена - это игры для первой PlayStation и они кодились на чистом си, а не на отрыжках. ----- TEST YOUR MIGHT |
|
Создано: 13 февраля 2015 09:11 · Личное сообщение · #12 DenCoder пишет: Это в адрес основателя си? Это в адрес purebasic, именно на него переводит SeregaZ. Так то да, осилил си с делфи и еще чем то там. А задача да, тривиальная есть куча примеров, но все они или на c\c++\c# или delphi, purebasic'u места под солнцем не нашлось, даже под autoit есть библиотека, хз зачем насиловать полумертвый диалект basic'a. |
|
Создано: 13 февраля 2015 16:07 · Поправил: SeregaZ · Личное сообщение · #13 да так то понятно что труп... но что я его насилую виноват сей портал! )) когда еще ничего не знал, нужна была простенькая програмка для управления всякими чекбоксами да ниспадающими меню в другой программе - SOM (Sign of Misery) вполне справлялся, я там писал скрипты и он мне делал ехе файлы для управления той другой программой и все было замечательно. но в конце концов уперся там в одну проблему, которую SOM не мог решить технически. зато попалась статья про win api, которое подобное решали. но, насколько я тогда понял, win api это не нечто самостоятельное, то есть там как-бы не было своего компилятора чтоли... то есть нужен был язык программирования, на котором эти винапи можно было бы использовать. и тут значит попался список файлов для загрузки здесь на крэклабе и там для графы PureBasic была пометка о дружбе с win api. а уж Basic в слове PureBasic (школьные корветы и zx спектрум) - и сделало выбор окончательным. теперь же, годы спустя - основной код той программы уже перевалил за 7 тысяч строк, и я просто не представляю как это все дело переводить теперь на какой-либо другой, более распространенный язык. вот хотелось бы прикрутить теперь хром, точнее управление хромом. (кстати про хром - а сканнеров окон, поддерживающих DirectUIHWND не существует чтоль? погуглил выдает сотни форумов, где люди бродят в дебрях еще дебрее, чем я когда-то бродил думал давно уже есть какой-нить супер мупер сканнер, где можно было-бы уточнить с этим хромом классы окон) а еще хотелось бы разобраться с cURL. посему, еще не зная что мне искать, попробую на пальцах объяснить что надо найти, и надеюсь что кто-нибудь подскажет точнее куда идти и что делать: 1. нашел какой-то вроде как официальный сайт этого cURL'а, там эти библиотеки. как сказали нужны сразу три: libcurl.dll, libeay32.dll и ssleay32.dll - поскольку в моем проекте другие используемые библиотеки вшиты в тело программы - обязательно ли обойтись именно тремя этими библиотеками? хотелось бы одну... и чтоб тоже вшить в тело программы и читать уже оттуда. когда три непонятных файла лежат рядом с ехешником - не очень солидно. моя позиция: все свое ношу с собой 2. на том сайте, куда я целюсь, происходит авторизация путем выбора сертификата в селекторе сертификатов. читать сертификаты в хранилище виндовса я вроде-бы научился. теперь бы найти пример кода, где используется этот cURL и эта сертификатная авторизация - такое вообще возможно сделать в этом cURL'е? пока все что я находил это авторизация с помощью логина и пароля. что несколько не то. сами примеры подошли бы на делфи или С++. эти я хоть маленько представляю. но гугл мне дает только php варианты. там я что-то даже представить не могу коим образом происходит импорт этих длл. *(чуть позже нашел два каких-то примера, судя из названия связанных с сертификатами 3. скачать главную страницу и получить размер кода этой страницы. |
|
Создано: 18 февраля 2015 09:25 · Личное сообщение · #14 и все-таки мой код видимо правильный. из сообщений данного топика, в аттачах слил ехешник, который мог читать данные из точки и эта программа тоже не читает список с сертификатами: значит все-таки у хрома гранаты не той системы. или DirectUIHWND обновлялся и там появились новые элементы, которых раньше не было и поэтому они не могут быть прочитаны путем использования старого кода? |
|
Создано: 01 марта 2015 19:20 · Личное сообщение · #15 |
<< . 1 . 2 . |
eXeL@B —› Программирование —› подскажите порядок команд по разбору содержимого окна класса DirectUIHWND |