Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

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


Достать текст


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
KBak
Новичок




Зарегистрирован: 09.08.2007
Сообщения: 5

СообщениеЧт, 09-Авг-2007 14:35    Заголовок сообщения: Достать текст
Цитата

В чужом окне есть некая таблица. Мне нужно скопировать оттуда текст. С помощью функции EnumChildWindows я искал объекты в окне. Нашлось 3 класса: 1)Afx:00400000:8:000014A6:00000000:00000000, 2)SysListView32, 3)SysHeader32.
Так как мне добратся до текста?
В начало
Посмотреть профиль Отправить личное сообщение
CyberMerlin
Гость







СообщениеЧт, 09-Авг-2007 14:51 
Цитата

getwindowtext чего-н может достать ?
В начало
KBak
Новичок




Зарегистрирован: 09.08.2007
Сообщения: 5

СообщениеЧт, 09-Авг-2007 15:09 
Цитата

getwindowtext ничего не находит. Да и чего он должен найти если это таблица с ячейками... Наверно надо как-то извлекать текст из каждой ячейки.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Stilet
Новичок


Возраст: 28
Знак зодиака: Рыбы
Зарегистрирован: 01.08.2007
Сообщения: 3
Откуда: Украина, Донецкая обл. г.Краматорск
СообщениеЧт, 09-Авг-2007 16:00 
Цитата

А с чего автор взял что у этой таблицы и тем более у ее ячеек хендл есть? WinSpector или SpyXX тебе в помощь. И скорее всего это будет сделать невозможно.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Шурик
Я живу тут....


Возраст: 42
Знак зодиака: Овен
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
СообщениеЧт, 09-Авг-2007 16:08 
Цитата

А что это такое ты исследуешь? Картинку покажи, что ли. Посмотри SpyX или чем-то подобным, где сама таблица. Из того, что ты написал, есть вероятность, что таблица -- это ListView. Если так, наверно есть шанс добраться до его узлов через посыл сообщений.
_________________
Ответ готов, готов ли твой вопрос?
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
KBak
Новичок




Зарегистрирован: 09.08.2007
Сообщения: 5

СообщениеЧт, 09-Авг-2007 20:40 
Цитата

Смотрел через winspector. Увидел что из объекта SysListView32 вытекает SysHeader32. Если заглянуть в свойства этих объектов то там есть колонка 'class specific' в которой у SysHeader32 записано число столбцов, а у SysListView32 число соответсвует числу строк не считая строки с названиями столбцов.
В примере эти числа равны 2 и 0.



table.jpg
 Описание:
Пустая таблица :)
 Размер:  16.97 KB
 Просмотрено:  4295 раз(а)

table.jpg


В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Шурик
Я живу тут....


Возраст: 42
Знак зодиака: Овен
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
СообщениеПт, 10-Авг-2007 1:49 
Цитата

Мне кажется, это стандартный ListView. Попробуй следующее:
- В Дельфи создай форму
- брось на неё ListView из закладки Win32
- поставь ViewStyle=vsReport, добавь Columns, Items, включи GridLines
- запусти и посмотри утилитой "шпионом"
Мне кажется, ты увидишь там те же классы.

Посмотри сюда. Мне кажется этими сообщениями ты что-то сможешь до ListView достучаться.

Конечно, я могу и ошибаться. Но это всё очень похоже на ListView...

_________________
Ответ готов, готов ли твой вопрос?
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
KBak
Новичок




Зарегистрирован: 09.08.2007
Сообщения: 5

СообщениеПт, 10-Авг-2007 15:28 
Цитата

Дайте ссылочку где на русском языке есть описание подобных функций:
- LVM_GETITEM
- LVM_GETITEMTEXT
Или объясните что там за параметры такие (хорошо бы с примерчиком). Rolling Eyes
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Шурик
Я живу тут....


Возраст: 42
Знак зодиака: Овен
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
СообщениеПт, 10-Авг-2007 17:13 
Цитата

http://translate.google.com/translate?u=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Flibrary%2Fms670761.aspx&langpair=en%7Cru&hl=en&ie=UTF8
http://www.google.com/search?hl=ru&q=LVM_GETITEM&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=lang_ru

Код:
lResult = SendMessage(
       // returns LRESULT in lResult
   (HWND) hWndControl,
       // handle to destination control
   (UINT) LVM_GETITEM,
       // message ID
   (WPARAM) wParam,
       // = 0; not used, must be zero
   (LPARAM) lParam
       // = (LPARAM) (LPLVITEM) pitem;

);


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

_________________
Ответ готов, готов ли твой вопрос?
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
KBak
Новичок




Зарегистрирован: 09.08.2007
Сообщения: 5

СообщениеСр, 15-Авг-2007 18:13 
Цитата

Вот как бы я нашел следующий код и у меня по нему пара вопросов
delphi:
  1. Function listview(h: hwnd): BOOL; stdcall;
  2. var
  3. ProcessId: DWORD;
  4. Process: THandle;
  5. vPointer: Pointer;
  6. Buffer: array [byte] of char;
  7. NumberOfBytesRead: Cardinal;
  8. Item: TLVItem;
  9. hListView:HWND;
  10. ItemsCount,i:integer;
  11.  
  12. Buf : array [0..150] of char;
  13.  
  14. begin
  15.  
  16. hListView := h;
  17. GetClassName(hListView, buf, 150);
  18. if buf <> 'SysListView32' then
  19. exit;
  20. form1.memo1.Lines.Add('list naiden');
  21.  
  22. GetWindowThreadProcessId(hListView, @ProcessId);
  23. Process := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId);
  24.  
  25. vPointer := VirtualAllocEx(Process, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
  26. ItemsCount := SendMessage(hListView, LVM_GETITEMCOUNT, 0, 0);
  27.  
  28. try
  29. for i := 0 to ItemsCount do begin
  30.   with Item do begin
  31.   mask := LVIF_TEXT;
  32.   iItem := i;
  33.   iSubItem := 0;
  34.   cchTextMax := SizeOf(Buffer);
  35.   pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem));
  36.   end;
  37.   WriteProcessMemory(Process, vPointer, @Item, SizeOf(TLVItem), NumberOfBytesRead);
  38.   SendMessage(hListView, LVM_GETITEM , I, lparam(vPointer));
  39.   ReadProcessMemory(Process, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)), @Buffer[0], SizeOf(Buffer), NumberOfBytesRead);
  40.  
  41.   form1.memo1.Lines.Add(Buffer);
  42.  
  43. end;
  44. finally
  45. VirtualFreeEx(Process, vPointer, 0, MEM_RELEASE);
  46. CloseHandle(Process);
  47. end;
  48. end;
  49.  
  50. procedure TForm1.Button1Click(Sender: TObject);
  51. var
  52. h:HWND;
  53.  
  54. begin
  55.  
  56. Memo1.Clear;
  57. h:=FindWindow(nil, 'Xxx');
  58. if h <> 0 then
  59. EnumChildWindows(h, @listview, 0);
  60. end;

Действительно ли чтоб получить текст должно быть все так сложно?
И собственно этот код выводит фигню Улыбка ... может кто подскажет почему?
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100