Создано: 26 августа 2012 17:38 New! Цитата · Личное сообщение · #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, так как внутри него есть пункты всевозможные.
Создано: 27 августа 2012 06:27 · Поправил: ZaZa New! Цитата · Личное сообщение · #4
SeregaZ Ты скажи лучше, что тебе в той панели надо именно кликать? Свойства системы? Установка, удаление программ? Панель управления?
До всего этого можно дотянуться и просто так, не используя такие хитрые приемы... Например через командную строку, используя "CONTROL.EXE" (читать --> тут <--) И писать 4000 строк кода нафих надо, если все можно решить проще...
Создано: 27 августа 2012 09:35 · Поправил: SeregaZ New! Цитата · Личное сообщение · #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 New! Цитата · Личное сообщение · #6
Разбираться за тебя в хитросплетениях Microsoft никто не станет... Дали ссылки - читай, разбирайся сам... Помощи по функциям и процедурам, указанным тобой предостаточно! Взять тот же самый MSDN: --> Link 1 <--, --> Link 2 <-- Сторонние ресурсы: --> Link <--
Ну или проще простого: дождаться того, кто так же как и ты задался таким же вопросом, но все же решил его, вопреки своей лени!
Создано: 27 августа 2012 10:13 New! Цитата · Личное сообщение · #7
видимо я этим занимался, перед тем как сюда запостить. однако английский, а уж тем более технический английский штука крайне не понятная...
мсдны давно изучены. там просто команды, и поверхностные описания команд, расчитанные на довольно продвинутых пользователей... или даже программистов. про последовательность команд в мдснах что-то не указано... особенно про последовательность в моей конкретной задаче. на форуме своего языка программирования у буржуев спрашивал - не знают. на русском форуме даже спрашивать не стал, там никого нет, так как язык не популярный.
дожидатся кого-то смысла нет. тут срабатывает обычный эгоизм: вот я мегакрутой хакер разобрался, вы мне не помогали, а я сам все понял, пошли все нахер, не буду я ничего постить на форуме. вот все и ныкаются потом как слепые котята в поисках информации. даже гугл по запросу DirectUIHWND выдает на первой страничке две-три ссылки на форумы, где я сам спрашиваю про DirectUIHWND. и только одна более менее стоящая http://wmsdk.com/2009/07/09/directui-iaccessible/ но судя по ссылке написанная аж в 2009 году...
Создано: 27 августа 2012 10:54 · Поправил: plutos New! Цитата · Личное сообщение · #8
однако английский, а уж тем более технический английский штука крайне не понятная... Да, Серега, плохи твои дела...
мсдны давно изучены. там просто команды, и поверхностные описания команд, расчитанные на довольно продвинутых пользователей... или даже программистов. про последовательность команд в мдснах что-то не указано... Т.е не указано, в какой последовательности нужно эти "команды" комбинировать? Но это уж кто как хочет, тот так и комбинирует.
на форуме своего языка программирования у буржуев спрашивал - не знают. Они, как видно, вопроса твоего не поняли (см. выше) или просто обиделись, что ты их так называешь.
на русском форуме даже спрашивать не стал, там никого нет, так как язык не популярный Т.е. ты там единственный посетитель?
пошли все нахер, не буду я ничего постить на форуме Да нет, нет! Продолжай пожалуйста, "пость"! Я твои посты всегда читаю с удовольствием... Очень освежает!
Создано: 27 августа 2012 11:19 New! Цитата · Личное сообщение · #9
кто как хочет, тот так и комбинирует. ну прям... есть определенные последовательности, где команды идут друг за другом, одна вытекает из другой. при изменении порядка код работать не будет. типа как сначала PFXImportCertStore а потом CertEnumCertificatesInStore. если сделать наоборот - откуда CertEnumCertificatesInStore знает что перебирать, если изначально PFXImportCertStore не загрузил данные?
вопроса твоего не поняли буржуи все поняли сам мануалы писал на буржуйском для буржуев... по другой правда теме, но жалоб не было. это задача просто крайне специфичная.
там единственный посетитель хорошо перефразирую - толковых посетителей там нет. предупреждая следующий пост-возражение, перефразирую еще раз - толковых посетителей по данной теме там нет.
Продолжай пожалуйста вырываешь из контекста. я писал об эгоизме, а не о себе лично.
Создано: 5 сентября 2012 09:14 New! Цитата · Личное сообщение · #13
MasterSoft пишет: можно полюбопытствовать, как его имя? PureBasic
MasterSoft пишет: забавно, ты как я понимаю программу пишешь, 4к строк накатал, так кто же ты если не программист? эм... ну те строчки кода под силу и не программисту все-таки в моем понимании это такой человек, который, помимо светлой головы, имеет еще и толковое образование.
F_a_u_s_t пишет: Гугли по: AccessibleObjectFromPoint так тут проверка доступности, так сказать, из точки - то есть координат. а мне то надо окно - AccessibleObjectFromWindow. с AccessibleObjectFromPoint есть пример, даже под мой язык - выводит в тело программы текст под курсором.
Создано: 5 сентября 2012 09:37 · Поправил: plutos New! Цитата · Личное сообщение · #14
Честно говоря, тема данного топика имеет к reverse engineering и исследованию программ весьма и весьма условное отношение, как и сам язык PureBasic... Пробуй, экспериментируй, учись, но этот форум тут явно ни причем.
SeregaZ пишет: виндовс хр. левая часть окна является DirectUIHWND. как можно прочитать его содержимое? Один запрос в гугле и готовый код на делфи и си, в атаче пример, наведи перо на окно установка и удаление программ и нажми кнопку Получить данные.
{ Атач доступен только для участников форума } - Project1.rar
Создано: 5 сентября 2012 12:38 New! Цитата · Личное сообщение · #17
наведи перо проблема в том, что в этом случае используется AccessibleObjectFromPoint. в моем случае не предполагается задействовать курсор или читать координаты каким-либо образом, то есть предполагается доступ к данным по хендлу окна - AccessibleObjectFromWindow. с AccessibleObjectFromPoint нет никаких проблем. проблема именно с AccessibleObjectFromWindow.
Создано: 5 сентября 2012 17:53 New! Цитата · Личное сообщение · #19
о... а почему используется хэндл окошка CabinetWClass? разве не должен использоваться хэндл DirectUIHWND окошка? если использовать CabinetWClass, то количество "детишек" = 1. уже прогрес... однако все равно не понятно почему CabinetWClass - по сути родительское окно.
SeregaZ пишет: а почему используется хэндл окошка CabinetWClass? разве не должен использоваться хэндл DirectUIHWND окошка? Наверное потому что это родительский класс, а DirectUIHWND саб класс, по сути с помощью gdi рисует на CabinetWClass, в msdn это есть, читай. SeregaZ пишет: сли использовать CabinetWClass, то количество "детишек" = 1 Собранный семпл в атаче, скажи еще что он не работает.
{ Атач доступен только для участников форума } - WSpy.rar
Создано: 5 сентября 2012 19:59 New! Цитата · Личное сообщение · #21
ну тот момент что я оказывается искал не там где надо - уже большой прогресс. я то думал надо непосредственно сам DirectUIHWND разбирать. пойду у буржуев поинтересуюсь по некоторым моментам перевода в "мой" язык программирования...
Создано: 14 сентября 2012 15:04 · Поправил: SeregaZ New! Цитата · Личное сообщение · #22
F_a_u_s_t возможно ли заменить в коде Enum := aAccessible as IEnumVARIANT; этот мало понятный "as" на что-то более развернутое, что дельфи делает "за кадром"? малость застряли на этом моменте...
или с++ вариант: (Delphi) (Sender as TButton) := 'Button0';
Создано: 15 сентября 2012 09:36 · Поправил: SeregaZ New! Цитата · Личное сообщение · #24
все... главный мозг сдался. если уж он не смог, то я с товарищем и подавно
в ХР вываливается на этом моменте if Enum.Next(1, Child, dwNum) = S_OK then (этот as, который чуть выше видимо все-таки не верно определен. в нашем варианте *enum = *aAccessible )
Until *aAccessible\accNavigate(#NAVDIR_NEXT, @CurrentChild, @CurrentChild)<> #S_OK
EndIf
Next
EndIf
комментарий другого программиста, на этот раз русскоязычного по этому *enum = *aAccessible: Собственно as преобразовывает один класс в другой в Делфях, правда свойства объектов при таком преобразовании не добавляются. Но Пурик не даст на лету преобразовать *aAccessible.IAccessible в *aAccessible.IEnumVARIANT, так что вы сделали по идее правильно, типа явного преобразования.
а в семерке работает, но не так как тот пример WSpy, некоторые значения не читает:
Создано: 15 сентября 2012 19:30 New! Цитата · Личное сообщение · #25
так. причина не вываливания в семерке выяснилась. та часть кода, которая сбоит в хп, просто не используется в семерке. если же поменять порядок проверок местами, то тогда вываливается и в семерке тоже. имею ввиду сначала поставить if aAccessible.QueryInterface(IEnumVARIANT, Enum) = S_OK then begin, а потом if AccessibleChildren(Pointer(aAccessible), 0, iChildCount, ChildArray[0], iObtained) = S_OK then begin
Code:
if AccessibleChildren(Pointer(aAccessible),0, iChildCount, ChildArray[0], iObtained)= S_OK then begin
for i :=0 to iObtained -1 do
ProcessChild(ChildArray[i])
endelseif aAccessible.QueryInterface(IEnumVARIANT, Enum)= S_OK then begin
Создано: 16 сентября 2012 21:44 New! Цитата · Личное сообщение · #28
F_a_u_s_t да какой там восьмой... меньше наверное! хотя помница я даже на УПК на информатику пошел и изучали мы там книжку "IBM PC Для Пользователя, 7 издание, сокращенное, Фигурнов". чтоб туда пробится пришлось аж на 6 вопросов правильно ответить из 30. вопросы там были что-то про периодичность. а так бы от образования я б не отказался...
так, а про выбор то какого-то пункта я забыл если не разберусь сам, а еще лучше не не подскажет тот не русский товарищ, то еще спрошу про accSelect.
и кстати про as мы тоже так и не решили. выбросили эту часть кода... хотя видимо есть какие-то элементы, которые потом не прочитаются. но пока эти элементы в Моем Компьютере ХР и семерке не встретились.