eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: SDK, Adler, rthax (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› подскажите порядок команд по разбору содержимого окна класса DirectUIHWND
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 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, так как внутри него есть пункты всевозможные.


Ранг: 516.5 (!)
Статус: Участник
Победитель турнира 2010

Создано: 26 августа 2012 22:29 New!
Цитата · Личное сообщение · #2

что делает топик на этом форумк, да еще в основной ветке??

| Сообщение посчитали полезным: plutos


Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 27 августа 2012 05:07 New!
Цитата · Личное сообщение · #3

полезное замечание. я его обязательно применю в своем проекте. большое спасибо. осталось только мелочь... в порядке команд разобраться...


Ранг: 157.2 (ветеран)
Статус: Участник

Создано: 27 августа 2012 06:27 · Поправил: ZaZa New!
Цитата · Личное сообщение · #4

SeregaZ
Ты скажи лучше, что тебе в той панели надо именно кликать?
Свойства системы? Установка, удаление программ? Панель управления?

До всего этого можно дотянуться и просто так, не используя такие хитрые приемы... Например через командную строку, используя "CONTROL.EXE" (читать --> тут <--)
И писать 4000 строк кода нафих надо, если все можно решить проще...

Если все таки очень хочется, тогда можно тут поискать: KODERS.COM (Поиск DirectUIHWND, Поиск get_accChildCount)

Или я чего то не понимаю...

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 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 явно что-то должно быть...


Ранг: 157.2 (ветеран)
Статус: Участник

Создано: 27 августа 2012 09:52 New!
Цитата · Личное сообщение · #6

Разбираться за тебя в хитросплетениях Microsoft никто не станет... Дали ссылки - читай, разбирайся сам...
Помощи по функциям и процедурам, указанным тобой предостаточно! Взять тот же самый MSDN: --> Link 1 <--, --> Link 2 <--
Сторонние ресурсы: --> Link <--

Ну или проще простого: дождаться того, кто так же как и ты задался таким же вопросом, но все же решил его, вопреки своей лени!

| Сообщение посчитали полезным: plutos


Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 27 августа 2012 10:13 New!
Цитата · Личное сообщение · #7

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

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

дожидатся кого-то смысла нет. тут срабатывает обычный эгоизм: вот я мегакрутой хакер разобрался, вы мне не помогали, а я сам все понял, пошли все нахер, не буду я ничего постить на форуме. вот все и ныкаются потом как слепые котята в поисках информации. даже гугл по запросу DirectUIHWND выдает на первой страничке две-три ссылки на форумы, где я сам спрашиваю про DirectUIHWND. и только одна более менее стоящая http://wmsdk.com/2009/07/09/directui-iaccessible/ но судя по ссылке написанная аж в 2009 году...


Ранг: 436.8 (мудрец)
Статус: Участник
_Вечный_Студент_

Создано: 27 августа 2012 10:54 · Поправил: plutos New!
Цитата · Личное сообщение · #8

однако английский, а уж тем более технический английский штука крайне не понятная...
Да, Серега, плохи твои дела...

мсдны давно изучены. там просто команды, и поверхностные описания команд, расчитанные на довольно продвинутых пользователей... или даже программистов. про последовательность команд в мдснах что-то не указано...
Т.е не указано, в какой последовательности нужно эти "команды" комбинировать? Но это уж кто как хочет, тот так и комбинирует.

на форуме своего языка программирования у буржуев спрашивал - не знают.
Они, как видно, вопроса твоего не поняли (см. выше) или просто обиделись, что ты их так называешь.

на русском форуме даже спрашивать не стал, там никого нет, так как язык не популярный
Т.е. ты там единственный посетитель?

пошли все нахер, не буду я ничего постить на форуме
Да нет, нет! Продолжай пожалуйста, "пость"! Я твои посты всегда читаю с удовольствием... Очень освежает!

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 27 августа 2012 11:19 New!
Цитата · Личное сообщение · #9

кто как хочет, тот так и комбинирует.
ну прям... есть определенные последовательности, где команды идут друг за другом, одна вытекает из другой. при изменении порядка код работать не будет. типа как сначала PFXImportCertStore а потом CertEnumCertificatesInStore. если сделать наоборот - откуда CertEnumCertificatesInStore знает что перебирать, если изначально PFXImportCertStore не загрузил данные?

вопроса твоего не поняли
буржуи все поняли сам мануалы писал на буржуйском для буржуев... по другой правда теме, но жалоб не было. это задача просто крайне специфичная.

там единственный посетитель
хорошо перефразирую - толковых посетителей там нет. предупреждая следующий пост-возражение, перефразирую еще раз - толковых посетителей по данной теме там нет.

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

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 4 сентября 2012 19:57 New!
Цитата · Личное сообщение · #10

неужели никто не сталкивался с подобной задачей для своих программ?

Ранг: 280.6 (наставник)
Статус: Участник
Destroyer of protectors

Создано: 4 сентября 2012 20:30 New!
Цитата · Личное сообщение · #11

SeregaZ пишет:
своего языка программирования

можно полюбопытствовать, как его имя?

SeregaZ пишет:
...или даже программистов.

забавно, ты как я понимаю программу пишешь, 4к строк накатал, так кто же ты если не программист?

| Сообщение посчитали полезным: plutos



Статус: Пришелец

Создано: 4 сентября 2012 21:03 New!
Цитата #12

SeregaZ
Не понимаю в чем сложность, элементарно же.
Гугли по:
Code:
  1. oleacc.dll
  2. -----------------------------
  3. AccessibleObjectFromPoint
  4. AccessibleChildren
  5. GetStateTextW
  6. GetRoleTextW
  7. -----------------------------

Готовый код есть, не дам из принципа.

| Сообщение посчитали полезным: plutos


Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 5 сентября 2012 09:14 New!
Цитата · Личное сообщение · #13

MasterSoft пишет:
можно полюбопытствовать, как его имя?

PureBasic

MasterSoft пишет:
забавно, ты как я понимаю программу пишешь, 4к строк накатал, так кто же ты если не программист?

эм... ну те строчки кода под силу и не программисту все-таки в моем понимании это такой человек, который, помимо светлой головы, имеет еще и толковое образование.


F_a_u_s_t пишет:
Гугли по:
AccessibleObjectFromPoint

так тут проверка доступности, так сказать, из точки - то есть координат. а мне то надо окно - AccessibleObjectFromWindow. с AccessibleObjectFromPoint есть пример, даже под мой язык - выводит в тело программы текст под курсором.


Ранг: 436.8 (мудрец)
Статус: Участник
_Вечный_Студент_

Создано: 5 сентября 2012 09:37 · Поправил: plutos New!
Цитата · Личное сообщение · #14

Честно говоря, тема данного топика имеет к reverse engineering и исследованию программ весьма и весьма условное отношение, как и сам язык PureBasic...
Пробуй, экспериментируй, учись, но этот форум тут явно ни причем.

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 5 сентября 2012 10:06 New!
Цитата · Личное сообщение · #15

запрос по взлому окошка DirectUIHWND в windows 7 и замене его на окошко класса SysListView32 был бы уместнее?


Статус: Пришелец

Создано: 5 сентября 2012 11:35 New!
Цитата #16

SeregaZ пишет:
виндовс хр. левая часть окна является DirectUIHWND. как можно прочитать его содержимое?

Один запрос в гугле и готовый код на делфи и си, в атаче пример, наведи перо на окно установка и удаление программ и нажми кнопку Получить данные.


{ Атач доступен только для участников форума } - Project1.rar

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 5 сентября 2012 12:38 New!
Цитата · Личное сообщение · #17

наведи перо
проблема в том, что в этом случае используется AccessibleObjectFromPoint. в моем случае не предполагается задействовать курсор или читать координаты каким-либо образом, то есть предполагается доступ к данным по хендлу окна - AccessibleObjectFromWindow. с AccessibleObjectFromPoint нет никаких проблем. проблема именно с AccessibleObjectFromWindow.


Статус: Пришелец

Создано: 5 сентября 2012 13:46 New!
Цитата #18

SeregaZ
Ты реально наркоман, вопрос тривиальный, а ты в место того что бы его решать сидишь на теме.
Code:
  1. function AccessibleObjectFromEvent(: HWND; dwID, dwChildID : DWORD; out Acc : IAccessible; var varChild : Variant) : HRESULT; stdcall;
  2.   stdcall; external 'oleacc.dll';
  3.  
  4. function AccessibleChildren(paccContainer : Pointer; iChildStart : LONGINT; cChildren : LONGINT; out rgvarChildren : OleVariant; out pcObtained : LONGINT) : HRESULT; stdcall;
  5.   stdcall; external 'oleacc.dll';
  6.  
  7. procedure TForm1.DisplayInfo(const aAccessible : IAccessible; const aOffset : string);
  8.  
  9.   procedure ProcessChild(const aChild : OleVariant);
  10.   var
  11.     ChildAccessible : IAccessible;
  12.     ChildDispatch : IDispatch;
  13.   begin
  14.     ChildDispatch := nil;
  15.     case VarType(aChild) of
  16.       varInteger : aAccessible.Get_accChild(aChild, ChildDispatch);
  17.       varDispatch : ChildDispatch := aChild;
  18.     end;
  19.     if (ChildDispatch <> nil) and (ChildDispatch.QueryInterface(IAccessible, ChildAccessible) = S_OK) then
  20.       DisplayInfo(ChildAccessible, aOffset + ' ')
  21.   end;
  22.  
  23. var
  24.   Child, CurrentChild : OleVariant;
  25.   ChildArray : array of OleVariant;
  26.   dwNum : DWord;
  27.   Enum : IEnumVARIANT;
  28.   i, iChildCount, iObtained : Integer;
  29.   wsText : WideString;
  30. begin
  31.   if aAccessible <> nil then begin
  32.       if aAccessible.get_AccName(CHILDID_SELF, wsText) = S_OK then
  33.         Memo1.Lines.Add(aOffset + 'Name: ' + wsText)
  34.       else
  35.         Memo1.Lines.Add(aOffset + 'Name: Empty');
  36.       if aAccessible.get_AccValue(CHILDID_SELF, wsText) = S_OK then
  37.         Memo1.Lines.Add(aOffset + ' Value: ' + wsText);
  38.       if aAccessible.get_AccDescription(CHILDID_SELF, wsText) = S_OK then
  39.         Memo1.Lines.Add(aOffset + ' Description: ' + wsText);
  40.  
  41.       if (aAccessible.Get_accChildCount(iChildCount) = S_OK) and (iChildCount > 0) then begin
  42.           Form1.Memo1.Lines.Add(aOffset + ' Children: ' + IntToStr(iChildCount));
  43.           SetLength(ChildArray, iChildCount);
  44.           if AccessibleChildren(Pointer(aAccessible), 0, iChildCount, ChildArray[0], iObtained) = S_OK then begin
  45.               for i := 0 to iObtained - 1 do
  46.                 ProcessChild(ChildArray[i])
  47.             end else if aAccessible.QueryInterface(IEnumVARIANT, Enum) = S_OK then begin
  48.               Enum := aAccessible as IEnumVARIANT;
  49.               for i := 0 to iChildCount - 1 do
  50.                 if Enum.Next(1, Child, dwNum) = S_OK then
  51.                   ProcessChild(Child);
  52.             end else begin
  53.               if aAccessible.accNavigate(NAVDIR_FIRSTCHILD, CHILDID_SELF, CurrentChild) = S_OK then begin
  54.                   repeat
  55.                     ProcessChild(CurrentChild)
  56.                   until aAccessible.accNavigate(NAVDIR_NEXT, CurrentChild, CurrentChild) <> S_OK;
  57.                 end
  58.             end
  59.         end
  60.     end
  61. end;
  62.  
  63. -------------------------------------------------------------------------------------
  64. var
  65.   Accessible : IAccessible;
  66.   hWindow : HWnd;
  67. begin
  68.   Memo1.Lines.Clear;
  69.   hWindow := FindWindowA('CabinetWClass', nil);
  70.   if AccessibleObjectFromWindow(hWindow, 0, IID_IAccessible, Accessible) = S_OK then
  71.   DisplayInfo(Accessible, '');
  72. -------------------------------------------------------------------------------------

Если и после этого не понятно, то бросай программирование.

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 5 сентября 2012 17:53 New!
Цитата · Личное сообщение · #19

о... а почему используется хэндл окошка CabinetWClass? разве не должен использоваться хэндл DirectUIHWND окошка? если использовать CabinetWClass, то количество "детишек" = 1. уже прогрес... однако все равно не понятно почему CabinetWClass - по сути родительское окно.


Статус: Пришелец

Создано: 5 сентября 2012 18:21 New!
Цитата #20

SeregaZ пишет:
а почему используется хэндл окошка CabinetWClass? разве не должен использоваться хэндл DirectUIHWND окошка?

Наверное потому что это родительский класс, а DirectUIHWND саб класс, по сути с помощью gdi рисует на CabinetWClass, в msdn это есть, читай.
SeregaZ пишет:
сли использовать CabinetWClass, то количество "детишек" = 1

Собранный семпл в атаче, скажи еще что он не работает.


{ Атач доступен только для участников форума } - WSpy.rar

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 5 сентября 2012 19:59 New!
Цитата · Личное сообщение · #21

ну тот момент что я оказывается искал не там где надо - уже большой прогресс. я то думал надо непосредственно сам DirectUIHWND разбирать. пойду у буржуев поинтересуюсь по некоторым моментам перевода в "мой" язык программирования...

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 14 сентября 2012 15:04 · Поправил: SeregaZ New!
Цитата · Личное сообщение · #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 New!
Цитата #23

SeregaZ
По ключевому слову AS читай тут там даже примеры есть.
С++ вариант:
Code:
  1. HRESULT WalkTreeWithAccessibleChildren(IAccessible* pAcc, int depth)
  2. {
  3.     HRESULT hr;
  4.     long childCount;
  5.     long returnCount;
  6.  
  7.     if (!pAcc)
  8.     {
  9.         return E_INVALIDARG;
  10.     }
  11.     hr = pAcc->get_accChildCount(&childCount);
  12.     if (FAILED(hr))
  13.     {
  14.         return hr;
  15.     };
  16.     if (childCount == 0)
  17.     {
  18.         return S_FALSE;
  19.     }
  20.     VARIANT* pArray = new VARIANT[childCount];
  21.     hr = AccessibleChildren(pAcc, 0L, childCount, pArray, &returnCount);
  22.     if (FAILED(hr))
  23.     {
  24.         return hr;
  25.     };
  26.  
  27.     // Iterate through children.
  28.     for (int x = 0; x < returnCount; x++)
  29.     {
  30.         VARIANT vtChild = pArray[x];
  31.         // If it's an accessible object, get the IAccessible, and recurse.
  32.         if (vtChild.vt == VT_DISPATCH)
  33.         {
  34.             IDispatch* pDisp = vtChild.pdispVal;
  35.             IAccessible* pChild = NULL;
  36.             hr = pDisp->QueryInterface(IID_IAccessible, (void**) &pChild);
  37.             if (hr == S_OK)
  38.             {
  39.                 for (int y = 0; y <depth; y++)
  40.                 {
  41.                     printf(" ");
  42.                 }
  43.                 PrintName(pChild, CHILDID_SELF);
  44.                 printf("(Object) ");
  45.                 PrintRole(pChild, CHILDID_SELF);
  46.                 WalkTreeWithAccessibleChildren(pChild, depth + 1);
  47.                 pChild->Release();
  48.             }
  49.             pDisp->Release();
  50.         }
  51.         // Else it's a child element so we have to call accNavigate on the parent,
  52.         //   and we don't recurse since child elements can't have children.
  53.         else
  54.         {
  55.             for (int y = 0; y <depth; y++)
  56.             {
  57.                 printf(" ");
  58.             }
  59.             PrintName(pAcc, vtChild.lVal);
  60.             printf("(Child element) ");
  61.             PrintRole(pAcc, vtChild.lVal);
  62.         }
  63.     }
  64.     delete[] pArray;
  65.     return S_OK;
  66. }

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 15 сентября 2012 09:36 · Поправил: SeregaZ New!
Цитата · Личное сообщение · #24

все... главный мозг сдался. если уж он не смог, то я с товарищем и подавно

в ХР вываливается на этом моменте
if Enum.Next(1, Child, dwNum) = S_OK then
(этот as, который чуть выше видимо все-таки не верно определен. в нашем варианте *enum = *aAccessible )
Code:
  1.         ElseIf *aAccessible\QueryInterface(@IID_IEnumVARIANT, @*enum) = #S_OK  
  2.             *enum = *aAccessible        
  3.             For i = 0 To count - 1                
  4.                 If *enum\Next(1, @Child, @dwnum) = #S_OK
  5.                     ProcessChild(*aAccessible, aOffset$, @Child)
  6.                 ElseIf *aAccessible\accNavigate(#NAVDIR_FIRSTCHILD, vt, @CurrentChild) = #S_OK 
  7.                     Repeat
  8.                         ProcessChild(*aAccessible, aOffset$, @CurrentChild)
  9.                     Until *aAccessible\accNavigate(#NAVDIR_NEXT, @CurrentChild, @CurrentChild) <> #S_OK
  10.                 EndIf   
  11.             Next 
  12.         EndIf

комментарий другого программиста, на этот раз русскоязычного по этому *enum = *aAccessible:
Собственно as преобразовывает один класс в другой в Делфях, правда свойства объектов при таком преобразовании не добавляются. Но Пурик не даст на лету преобразовать *aAccessible.IAccessible в *aAccessible.IEnumVARIANT, так что вы сделали по идее правильно, типа явного преобразования.



а в семерке работает, но не так как тот пример WSpy, некоторые значения не читает:

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 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:
  1.           if AccessibleChildren(Pointer(aAccessible), 0, iChildCount, ChildArray[0], iObtained) = S_OK then begin
  2.               for i := 0 to iObtained - 1 do
  3.                 ProcessChild(ChildArray[i])
  4.             end else if aAccessible.QueryInterface(IEnumVARIANT, Enum) = S_OK then begin
  5.               Enum := aAccessible as IEnumVARIANT;
  6.               for i := 0 to iChildCount - 1 do
  7.                 if Enum.Next(1, Child, dwNum) = S_OK then
  8.                   ProcessChild(Child);

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 16 сентября 2012 18:03 New!
Цитата · Личное сообщение · #26

И свершилось чудо! Друг спас друга!

F_a_u_s_t
оказывается твой код не совсем верно работает. первый пункт не читает. меню Файл на ХП. сразу начинает - с пункта Правка, и так далее.


Статус: Пришелец

Создано: 16 сентября 2012 21:16 New!
Цитата #27

SeregaZ
То не мой, я на плюсах пишу, скопипастил пример того, чего вы всем 8 классом осилить не могли.

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 16 сентября 2012 21:44 New!
Цитата · Личное сообщение · #28

F_a_u_s_t
да какой там восьмой... меньше наверное! хотя помница я даже на УПК на информатику пошел и изучали мы там книжку "IBM PC Для Пользователя, 7 издание, сокращенное, Фигурнов". чтоб туда пробится пришлось аж на 6 вопросов правильно ответить из 30. вопросы там были что-то про периодичность. а так бы от образования я б не отказался...

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

и кстати про as мы тоже так и не решили. выбросили эту часть кода... хотя видимо есть какие-то элементы, которые потом не прочитаются. но пока эти элементы в Моем Компьютере ХР и семерке не встретились.

Ранг: 3.0 (гость)
Статус: Участник

Создано: 16 октября 2012 13:27 New!
Цитата · Личное сообщение · #29

На с++ есть неплохая библиотека демонстрирующая пример работы с этим интерфейсом.

http://www.codeproject.com/Articles/33272/XMSAALib-a-non-MFC-class-to-retrieve-accessibility

Только вот из под консольного приложения заставить ее работать у меня лично не вышло. Никто не сталкивался с подобным?

{ Атач доступен только для участников форума } - XMSAALib_demo.zip


Статус: Пришелец

Создано: 16 октября 2012 17:55 New!
Цитата #30

le-greem
Покажите код консольки, а еще лучше проект, видимо ошибка у вас, должно работать и в консоли, смотрите пример в MSDN.
. 1 . 2 . >>
 eXeL@B —› Программирование —› подскажите порядок команд по разбору содержимого окна класса DirectUIHWND

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS