Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TreeView в чужом приложении [D7, WinXP]


Страницы:   1 2

Master_Of_Puppets ©   (2008-02-08 01:08:00) 

Передо мной возникла следующая проблемка. Есть некое приложение (к сожалению, не моё). В нем используется визуальный компонент TTreeView. Мне надо узнать текст выделенного узла и его "вложенность" (1, 2, 3 ... n -ий уровень). До самого компонента TTreeView я то добрался (используя FindWindowEx) а вот дальше я не знаю как...


clickmaker   (2008-02-08 18:17:00) [21]


> [6] Dib@zol ©   (08.02.08 12:24)
> tvItem.pszText тоже нужно заполнять. Заполнять указателем,
> который, как тебя уже ткнул носом г-н Кетмарь, возвернёт
> функция VirtualAlloc (хотя по мне GlobalAlloc предпочтительнее).

LPVOID VirtualAllocEx(
 HANDLE hProcess,
 ...
VirtualAllocEx function reserves or commits a region of memory within the virtual address space of a specified process

vs

HGLOBAL GlobalAlloc(
 UINT uFlags,
 SIZE_T dwBytes
);

ничего не смущает?


Dib@zol   (2008-02-08 18:11:00) [22]

> а почему не pszText := PChar(GlobalAlloc(GMEM_FIXED, TSZ)
> ) ?

А какая сопстно разница? так или иначе - работает, окоянное :)


clickmaker   (2008-02-08 18:10:00) [23]


> LongInt(pszText) := GlobalAlloc(GMEM_FIXED, TSZ);

а почему не pszText := PChar(GlobalAlloc(GMEM_FIXED, TSZ)) ?


Dib@zol   (2008-02-08 18:09:00) [24]

Удалено модератором


Dib@zol   (2008-02-08 18:07:00) [25]

Удалено модератором


ketmar   (2008-02-08 18:00:00) [26]

>[8] Master_Of_Puppets (2008-02-08 17:43:00)
бросай ты это дело. «Парфеша, куда тебе целоваться-то, ты ведь облеванный весь!» (ц) Даун Хаус

---
Understanding is not required. Only obedience.


Master_Of_Puppets   (2008-02-08 17:43:00) [27]

Я думал, что нужен лиш код, который я привел в [4]. Пробывал сделать так как там, но Делфи ругается на хендл вот тут:

procedure ReadItemFromBuff(var Item: TTVITEM);
     var Readed: DWORD;
   begin
--> Win32Check(ReadProcessMemory(hTreeView, aRemBuff, @Item, SizeOf(Item), Readed));
     Win32Check(Readed = SizeOf(Item));
   end;

А можно сделать другим способом (чуточку проще) или это единственный?
Пробывал еще вот так (с учетом замечания [7]), но не работает:

var str : String
...
with tvItem do
  begin
    mask := TVIF_TEXT;
    hItem := TreeView_GetSelection(hTreeView);
    cchTextMax := 100;
    pszText := @str;
 end;
TreeView_GetItem(hTreeView, tvItem);
lblCap.Caption := str;


Dib@zol   (2008-02-08 12:30:00) [28]

Удалено модератором


Dib@zol   (2008-02-08 12:24:00) [29]

tvItem.pszText тоже нужно заполнять. Заполнять указателем, который, как тебя уже ткнул носом г-н Кетмарь, возвернёт функция VirtualAlloc (хотя по мне GlobalAlloc предпочтительнее).


ketmar   (2008-02-08 12:16:00) [30]

>[4] Master_Of_Puppets (2008-02-08 11:52:00)
ты [3] внимательно прочёл? или по ссылкам ходить — дело не барское?

---
Understanding is not required. Only obedience.


Master_Of_Puppets   (2008-02-08 11:52:00) [31]

Вот кусок кода, вроде бы правильно, но ничего не выводится в лейбле:

with tvItem do
   begin
     mask := TVIF_TEXT;
     hItem := TreeView_GetSelection(hTreeView);
     cchTextMax := 100;
  end;
TreeView_GetItem(hTreeView, tvItem);
lblMeshText.Caption := tvItem.pszText;

Хендл верен


Бегущий человек   (2008-02-08 05:37:00) [32]

При этом стоит учесть опыт наших товарищей :
http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=2&m=139940


Бегущий человек   (2008-02-08 05:32:00) [33]

Сообщение TVM_GETITEM в Win32 SDK или MSDN


ketmar   (2008-02-08 05:23:00) [34]

а дальше читать MSDN по поводу работы с ним. есть подозрение, что придётся код внедрять в чужое АП.

---
Understanding is not required. Only obedience.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо