![]() |
eXeL@B —› Основной форум —› Техника и утилиты захвата данных из списков |
Посл.ответ | Сообщение |
|
Создано: 11 декабря 2005 20:07 · Поправил: bloom · Личное сообщение · #1 Часто приходится извлекать данные из списков программ (будь то телефонный справочник или что-нибудь другое) чаще всего - это ListBox или SysListView32 в этом случае очень помогает утилита List Grabber 1.0 http://alex-home-pg.nm .ru/List_Grabber.rar http://alex-home-pg.nm.ru/List_Grabber.rar также иногда использую SysExporter (знает больше классов) http://www.nirsoft.net/ut ils/sysexp.zip http://www.nirsoft.net/utils/sysexp.zip однако иногда попадаются экзотические классы окон например KAVGUI_ListCtrl в 5-м Касперском как извлечь данные из такого списка ?? куда копать ? ![]() ----- in search of sunrise ![]() |
|
Создано: 11 декабря 2005 20:21 · Личное сообщение · #2 |
|
Создано: 11 декабря 2005 20:38 · Личное сообщение · #3 |
|
Создано: 11 декабря 2005 23:28 · Личное сообщение · #4 да и есть ScreenShot Reader в 8-м ФайнРидере, Клептомания не совсем выдирает данные из окна со скроллингом, вобщем снятим и распознаванием скриншотов хотелось бы заниматься в последнюю очередь... ведь можно как-то программно выдрать данные из этого окна ? ![]() ----- in search of sunrise ![]() |
|
Создано: 12 декабря 2005 05:34 · Личное сообщение · #5 bloom пишет: ведь можно как-то программно выдрать данные из этого окна ? Конечно можно. Только хэндл этого листбокса определи - hList1. GetItem proc Row ![]() ![]() ![]() LOCAL lvc:LV_ITEM mov lvc.imask, LVIF_TEXT push Row pop lvc.iItem push Column pop lvc.iSubItem push pszCaption pop lvc.pszText invoke SendMessage, hList1, LVM_GETITEM,0, addr lvc ret GetItem endp Row - ряд. Column - колонка. В pszCaption помещается полученный результат. ![]() |
|
Создано: 12 декабря 2005 10:32 · Поправил: crc1 · Личное сообщение · #6 |
|
Создано: 12 декабря 2005 11:21 · Личное сообщение · #7 |
|
Создано: 12 декабря 2005 12:37 · Личное сообщение · #8 Spirit пишет: Есть хорошая прога: Inq Soft Windows Scanner, где непомню, помню что она тоже может выдирать с окон ресурсы http://kickme.to/inqsoft Кстати обновился InqSoft Sign 0f Misery. Neo Sign 0f Misery Качать тут s0m.narod.ru/neos0m.zip ----- M&#225 enginn renna undan &#254v&#237 sem honum er skapa&#240 ![]() |
|
Создано: 12 декабря 2005 14:49 · Личное сообщение · #9 |
|
Создано: 12 декабря 2005 21:26 · Личное сообщение · #10 |
|
Создано: 12 декабря 2005 23:10 · Личное сообщение · #11 да, все классные утилиты - всеми пользуюсь, но ни с одной не получилось красиво выдрать ресурсы из окна Касперского (это просто пример, не получается выдрать из многих окон), например SnagIt плохо подходит для больших списком - так как AutoScroll при захвате там чрезвычайно медленный (даже не предаставляю сколько он будет выдирать данные из этого окна, если учесть сколько записей в базе касперского) Window Scanner умеет выдирать только из 4-х стандартных контролов, к этому примеру не подходит... пробую делать по совету TOG, код такой var
так вот, этот код работает прекрасно в моем окне, но не работает в чужих окнах. как же найти значение в ListView в чужом окне ? ----- in search of sunrise ![]() |
|
Создано: 12 декабря 2005 23:11 · Поправил: bloom · Личное сообщение · #12 |
|
Создано: 12 декабря 2005 23:51 · Личное сообщение · #13 Spirit пишет: Лучше скажи что там хорошего, а то качать в лом. InqSoft Neo Sign 0f Misery представляет собой средство автоматизации, основанное на использовании сценариев (скриптов), описывающих последовательность действий, которые необходимо выполнить для решения той или иной задачи. Данный продукт разрабатывался как замена Sign 0f Misery - предыдущего проекта аналогичного назначения, который обладал некоторыми существенными ограничениями, необходимость преодоления которых и стала причиной появления этого проекта. InqSoft Neo Sign 0f Misery позволяет решать повседневные задачи рядового пользователя: запуск определенных программ при некоторых условиях, открытие документов, автоматический вызов тех или иных пунктов меню программы, управление состоянием и расположением окон на экране. Кроме того, программа позволяет выполнять достаточно сложные операции по отслеживанию и эмуляции нажатий на клавиши, имитировать работу с мышью, управлять приоритетами программ, модифицировать содержимое файлов, править код программ непосредственно в памяти и выполнять прочие подобные операции. Большое внимание при разработке Neo Sign 0f Misery уделено возможностям разблокирования неактивных управляющих элементов: кнопок, переключателей, элементов меню и т.п., а также принудительной активации заблокированных функций в программах. Язык сценариев, который использует Neo Sign 0f Misery, позволяет строить скрипты с достаточно сложной логикой, использующие конструкции ветвления, типизированные переменные и другие конструкции, обычно присущие языкам программирования. Скрипты могут компилироваться либо в байт-код, исполняемый ядром в виде DLL (что позволяет интегрировать возможности Neo Sign 0f Misery в собственные программы), либо в исполняемый файл, содержащий в себе все необходимое для работы скрипта (т.е. передавать пользователю один только EXE-файл, не требующий наличия на компьютере Neo Sign 0f Misery). Ядро Neo Sign 0f Misery имеет сравнительно небольшой размер (порядка десятков килобайт) и потребляет минимальное количество ресурсов при высокой скорости исполнения скриптов. Это позволяет использовать Neo Sign 0f Misery для создания небольших приложений, позволяющих эффективно управлять процессами, протекающими в компьютере, даже при минимальных навыках в программировании и знаниях об устройстве операционной системы. Neo Sign 0f Misery является полностью модульным продуктом, основными модулями которого являются: · Ядро в виде DLL и образа исполняемого файла, обеспечивающее работу интерпретатора байт-кода · Компилятор, позволяющий преобразовывать текстовые файлы со сценариями в байт-код или исполняемый файл · Оболочка, связывающая воедино редактор сценариев с подсветкой синтаксиса и компилятор, а также позволяющая выполнять тестовый запуск откомпилированных скриптов · Документация по синтаксису языка сценариев Neo Sign 0f Misery и назначению команд, доступных для использования в сценариях Исходные тексты программных модулей проекта на Delphi являются открытыми и распространяются по лицензии GPL. И там теперь не кнопочки кидаешь,а пишешь скриптовым языком Вот пример ; Скрипт-шутка. Имитирует "ветер", сдувающий курсор мыши к правой ; границе экрана. Клавиша CONTROL завершает работу скрипта. ; ; CyberManiac, 01.11.2005 galloc 1 . ^loop mouse_get_pos 0 . add 0 1 . mouse_set_pos @0 . sleep 1 is_keys_pressed 0 $11 . branch 0 0 ^loop . mbox 'Работа скрипта завершена' . eos $ ----- M&#225 enginn renna undan &#254v&#237 sem honum er skapa&#240 ![]() |
|
Создано: 13 декабря 2005 02:26 · Личное сообщение · #14 |
|
Создано: 13 декабря 2005 06:58 · Личное сообщение · #15 в таких случаях когда в качестве параметра SendMessage нужно передать указатель на что-либо мы должны выделять память под данный объект (на который делаем указатель) в памяти того процесса в котором находиться окно, которому мы посылаем сообщение через SendMessage ![]() Этим объясняется bloom пишет: так вот, этот код работает прекрасно в моем окне, но не работает в чужих окнах Вот мой пример (проверенный) который получает тултипы всех кнопок в Трее [C++] HWND myTray = FindWindowEx(FindWindowEx(FindWindowEx(FindWindow("Shell_TrayWnd", NULL),NULL,"TrayNotifyWnd",NULL),NULL,"SysPager",NULL),NULL,"ToolbarWi ndow32",NULL); LRESULT tTotal = SendMessage(myTray,TB_BUTTONCOUNT,0,0); cout << "Total items in tray -> " << tTotal << endl; TBBUTTON1 tbb; char text[100]; DWORD pid; HANDLE hProc; GetWindowThreadProcessId(myTray, &pid); hProc = OpenProcess(PROCESS_VM_READ | PROCESS_VM_OPERATION, false, pid); //info LPVOID addr = VirtualAllocEx(hProc, &tbb, sizeof(tbb), MEM_COMMIT, PAGE_READWRITE); //text LPVOID addr_text = VirtualAllocEx(hProc, &text, sizeof(text), MEM_COMMIT, PAGE_READWRITE); for(int i=0;i < tTotal; i++) { SIZE_T count; cout << "item (" << i+1 << " / " << tTotal << "):" << endl; LRESULT lLen = SendMessage(myTray,TB_GETBUTTONTEXT,(WPARAM)i,(LPARAM) addr_text); if(lLen==-1) cout << "error!!!" << endl; ReadProcessMemory(hProc, addr_text, &text, sizeof(text), &count); LRESULT lResult = SendMessage(myTray,TB_GETBUTTON,(WPARAM) i,(LPARAM) (LPTBBUTTON) addr); if(lResult==FALSE) cout << "error!!!" << endl; ReadProcessMemory(hProc, addr, &tbb, sizeof(tbb), &count); LRESULT lID = SendMessage(myTray,TB_COMMANDTOINDEX,(WPARAM) i,NULL); cout << "...iButton -> " << lID << endl; cout << "...idButton -> " << i << endl; cout << "...Tooltip -> " << text << endl; cout << "...iString -> " << (CHAR) tbb.iString << endl; cout << "...Style -> " << (int)tbb.fsStyle << endl; cout << "...idCommand -> " << tbb.idCommand << endl; } VirtualFreeEx(hProc, &tbb, sizeof(tbb), MEM_RELEASE); VirtualFreeEx(hProc, &text, sizeof(text), MEM_RELEASE); CloseHandle(hProc); Тебе осталось только разовраться в нем и сделать по аналогии ![]() |
|
Создано: 13 декабря 2005 16:43 · Личное сообщение · #16 спасибо за помощь, код получился такой var
этот код отлично работает с любым классом окна вида SysListView32 или TListView, но вот список у Касперского KAVGUI_ListCtrl, c ним это не срабатывает, или ничего не выдирает либо белиберда какай-то. Какой подход для выдирания из этого списка искать ?? ----- in search of sunrise ![]() |
|
Создано: 14 декабря 2005 07:08 · Личное сообщение · #17 |
|
Создано: 14 декабря 2005 16:38 · Личное сообщение · #18 |
|
Создано: 16 декабря 2005 21:02 · Личное сообщение · #19 на одном из форумов ответили Что, если этот Каспер отрисовку элементов выполняет самостоятельно? Валяется у него массивчик каких ему вздумается данных, а он в каком-нибудь NM_CUSTOMDRAW свинячит текст на экран. Конечно, программно в этом случае выдрать данные можно, но только проанализировав код Каспера. А общего решения (кроме подобных вышепредложенному) не существует.
каспер очередной раз победил(((( ----- in search of sunrise ![]() |
|
Создано: 30 апреля 2006 14:35 · Личное сообщение · #20 |
![]() |
eXeL@B —› Основной форум —› Техника и утилиты захвата данных из списков |