Сейчас на форуме: 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, так как внутри него есть пункты всевозможные. |
|
Создано: 26 августа 2012 22:29 · Личное сообщение · #2 что делает топик на этом форумк, да еще в основной ветке?? ----- 127.0.0.1, sweet 127.0.0.1 | Сообщение посчитали полезным: plutos |
|
Создано: 27 августа 2012 05:07 · Личное сообщение · #3 |
|
Создано: 27 августа 2012 06:27 · Поправил: ZaZa · Личное сообщение · #4 SeregaZ Ты скажи лучше, что тебе в той панели надо именно кликать? Свойства системы? Установка, удаление программ? Панель управления? До всего этого можно дотянуться и просто так, не используя такие хитрые приемы... Например через командную строку, используя "CONTROL.EXE" (читать И писать 4000 строк кода нафих надо, если все можно решить проще... Если все таки очень хочется, тогда можно тут поискать: KODERS.COM ( Или я чего то не понимаю... ----- One death is a tragedy, one million is a statistic. |
|
Создано: 27 августа 2012 09:35 · Поправил: SeregaZ · Личное сообщение · #5 мое окошко в 7 и это окно выбора сертификата при входе на сайт https. а на компьютере стоит XP. на XP тот же класс окна используется в окошке Мой Компьютер, левой части. поскольку и на 7 при попытке посчитать детишек выдает 0 и на хр тоже 0, то видимо принцип достучания до данных внутри окна одинаков. вот надо просто выяснить порядок команд. например регистрация сертификата в браузере, я тоже тут на форуме спрашивал - там порядок оказался следующий: 1. сначала читаем сам файл сертификата PFXImportCertStore 2. потом я выяснил что в каждом файле *.p12 оказывается может быть несколько сертификатов. чтобы их проиндексировать понадобится CertEnumCertificatesInStore. 2.1 для чтения названий сертификатов можно использовать CertGetNameString. 3. после этого следует открыть ту ветку-хранилище, куда мы будем записывать наш сертификат - CertOpenStore 4. после открытия добавляем содержимое сертификата CertAddCertificateContextToStore 5. после этого следует закрыть хранилище CertCloseStore 6. если в файле-контейнере *.p12 было больше 1 сертификата - повторить с пункта 2.1 4000 строчек это весь проект. там много функций. осталась одна - эта - управление окошком DirectUIHWND в виндовсе 7. ссылки на материалы это конечно хорошо... однако хотелось бы видеть четкий план, как мой по регистрации сертификата выше, с пояснениями. между AccessibleObjectFromWindow и get_accChildCount явно что-то должно быть... |
|
Создано: 27 августа 2012 09:52 · Личное сообщение · #6 Разбираться за тебя в хитросплетениях Microsoft никто не станет... Дали ссылки - читай, разбирайся сам... Помощи по функциям и процедурам, указанным тобой предостаточно! Взять тот же самый MSDN: Сторонние ресурсы: Ну или проще простого: дождаться того, кто так же как и ты задался таким же вопросом, но все же решил его, вопреки своей лени! ----- One death is a tragedy, one million is a statistic. | Сообщение посчитали полезным: plutos |
|
Создано: 27 августа 2012 10:13 · Личное сообщение · #7 видимо я этим занимался, перед тем как сюда запостить. однако английский, а уж тем более технический английский штука крайне не понятная... мсдны давно изучены. там просто команды, и поверхностные описания команд, расчитанные на довольно продвинутых пользователей... или даже программистов. про последовательность команд в мдснах что-то не указано... особенно про последовательность в моей конкретной задаче. на форуме своего языка программирования у буржуев спрашивал - не знают. на русском форуме даже спрашивать не стал, там никого нет, так как язык не популярный. дожидатся кого-то смысла нет. тут срабатывает обычный эгоизм: вот я мегакрутой хакер разобрался, вы мне не помогали, а я сам все понял, пошли все нахер, не буду я ничего постить на форуме. вот все и ныкаются потом как слепые котята в поисках информации. даже гугл по запросу DirectUIHWND выдает на первой страничке две-три ссылки на форумы, где я сам спрашиваю про DirectUIHWND. и только одна более менее стоящая http://wmsdk.com/2009/07/09/directui-iaccessible/ но судя по ссылке написанная аж в 2009 году... |
|
Создано: 27 августа 2012 10:54 · Поправил: plutos · Личное сообщение · #8 однако английский, а уж тем более технический английский штука крайне не понятная... Да, Серега, плохи твои дела... мсдны давно изучены. там просто команды, и поверхностные описания команд, расчитанные на довольно продвинутых пользователей... или даже программистов. про последовательность команд в мдснах что-то не указано... Т.е не указано, в какой последовательности нужно эти "команды" комбинировать? Но это уж кто как хочет, тот так и комбинирует. на форуме своего языка программирования у буржуев спрашивал - не знают. Они, как видно, вопроса твоего не поняли (см. выше) или просто обиделись, что ты их так называешь. на русском форуме даже спрашивать не стал, там никого нет, так как язык не популярный Т.е. ты там единственный посетитель? пошли все нахер, не буду я ничего постить на форуме Да нет, нет! Продолжай пожалуйста, "пость"! Я твои посты всегда читаю с удовольствием... Очень освежает! ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 27 августа 2012 11:19 · Личное сообщение · #9 кто как хочет, тот так и комбинирует. ну прям... есть определенные последовательности, где команды идут друг за другом, одна вытекает из другой. при изменении порядка код работать не будет. типа как сначала PFXImportCertStore а потом CertEnumCertificatesInStore. если сделать наоборот - откуда CertEnumCertificatesInStore знает что перебирать, если изначально PFXImportCertStore не загрузил данные? вопроса твоего не поняли буржуи все поняли сам мануалы писал на буржуйском для буржуев... по другой правда теме, но жалоб не было. это задача просто крайне специфичная. там единственный посетитель хорошо перефразирую - толковых посетителей там нет. предупреждая следующий пост-возражение, перефразирую еще раз - толковых посетителей по данной теме там нет. Продолжай пожалуйста вырываешь из контекста. я писал об эгоизме, а не о себе лично. |
|
Создано: 04 сентября 2012 19:57 · Личное сообщение · #10 |
Ранг: 281.8 (наставник), 272thx Активность: 0.25↘0.01 Статус: Участник Destroyer of protectors |
Создано: 04 сентября 2012 20:30 · Личное сообщение · #11 SeregaZ пишет: своего языка программирования можно полюбопытствовать, как его имя? SeregaZ пишет: ...или даже программистов. забавно, ты как я понимаю программу пишешь, 4к строк накатал, так кто же ты если не программист? | Сообщение посчитали полезным: plutos |
|
Создано: 04 сентября 2012 21:03 · Личное сообщение · #12 SeregaZ Не понимаю в чем сложность, элементарно же. Гугли по: Code:
Готовый код есть, не дам из принципа. | Сообщение посчитали полезным: plutos |
|
Создано: 05 сентября 2012 09:14 · Личное сообщение · #13 MasterSoft пишет: можно полюбопытствовать, как его имя? PureBasic MasterSoft пишет: забавно, ты как я понимаю программу пишешь, 4к строк накатал, так кто же ты если не программист? эм... ну те строчки кода под силу и не программисту все-таки в моем понимании это такой человек, который, помимо светлой головы, имеет еще и толковое образование. F_a_u_s_t пишет: Гугли по: AccessibleObjectFromPoint так тут проверка доступности, так сказать, из точки - то есть координат. а мне то надо окно - AccessibleObjectFromWindow. с AccessibleObjectFromPoint есть пример, даже под мой язык - выводит в тело программы текст под курсором. |
|
Создано: 05 сентября 2012 09:37 · Поправил: plutos · Личное сообщение · #14 |
|
Создано: 05 сентября 2012 10:06 · Личное сообщение · #15 |
|
Создано: 05 сентября 2012 11:35 · Личное сообщение · #16 SeregaZ пишет: виндовс хр. левая часть окна является DirectUIHWND. как можно прочитать его содержимое? Один запрос в гугле и готовый код на делфи и си, в атаче пример, наведи перо на окно установка и удаление программ и нажми кнопку Получить данные. 3aa0_05.09.2012_EXELAB.rU.tgz - Project1.rar |
|
Создано: 05 сентября 2012 12:38 · Личное сообщение · #17 наведи перо проблема в том, что в этом случае используется AccessibleObjectFromPoint. в моем случае не предполагается задействовать курсор или читать координаты каким-либо образом, то есть предполагается доступ к данным по хендлу окна - AccessibleObjectFromWindow. с AccessibleObjectFromPoint нет никаких проблем. проблема именно с AccessibleObjectFromWindow. |
|
Создано: 05 сентября 2012 13:46 · Личное сообщение · #18 SeregaZ Ты реально наркоман, вопрос тривиальный, а ты в место того что бы его решать сидишь на теме. Code:
Если и после этого не понятно, то бросай программирование. |
|
Создано: 05 сентября 2012 17:53 · Личное сообщение · #19 |
|
Создано: 05 сентября 2012 18:21 · Личное сообщение · #20 SeregaZ пишет: а почему используется хэндл окошка CabinetWClass? разве не должен использоваться хэндл DirectUIHWND окошка? Наверное потому что это родительский класс, а DirectUIHWND саб класс, по сути с помощью gdi рисует на CabinetWClass, в msdn это есть, читай. SeregaZ пишет: сли использовать CabinetWClass, то количество "детишек" = 1 Собранный семпл в атаче, скажи еще что он не работает. 3f02_05.09.2012_EXELAB.rU.tgz - WSpy.rar |
|
Создано: 05 сентября 2012 19:59 · Личное сообщение · #21 |
|
Создано: 14 сентября 2012 15:04 · Поправил: SeregaZ · Личное сообщение · #22 F_a_u_s_t возможно ли заменить в коде Enum := aAccessible as IEnumVARIANT; этот мало понятный "as" на что-то более развернутое, что дельфи делает "за кадром"? малость застряли на этом моменте... или с++ вариант: (Delphi) (Sender as TButton) := 'Button0'; (C++ Builder) ((TButton*)(Sender))->Caption = "Button0"; в развернутом бы виде... что и куда записывается. |
|
Создано: 14 сентября 2012 17:06 · Личное сообщение · #23 SeregaZ По ключевому слову AS читай С++ вариант: Code:
|
|
Создано: 15 сентября 2012 09:36 · Поправил: SeregaZ · Личное сообщение · #24 все... главный мозг сдался. если уж он не смог, то я с товарищем и подавно в ХР вываливается на этом моменте if Enum.Next(1, Child, dwNum) = S_OK then (этот as, который чуть выше видимо все-таки не верно определен. в нашем варианте *enum = *aAccessible ) Code:
комментарий другого программиста, на этот раз русскоязычного по этому *enum = *aAccessible: Собственно as преобразовывает один класс в другой в Делфях, правда свойства объектов при таком преобразовании не добавляются. Но Пурик не даст на лету преобразовать *aAccessible.IAccessible в *aAccessible.IEnumVARIANT, так что вы сделали по идее правильно, типа явного преобразования. а в семерке работает, но не так как тот пример WSpy, некоторые значения не читает: |
|
Создано: 15 сентября 2012 19:30 · Личное сообщение · #25 так. причина не вываливания в семерке выяснилась. та часть кода, которая сбоит в хп, просто не используется в семерке. если же поменять порядок проверок местами, то тогда вываливается и в семерке тоже. имею ввиду сначала поставить if aAccessible.QueryInterface(IEnumVARIANT, Enum) = S_OK then begin, а потом if AccessibleChildren(Pointer(aAccessible), 0, iChildCount, ChildArray[0], iObtained) = S_OK then begin Code:
|
|
Создано: 16 сентября 2012 18:03 · Личное сообщение · #26 |
|
Создано: 16 сентября 2012 21:16 · Личное сообщение · #27 |
|
Создано: 16 сентября 2012 21:44 · Личное сообщение · #28 F_a_u_s_t да какой там восьмой... меньше наверное! хотя помница я даже на УПК на информатику пошел и изучали мы там книжку "IBM PC Для Пользователя, 7 издание, сокращенное, Фигурнов". чтоб туда пробится пришлось аж на 6 вопросов правильно ответить из 30. вопросы там были что-то про периодичность. а так бы от образования я б не отказался... так, а про выбор то какого-то пункта я забыл если не разберусь сам, а еще лучше не не подскажет тот не русский товарищ, то еще спрошу про accSelect. и кстати про as мы тоже так и не решили. выбросили эту часть кода... хотя видимо есть какие-то элементы, которые потом не прочитаются. но пока эти элементы в Моем Компьютере ХР и семерке не встретились. |
|
Создано: 16 октября 2012 13:27 · Личное сообщение · #29 На с++ есть неплохая библиотека демонстрирующая пример работы с этим интерфейсом. http://www.codeproject.com/Articles/33272/XMSAALib-a-non-MFC-class-to-retrieve-accessibility Только вот из под консольного приложения заставить ее работать у меня лично не вышло. Никто не сталкивался с подобным? e1f1_16.10.2012_EXELAB.rU.tgz - XMSAALib_demo.zip |
|
Создано: 16 октября 2012 17:55 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Программирование —› подскажите порядок команд по разбору содержимого окна класса DirectUIHWND |