![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TreeView в чужом приложении [D7, WinXP]
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.