| Сейчас на форуме: asfa, _MBK_, Adler, bartolomeo (+9 невидимых) |
| eXeL@B —› Вопросы новичков —› SysListView32 - вытащить данные |
| Посл.ответ | Сообщение |
|
|
Создано: 23 июня 2011 21:06 · Личное сообщение · #1 |
|
|
Создано: 23 июня 2011 21:24 · Личное сообщение · #2 |
|
|
Создано: 23 июня 2011 21:36 · Личное сообщение · #3 |
|
|
Создано: 23 июня 2011 22:03 · Личное сообщение · #4 |
|
|
Создано: 23 июня 2011 22:39 · Поправил: codevx · Личное сообщение · #5 Расплывчато объяснил, пардон задача: собирать статистику об игроках/уровне на котором крутится сервер. как: читать содержимое SysListView32 (Players и Levels) Через предложенные проги, информация собирается не полностью. Нет информации об индексе иконки, что важно. Писал собственную програмулину, через винапи собирающую инфу с листов. Текст из столбцов собирается прекрасно. Индекс иконки - всегда равен нулю, что странно, т.к. иконки разные. ![]() |
|
|
Создано: 24 июня 2011 00:02 · Личное сообщение · #6 |
|
|
Создано: 24 июня 2011 13:01 · Личное сообщение · #7 |
|
|
Создано: 21 сентября 2012 11:47 · Личное сообщение · #8 и у меня вопрос! есть эксплорерное окошко с выбором сертификатов. для того чтобы выбрать какой-то пункт в этом меню, сначала нужно узнать номер его расположения. для этого читаем содержимое и сравниваем с тем, который надо выбрать. допустим нашелся под номером 2, запускаем код селекта, после запускаем нажатию ентера так сказать. и возникла проблема - происходит двойной селект в том окне. я так полагаю это из-за торможения появления окна, то есть сначала окно появилось, тут моя программа начинает читать содержимое, находит под номером 2 нужный селект, производит селект 2 пункта, но тут окно доинициализировалось и эксплорер производит начальный селект на самый первый итем. в результате выглядит так: хотя может причину я понял не верно. если поставить паузу между чтением и селектом - то код вовсе перестает работать. также нужна пауза между селектом и ентером, однако в этом случае окно не успевает сделать мой селект, как уже пошел ентыр и получается произошел выбор 1 пункта. если ставить опять паузу - месный Delay или win api Sleep_() - то код или перестает работать или опять наблюдается двойной селект.в чем секрет работы с этим типом окна? почему пауза срабатывает не там где надо? есть ли какие-то win api, которое звучит так: "а не с инициировалось ли окно?", то есть "готово ли окно принять мою команду?", и что-то типа такого "а выполнена ли моя команда?". сам запуск команды типа SendMessage еще можно отследить по возвращаемому коду - но это как бы сообщает о том, что команда выслана, а вот как можно определить "а исполнена ли команда?". State.LVITEM State\mask = #LVIF_STATE State\state = #LVIS_SELECTED | #LVIS_FOCUSED State\stateMask = #LVIS_SELECTED | #LVIS_FOCUSED SendMessage_(windowhandle, #LVM_SETITEMSTATE, toselectnumberitem, @State) ![]() |
|
|
Создано: 21 сентября 2012 14:52 · Поправил: SeregaZ · Личное сообщение · #9 |
|
|
Создано: 21 сентября 2012 22:01 · Личное сообщение · #10 |
|
|
Создано: 21 сентября 2012 22:56 · Поправил: SeregaZ · Личное сообщение · #11 так. попытаюсь объяснить что я понял из буржуйского описания: 1. запускаю эксплорер 2. запускаю эту команду она по сути тормозит выполнение моей программы и ждет пока эксплорер вернет сообщение что "я готов"? 3. посылаю команду на чтение той таблицы 4. опять запускаю эту команду на ожидание. верно? *** так. что-то нифига... пишет неверный дескриптор. и хендл процесса сувал, и хендл окна... не хочет ![]() *** ага. ему нужно сувать, тем что OpenProcess командой возвращается? в этом случае ошибку не выдал. пойду попробую поприменять там сям в коде. чему равна INFINITE или как правильно указать? -1? *** походу ничего она не ждет... эксплорер запустил, а она мне уже возвращает 0, что дескать эксплорер готов, а страничка то еще не догрузилась. тоже самое по отправке моего сообщения на селект. ![]() |
|
|
Создано: 21 сентября 2012 23:26 · Поправил: plutos · Личное сообщение · #12 чему равна INFINITE или как правильно указать? -1? INFINITE is a predefined constant: #DEFINE INFINITE 0xFFFFFFFF Вместо того, чтобы каждые 5 минут делиться впечатлениями и что-то там куда-то наобум "сувать" попробуй все же разобраться сам! Посмотри вот тут, может поможет: http://www.foxite.com/search.aspx?m=tags&q=RunAndWait http://comsci.liu.edu/~murali/win32/WaitFunctions.htm И еще, нет такого понятия API "комманда", есть API FUNCTION, которую мы вызываем. ----- Give me a HANDLE and I will move the Earth. ![]() |
|
|
Создано: 21 сентября 2012 23:52 · Поправил: SeregaZ · Личное сообщение · #13 по первой ссылке мне предложили сходить проверится... по второй малость не подходит: Code:
по замыслу должен был происходить селект четырех элементов в форме по очереди. однако ничего... зато если убрать WaitForSingleObject_(proc, 1000), сразу все 4 итема выбраны. хотя форма поддерживает только одиночный селект так сказать... *** правильный ответ оказался у алексея: там правда в коде одна или две мелкие ошибки... но в целом картину отображает верно
![]() |
|
|
Создано: 22 сентября 2012 00:48 · Поправил: plutos · Личное сообщение · #14 |
| eXeL@B —› Вопросы новичков —› SysListView32 - вытащить данные |







хотя может причину я понял не верно. если поставить паузу между чтением и селектом - то код вовсе перестает работать. также нужна пауза между селектом и ентером, однако в этом случае окно не успевает сделать мой селект, как уже пошел ентыр и получается произошел выбор 1 пункта. если ставить опять паузу - месный Delay или win api Sleep_() - то код или перестает работать или опять наблюдается двойной селект.


Для печати