Сейчас на форуме: asfa, _MBK_, Adler, bartolomeo (+9 невидимых)

 eXeL@B —› Вопросы новичков —› SysListView32 - вытащить данные
Посл.ответ Сообщение

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

Создано: 23 июня 2011 21:06
· Личное сообщение · #1

Нужно вытащить данные из SysListView32 (Levels) вот этой проги (выделенный сервер мода для игры AVP2)

--> Link <--

Через винапи возвращается текст, но индекс картинки всегда равен нулю, поэтому полученные данные неполные.

З.Ы. На всякий случай прилагаю исходники оригинального выделенного сервера

--> Link <--




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 23 июня 2011 21:24
· Личное сообщение · #2

Что вы собственно хотите?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 23 июня 2011 21:36
· Личное сообщение · #3

Isaev пишет: Что вы собственно хотите?
Приказ был четким и однозначным - codevx пишет: вытащить данные из SysListView32
Линки в студии.
Приступайте.




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 23 июня 2011 22:03
· Личное сообщение · #4

codevx пишет:
вытащить данные из SysListView32


Попробуйте эти:
http://www.multiupload.com/SPEX9HP341



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

Создано: 23 июня 2011 22:39 · Поправил: codevx
· Личное сообщение · #5

Расплывчато объяснил, пардон

задача: собирать статистику об игроках/уровне на котором крутится сервер.
как: читать содержимое SysListView32 (Players и Levels)

Через предложенные проги, информация собирается не полностью. Нет информации об индексе иконки, что важно.

Писал собственную програмулину, через винапи собирающую инфу с листов. Текст из столбцов собирается прекрасно. Индекс иконки - всегда равен нулю, что странно, т.к. иконки разные.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 24 июня 2011 00:02
· Личное сообщение · #6

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

Создано: 24 июня 2011 13:01
· Личное сообщение · #7

А если целевое приложение свернуто? И это, наверно, будет довольно затратно, т.к. частота сбора должна быть высокой. Например, раз в 2-3 секунды.

А еще есть какие-либо способы собрать данную информацию?



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

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



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

Создано: 21 сентября 2012 14:52 · Поправил: SeregaZ
· Личное сообщение · #9

чем вызвано "примерзание" селекта на первом пункте меню?

существует api команда для некоего своеобразного рефреша окна? или сброса селекта? чтобы форма стала без выделенных элементов?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

SeregaZ пишет:
есть ли какие-то win api, которое звучит так: "а не с инициировалось ли окно?"

--> WaitForInputIdle <--

Не?

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 21 сентября 2012 22:56 · Поправил: SeregaZ
· Личное сообщение · #11

так. попытаюсь объяснить что я понял из буржуйского описания:
1. запускаю эксплорер
2. запускаю эту команду
она по сути тормозит выполнение моей программы и ждет пока эксплорер вернет сообщение что "я готов"?
3. посылаю команду на чтение той таблицы
4. опять запускаю эту команду на ожидание.

верно?

***

так. что-то нифига... пишет неверный дескриптор. и хендл процесса сувал, и хендл окна... не хочет

***

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

чему равна INFINITE или как правильно указать? -1?

***

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




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

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




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

Создано: 21 сентября 2012 23:52 · Поправил: SeregaZ
· Личное сообщение · #13

по первой ссылке мне предложили сходить проверится...
по второй малость не подходит:
Code:
  1.     handle = 15139740
  2.  
  3.     State.LVITEM 
  4.     State\mask = #LVIF_STATE
  5.     State\state = #LVIS_SELECTED | #LVIS_FOCUSED
  6.     State\stateMask = #LVIS_SELECTED | #LVIS_FOCUSED
  7.  
  8.     GetWindowThreadProcessId_(handle, @pid)
  9.     
  10.     proc = OpenProcess_(#PROCESS_ALL_ACCESS, #False, pid)
  11.     If proc
  12.       index = 2
  13.       Repeat
  14.  
  15.         WaitForSingleObject_(proc, 1000)
  16.         
  17.         SendMessage_(handle, #LVM_SETITEMSTATE, index, @State)
  18.         index + 1
  19.         If index = 5
  20.           index = 0
  21.         EndIf
  22.         
  23.       ForEver
  24.     EndIf

по замыслу должен был происходить селект четырех элементов в форме по очереди. однако ничего... зато если убрать WaitForSingleObject_(proc, 1000), сразу все 4 итема выбраны. хотя форма поддерживает только одиночный селект так сказать...

***

правильный ответ оказался у алексея: --> Link <--
там правда в коде одна или две мелкие ошибки... но в целом картину отображает верно




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

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

SeregaZ
правильный ответ оказался у алексея

Может таки имело смысл начать именно с этого? Т.е. поискать самому и не переливать из пустого в порожнее?
Тем более, что к reverse engineering'y все это относится весьма и весьма условно.

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



 eXeL@B —› Вопросы новичков —› SysListView32 - вытащить данные
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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