Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 47
1

Как получить данные из TVirtualStringTree, зная его Handle?

03.07.2014, 17:01. Просмотров 823. Ответов 2
Метки нет (Все метки)

Как прочитать данные первой колонки из TVirtualStringTree, зная его Handle. Для ListView делал так (правда в чужом процессе):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
procedure
  GetSnapshotListView(hwndRemoteSysListView: HWND);
var
  i: integer;
begin
 // Получаем количество элементов
  nItemCount := ListView_GetItemCount(hwndRemoteSysListView);
  // Получаем ID процесса, которому принадлежит найденное окно
  GetWindowThreadProcessId(hwndRemoteSysListView, &dwProcessID);
  if dwProcessID = 0 then ExitProcess(GetLastError);
  // Открываем процесс
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwProcessID);
  if hProcess = 0 then ExitProcess(GetLastError);
  // Выделяем в нем память под текстовый буфер
  pszText := VirtualAllocEx(hProcess, nil, cchTextMax,
    MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
  if GetLastError <> 0 then ExitProcess(GetLastError);
  // Выделяем в нем память под структуру LVITEM
  plviRemoteLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM),
   MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
  if GetLastError <> 0 then ExitProcess(GetLastError);
  // Заполняем структуру
  ZeroMemory(@lviRemoteLVItem, SizeOf(LV_ITEM));
  lviRemoteLVItem.mask := LVIF_STATE or LVIF_TEXT;
  lviRemoteLVItem.pszText := pszText;
  lviRemoteLVItem.cchTextMax := cchTextMax;
  // Пишем ее в память удаленного процесса
  if not WriteProcessMemory(hProcess, plviRemoteLVItem, @lviRemoteLVItem,
  SizeOf(LV_ITEM), dwBytesWriten) then ExitProcess(GetLastError);
  // Получаем текст со всех элементов
  for I := 0 to nItemCount - 1 do
  begin
  // Отправляем сообщение с указателем на выделенный буфер
  nTextLength := SendMessage(hwndRemoteSysListView, LVM_GETITEMTEXT,
    I, Integer(plviRemoteLVItem));
  // Читаем результат
  ZeroMemory(@svText, cchTextMax);
  ReadProcessMemory(hProcess, lviRemoteLVItem.pszText,
    @svText[1], nTextLength, dwBytesWriten);
    Writeln(PChar(@svText[1]));
  end;
  // Освобождаем ранее выделенную память
  VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);
  VirtualFreeEx(hProcess, plviRemoteLVItem, 0, MEM_RELEASE);
  // Закрываем описатель процесса
  CloseHandle(hProcess);
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2014, 17:01
Ответы с готовыми решениями:

Как получить информацию о другом окне, зная его Handle
Как получить информацию о другом окне если есть Хендл(расположение, заголовок, размеры и т.д.)? И...

Получить информацию об окне, зная его handle
Подскажите, как зная хендл окна получить о нем информацию(есть ли в этом окне кнопки, сколько, их...

Как взять текст из окна, зная его Handle?
К примеру я знаю хэндл (hWnd) текстового окна в любой запущенной программе. Как мне взять из неё...

Как узнать Handle или PID процесса, зная его имя и класс?
Как узнать Handle или PID процесса, зная его имя и класс?

2
2645 / 2268 / 278
Регистрация: 24.12.2010
Сообщений: 13,725
04.07.2014, 16:54 2
Считай что никак.
Есть, конечно, изощренные методы добраться до его потрохов, но они несравнимо сложнее и возможность успешного использования их ограничена рядом условий.
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 47
04.07.2014, 22:53  [ТС] 3
Цитата Сообщение от mss Посмотреть сообщение
Есть, конечно, изощренные методы добраться до его потрохов, но они несравнимо сложнее и возможность успешного использования их ограничена рядом условий.
Как - может утилиты какие есть?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2014, 22:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Получить имя процесса зная handle
кому-то да понадобиться вот код : private static extern Int32...

Изменить стиль окна, зная его handle?
Можно ли с помощью Winapi функций изменить стиль окна, зная handle этого окна? например послав...

Отсылка сообщения окну, зная его Handle (PostMessage)
Не знаю, по адресу ли я обратился :( В общем, в виндовозовской библиотеке &quot;user32.dll&quot; есть...

Можно ли запретить запуск окна, зная его Handle
Собственно вот и вопрос да и еще если можно вообще запретить запуск этой проги или её хранение, или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.