Сейчас на форуме: Rio, tyns777, zombi-vadim (+5 невидимых)

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

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

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




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

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

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

-----
127.0.0.1, sweet 127.0.0.1


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

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

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

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




Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

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

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

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

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

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

-----
One death is a tragedy, one million is a statistic.




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

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




Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

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

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

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

-----
One death is a tragedy, one million is a statistic.


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

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

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

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

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

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




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

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

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

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

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

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

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

-----
Give me a HANDLE and I will move the Earth.




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

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

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

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

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

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



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

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

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



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

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

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

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

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

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

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

Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 04 сентября 2012 21:03
· Личное сообщение · #12

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

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

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

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

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

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

PureBasic

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

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


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

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




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

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

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

-----
Give me a HANDLE and I will move the Earth.




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

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

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



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 05 сентября 2012 11:35
· Личное сообщение · #16

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

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


3aa0_05.09.2012_EXELAB.rU.tgz - Project1.rar



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

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

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



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 05 сентября 2012 13:46
· Личное сообщение · #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 (посетитель)
Активность: 0.020
Статус: Участник

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

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



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 05 сентября 2012 18:21
· Личное сообщение · #20

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

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

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


3f02_05.09.2012_EXELAB.rU.tgz - WSpy.rar



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

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

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



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

Создано: 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";

в развернутом бы виде... что и куда записывается.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 14 сентября 2012 17:06
· Личное сообщение · #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 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 сентября 2012 09:36 · Поправил: SeregaZ
· Личное сообщение · #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 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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:
  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 (посетитель)
Активность: 0.020
Статус: Участник

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

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

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



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 16 сентября 2012 21:16
· Личное сообщение · #27

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



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

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

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

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

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



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

Создано: 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



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 16 октября 2012 17:55
· Личное сообщение · #30

le-greem
Покажите код консольки, а еще лучше проект, видимо ошибка у вас, должно работать и в консоли, смотрите пример в MSDN.


. 1 . 2 . >>
 eXeL@B —› Программирование —› подскажите порядок команд по разбору содержимого окна класса DirectUIHWND
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати