Вверх ↑
Этот топик читают: Гость
Ответов: 49
Рейтинг: 0
#1: 2021-10-09 06:42:04 ЛС | профиль | цитата
Всем привет. Проблема в получении списка строк из Диспетчера задач через сообщения окну. По моей схеме я получаю только надпись "Процессы".


Add(MainForm,2953706,168,91)
{
Width=685
Height=472
Caption="1859"
link(onCreate,1693625:doFind,[])
}
Add(WinEnum,1693625,238,98)
{
link(onFindWindow,12898770:doEnumChildWindows,[(282,104)(282,156)(185,156)(185,209)])
link(Caption,1366170:Text,[])
}
Add(WinEnum,12898770,231,182)
{
Point(doEnumChildWindows)
Point(onEnumChildWindows)
Point(ParentHandle)
link(onEnumChildWindows,16531181:doStr,[])
link(ParentHandle,1693625:Handle,[])
}
Add(VisualStrings,1366170,238,49)
{
Lines=#23:Диспетчер задач Windows|
Width=144
}
Add(SendMessage,15421399,357,511)
{
Message=9
LParam=1
Point(Message)
link(onSend,9279906:doValue,[])
link(Handle,12600793:Var,[])
link(WParam,2601413:Var3,[(370,478)(282,478)(282,549)])
link(LParam,14189995:Memory,[(377,495)(489,495)])
link(Message,10497072:Var,[])
}
Add(MemoryStream,14189995,469,448)
{
Point(Memory)
Point(doSize)
Point(Position)
}
Add(DataToFile,13414976,469,504)
{
Type=6
link(onGet,7811580:doString,[])
link(Stream,14189995:Stream,[])
}
Add(Hub,8233292,315,497)
{
OutCount=5
link(onEvent2,5834539:doData,[(364,510)(364,468)])
link(onEvent3,15421399:doSendMessage,[])
link(onEvent4,14189995:doClear,[(399,524)(399,461)])
link(onEvent5,3453558:doSendMessage,[(341,531)(341,608)(254,608)(254,685)])
}
Add(GlobalVar,12600793,357,350)
{
@Color=16755285
Name="handle"
}
Add(MT_String,16531181,287,196)
{
link(onResult,150237:doAdd,[])
}
Add(StringTable,150237,343,196)
{
Left=10
Top=10
Width=305
Height=90
Columns=#13:Название=100;|18:Идентификатор=100;|14:Заголовок=100;|
Redaction=1
link(onClick,8450245:doSplit,[])
}
Add(MultiStrData,8450245,413,196)
{
link(Str,150237:Select,[(419,184)(387,184)(387,240)(356,240)])
link(onPart2,3396396:doWork2,[])
}
Add(GlobalVar,10882181,476,203)
{
@Color=16755285
Name="handle"
link(onValue,3550636:doEvent1,[])
}
Add(LineBreakEx,13506788,84,490)
{
@Color=5635925
Caption="Текст"
Type=1
link(OnEvent,14626141:doEvent1,[])
}
Add(Hub,3550636,539,203)
{
OutCount=5
link(onEvent3,7619058:doWork,[])
link(onEvent4,11741915:doClear,[(588,230)(588,286)])
link(onEvent5,4496556:doEnumChildWindows,[(565,237)(565,261)(457,261)(457,286)])
}
Add(LineBreakEx,7619058,567,217)
{
@Color=5635925
Caption="Текст"
}
Add(Memo,14411687,721,504)
{
Top=365
Width=677
Align=4
AddType=1
ScrollBars=2
}
Add(WinEnum,4496556,469,259)
{
Point(doEnumChildWindows)
Point(onEnumChildWindows)
Point(ParentHandle)
link(onEnumChildWindows,7687947:doStr,[])
link(ParentHandle,10882181:Var,[])
}
Add(StringTable,11741915,623,273)
{
Left=10
Top=105
Width=305
Height=240
Columns=#13:Название=100;|18:Идентификатор=100;|14:Заголовок=100;|
Redaction=1
link(onClick,10467780:doSplit,[])
}
Add(MT_String,7687947,546,273)
{
link(onResult,11741915:doAdd,[])
}
Add(MultiStrData,15641027,742,84)
{
Count=3
link(onPart1,5670364:doValue,[])
}
Add(GlobalVar,5670364,791,84)
{
@Color=16755285
Name="sms"
link(onValue,2547826:doWork,[])
}
Add(LineBreakEx,2547826,847,84)
{
@Color=5635925
Caption="Текст"
}
Add(MultiStrData,10467780,672,273)
{
link(Str,11741915:Select,[(678,261)(657,261)(657,317)(636,317)])
link(onPart2,3396396:doWork3,[(716,286)(716,249)(459,249)])
}
Add(HubEx,3396396,455,203)
{
link(onEvent,10882181:doValue,[])
}
Add(ListBox,1606663,686,77)
{
Left=407
Width=270
Height=365
Align=3
Strings=#13:13;WM_GETTEXT|18:4100;LB_GETTEXTLEN|14:393;LB_GETTEXT|17:4211;GetItemTextW|17:4141;GetItemTextA|
DataType=1
Point(doSelect)
Point(onSelect)
link(onClick,15008752:doWork2,[])
link(onSelect,15008752:doWork3,[(725,97)])
}
Add(For,14827891,203,497)
{
End=40
link(onEvent,8233292:doEvent1,[])
}
Add(GlobalVar,10497072,378,378)
{
@Color=16755285
Name="sms"
}
Add(HubEx,15008752,721,84)
{
link(onEvent,15641027:doSplit,[])
}
Add(Timer,6283041,637,105)
{
Interval=1
AutoStop=1
link(onTimer,1606663:doSelect,[])
}
Add(Hub,14626141,147,490)
{
OutCount=5
link(onEvent1,10207242:doWork,[(179,496)(179,482)])
link(onEvent2,14827891:doFor,[])
link(onEvent3,8093015:doGetListViewHeader,[(182,510)(182,762)])
link(onEvent4,8093015:doGetListViewRow,[(175,517)(175,769)])
}
Add(LineBreakEx,4747630,672,511)
{
@Color=5635925
Type=1
link(OnEvent,14411687:doClear,[])
}
Add(LineBreakEx,10207242,196,476)
{
@Color=5635925
}
Add(FormatStr,7811580,623,504)
{
DataCount=4
Mask="%1 %2 %3 %4"
link(onFString,9313423:doWork2,[])
link(Str1,2601413:Var1,[(629,436)(244,436)])
link(Str3,9279906:Value,[(643,492)(560,492)(560,565)(419,565)])
}
Add(GetDataEx,2601413,238,544)
{
Angle=3
link(Data,14827891:Position,[(209,549)])
}
Add(Memory,9279906,413,511)
{
link(onData,13414976:doGet,[])
}
Add(DoData,5834539,399,462)
{
Data=Integer(100000)
link(onEventData,14189995:doSize,[])
}
Add(InlineCode,8093015,203,756)
{
WorkPoints=#19:doGetListViewHeader|16:doGetListViewRow|
EventPoints=#8:onHeader|5:onRow|
DataPoints=#8:inHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,windows,Share,Debug;|0:|5:const|27: HDM_FIRST = $1200;|27: LVM_FIRST = $1000;|36: LVM_GETHEADER = LVM_FIRST + 31;|35: HDM_GETITEMCOUNT = HDM_FIRST + 0;|27: HDI_TEXT = $0002;|27: HDF_STRING = $4000;|2: |35: LVM_GETITEMCOUNT = LVM_FIRST + 4;|1: |4:type|19: HD_ITEM = record|19: Mask: Cardinal;|17: cxy: Integer;|23: pszText: PAnsiChar;|17: hbm: HBITMAP;|24: cchTextMax: Integer;|17: fmt: Integer;|19: lParam: LPARAM;|22: iImage: Integer; |22: iOrder: Integer; |7: end; |2: |4:type|18: LV_ITEM = record|15: mask: UINT;|19: iItem: Integer;|22: iSubItem: Integer;|16: state: UINT;|20: stateMask: UINT;|23: pszText: PAnsiChar;|24: cchTextMax: Integer;|20: iImage: Integer;|19: lParam: LPARAM;|21: iIndent: Integer;|8: end; |1: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: onHeader:THI_Event;|22: onRow:THI_Event;|25: inHandle:THI_Event;|3: |50: procedure GetListViewHeader(ALVHandle: HWND);|47: procedure GetListViewRow(ALVHandle: HWND);|59: procedure doGetListViewHeader(var dt:TData; idx:word);|56: procedure doGetListViewRow(var dt:TData; idx:word);|5: end;|0:|14:implementation|0:|46:function ListView_GetHeader(hwnd: HWND): HWND;|5:begin|51: Result := SendMessage(hwnd, LVM_GETHEADER, 0, 0);|4:end;|0:|52:function Header_GetItemCount(Header: HWnd): Integer;|5:begin|56: Result := SendMessage(Header, HDM_GETITEMCOUNT, 0, 0);|4:end;|0:|79:function Header_GetItem(Header: HWnd; Index: Integer; var Item: HD_ITEM): Bool;|5:begin|76: Result := Bool( SendMessage(Header, HDM_GETITEM, Index, Longint(@Item)) );|4:end;|0:|52:function ListView_GetItemCount(hWnd: HWND): Integer;|5:begin|54: Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);|4:end;|0:|42:procedure THiAsmClass.doGetListViewHeader;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|26: GetListViewHeader(hwnd);|4:end;|0:|39:procedure THiAsmClass.doGetListViewRow;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|23: GetListViewRow(hwnd);|4:end;|0:|57:procedure THiAsmClass.GetListViewHeader(ALVHandle: HWND);|6:const |49: cchTextMax=148; // максимальная длина заголовка|5:var |20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|17: dwCount: DWORD;|17: pszText: PChar;|22: svText: ShortString;|18: HDItem: HD_ITEM;|20: pHDItem: ^HD_ITEM;|29: i, j, nTextLength: Integer;|17: lvHeader: HWND;|14: stmp:string;|5:begin|0:|38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|0:|35: // Получаем количество заголовков|43: dwCount := Header_GetItemCount(lvHeader);|27: if dwCount = 0 then Exit;|0:|25: // Получаем ID процесса|19: dwProcessID := 0;|51: GetWindowThreadProcessId(lvHeader, @dwProcessID);|0:|25: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|0:|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|0:|48: // Выделяем в нем память под текстовый буффер |54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|48: // Выделяем в нем память под структуру HDITEM|59: pHDItem := VirtualAllocEx(hProcess, nil, SizeOf(HD_ITEM),|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@HDItem, SizeOf(HD_ITEM));|26: HDItem.mask := HDI_TEXT;|28: HDItem.pszText := pszText;|34: HDItem.cchTextMax := cchTextMax;|0:|45: // Заполняем информацию о каждом заголовке.|30: for i := 0 to dwCount - 1 do|7: begin|0:|41: // Пишем в память удалённого процесса|57: if not WriteProcessMemory(hProcess, pHDItem, @HDItem,|57: SizeOf(HD_ITEM), dwWriten) then Exit;|0:|30: // Получаем итем заголовка|60: SendMessage(lvHeader, HDM_GETITEM, i, Longint(pHDItem));|0:|23: // Читаем заголовки|36: ZeroMemory(@svText, cchTextMax);|66: if not ReadProcessMemory(hProcess, HDItem.pszText, @svText[1],|54: cchTextMax, dwWriten) then Exit;|22: |30: // Выодим их из переменной|44: _hi_onEvent(onHeader,PChar(@svText[1]));|6: end;|0:|34: // Освобождаем выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pHDItem, 0, MEM_RELEASE);|0:|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|0:|54:procedure THiAsmClass.GetListViewRow(ALVHandle: HWND);|5:const|17: cchTextMax=255;|3:var|20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|32: LVItemCount, dwCount: Integer;|29: i, j, nTextLength: Integer;|20: pLVItem: ^LV_ITEM;|18: LVItem: LV_ITEM;|17: pszText: PChar;|22: svText: ShortString;|14: sTmp:string;|17: lvHeader: HWND;|5:begin|29: if ALVHandle = 0 then Exit;|30: // Получаем количество строк|52: LVItemCount := ListView_GetItemCount(ALVHandle); |38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|35: // Получаем количество заголовков|44: dwCount := Header_GetItemCount(lvHeader); |2: |62: // Получаем ID процесса, которому принадлежит найденное окно|19: dwProcessID := 0;|52: GetWindowThreadProcessId(ALVHandle, @dwProcessID);|24: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|47: // Выделяем в нем память под текстовый буффер|54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|47: // Выделяем в нем память под структуру LVITEM|59: pLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM),|81: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@LVItem, SizeOf(LV_ITEM));|27: LVItem.mask := LVIF_TEXT;|28: LVItem.pszText := pszText;|34: LVItem.cchTextMax := cchTextMax;|0:|21: // Считываем строки|34: for i := 0 to LVItemCount - 1 do|7: begin|25: LVItem.iSubItem := 0;|44: // Пишем ее в память удаленного процесса|57: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|54: SizeOf(LV_ITEM), dwWriten) then Exit;|58: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|52: i, Integer(pLVItem));|23: // Читаем результат|36: ZeroMemory(@svText, cchTextMax);|59: ReadProcessMemory(hProcess, LVItem.pszText, @svText[1],|46: nTextLength, dwWriten);|4: |35: sTmp := ''; |42: sTmp := PChar(@svText[1]); |0:|22: //Считываем столбцы|31: for j := 1 to dwCount - 1 do|9: begin|27: LVItem.iSubItem := j;|46: // Пишем ее в память удаленного процесса|59: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|69: SizeOf(LV_ITEM), dwWriten) then Exit;|60: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|54: i, Integer(pLVItem));|25: // Читаем результат|38: ZeroMemory(@svText, cchTextMax);|49: ReadProcessMemory(hProcess, LVItem.pszText,|59: @svText[1], nTextLength, dwWriten);|26: // добавляем столбцы|45: sTmp := sTmp + ';' + PChar(@svText[1]);|8: end;|29: _hi_onEvent(onRow, sTmp);|6: end;|0:|40: // Освобождаем ранее выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pLVItem, 0, MEM_RELEASE);|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|4:end.|
link(onRow,16572225:doAdd,[])
link(inHandle,6270945:Var,[])
}
Add(GlobalVar,6270945,203,721)
{
@Color=16755285
Name="handle"
}
Add(RichEdit,16572225,259,763)
{
Top=504
Width=503
Height=69
Align=4
ModeSp=1
ScrollBars=3
}
Add(SendMessage,3453558,266,679)
{
Message=9
Point(Message)
link(onSend,7969102:doString,[])
link(Handle,14885923:Var,[])
link(WParam,6376330:Var2,[(279,616)(244,616)])
link(Message,16475226:Var,[])
}
Add(GlobalVar,14885923,266,623)
{
@Color=16755285
Name="handle"
}
Add(GlobalVar,16475226,287,651)
{
@Color=16755285
Name="sms"
}
Add(HubEx,9313423,658,504)
{
link(onEvent,14411687:doAdd,[])
}
Add(FormatStr,7969102,343,679)
{
link(onFString,9313423:doWork3,[(662,685)])
link(Str1,6376330:Var3,[(349,558)])
}
Add(GetDataEx,6376330,238,553)
{
link(Data,2601413:Var2,[])
}
Add(InfoTip,2477739,42,336)
{
Info=#36:Получение строк списка из Диспетчера|
Font=[Arial,11,0,16711680,204]
Frame=2
Width=820
Height=487
}

карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 200
Рейтинг: 28
#2: 2021-10-09 17:16:22 ЛС | профиль | цитата
atutunnik94 писал(а):
Проблема в получении списка строк из Диспетчера задач

Add(MainForm,1998830,245,154)
{
Width=504
Height=444
link(onCreate,13023946:doConsoleExec,[])
}
Add(WinExec,13023946,308,154)
{
FileName="powershell"
Param="-nologo -noprofile -command "& {Get-Process | clip}""
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
}
Add(Memo,10667612,308,238)
{
Width=488
Height=405
Align=5
Font=[Lucida Console,8,0,0,204]
ScrollBars=3
}
Add(ClipboardHook,4449285,245,238)
{
link(onChange,10667612:doAdd,[])
}


Редактировалось 1 раз(а), последний 2021-10-09 17:17:37
карма: 5

0
Ответов: 49
Рейтинг: 0
#3: 2021-10-10 02:35:16 ЛС | профиль | цитата
Ваш ответ отличный, только мне нужно понять как получить список через "Сообщение окну" из диспетчера, и не только процессы потом буду вытягивать, а и сервис, и пользователей. Спасибо за ваш вариант тоже, а рыть буду дальше по теме. Уже столько документации начитал, а найти не могу ответа

Gunta писал(а):
atutunnik94 писал(а):
Проблема в получении списка строк из Диспетчера задач

Add(MainForm,1998830,245,154)
{
Width=504
Height=444
link(onCreate,13023946:doConsoleExec,[])
}
Add(WinExec,13023946,308,154)
{
FileName="powershell"
Param="-nologo -noprofile -command "& {Get-Process clip}""
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
}
Add(Memo,10667612,308,238)
{
Width=488
Height=405
Align=5
Font=[Lucida Console,8,0,0,204]
ScrollBars=3
}
Add(ClipboardHook,4449285,245,238)
{
link(onChange,10667612:doAdd,[])
}

|

Редактировалось 1 раз(а), последний 2021-10-10 02:36:13
карма: 0

0
Ответов: 4754
Рейтинг: 534
#4: 2021-10-10 09:03:44 ЛС | профиль | цитата
Работает всё хорошо и без таких наворотов
Вот и вся схема.

карма: 7
0
Ответов: 4754
Рейтинг: 534
#5: 2021-10-11 08:36:08 ЛС | профиль | цитата
atutunnik94, как успехи?
карма: 7
0
Ответов: 49
Рейтинг: 0
#6: 2021-10-12 17:28:40 ЛС | профиль | цитата
andrestudio писал(а):
atutunnik94, как успехи?

Я не могу знать, что у вас написано в IC коде
Прошу приложить схему)

Потому что, примерно скопировав вашу схему, на глаз, у меня вот такой результат:


Пустые строки, и колонки

Редактировалось 2 раз(а), последний 2021-10-12 17:43:43
карма: 0

0
Ответов: 4754
Рейтинг: 534
#7: 2021-10-12 23:09:29 ЛС | профиль | цитата
atutunnik94 писал(а):
Я не могу знать, что у вас написано в IC коде

А что тут не знать, взял твою схему, узнал свой IC (вряд ли вы помните авторов когда только просто качаете в свою копилку труды других форучан не предавая этому никакого значения), переделал схему по своему (сократил элементы) и дал удочку. И?
atutunnik94 писал(а):
Потому что, примерно скопировав вашу схему, на глаз, у меня вот такой результат:

Я и так понимаю что это развод. Но есть что сказать. Ну, что тёска, я же говорил "завязывайте с игрушками" и вы меня дружно послали Правда кто от этого выиграл тайна 7 королей
Можно сделать ещё оптимальней (для твоей копилки)


Add(InlineCode,9129846,420,287)
{
WorkPoints=#19:doFindSysListView32|
EventPoints=#13:onChildHandle|
Code=#19:// -=andrestudio=- |15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Windows,Share,Debug,Messages;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|30: onChildHandle: THI_Event;|61: procedure doFindSysListView32(var dt: TData; idx: Word);|5: end;|0:|14:implementation|0:|3:var|22: _self: THiAsmClass; |0:|73:function EnumChildProc(WndCtrl: HWND; lParam: Longint): Boolean; stdcall;|3:var|31: szClass: array[Byte] of Char;|5:begin|17: Result := True;|50: GetClassName(WndCtrl, szClass, SizeOf(szClass));|7: begin|34: // тут указываем искоммый клас|37: if szClass = 'SysListView32' then|48: // на выходе получаем Handle того что искали|47: _hi_onEvent(_self.onChildHandle,WndCtrl);|6: end;|4:end;|1: |42:procedure THiAsmClass.doFindSysListView32;|3:var|10: h: HWND;|5:begin|16: _self := Self;|40: // тут указываем Caption искомого окна|50: h := FindWindow(NIL, 'Диспетчер задач Windows');|16: if h <> 0 then|56: if (not EnumChildWindows(h, @EnumChildProc, 0)) then|11: Exit;|4:end;|0:|4:end.|
}

atutunnik94 писал(а):
Прошу приложить схему)

Ну ты уж прости, это не мои слова, но в тему (тут такие говорить нельзя)

карма: 7
0
Ответов: 49
Рейтинг: 0
#8: 2021-10-13 17:46:29 ЛС | профиль | цитата
andrestudio писал(а):

Ну, что тёска, я же говорил "завязывайте с игрушками" и вы меня дружно послали.

Не мы тебя послали, а ты сам вышел по собственному желанию, по своим личным причинам.


andrestudio писал(а):

Ну ты уж прости, это не мои слова, но в тему (тут такие говорить нельзя)

Я попросил помощи, потому что у меня не получается сделать желаемое, и есть заданный вопрос. Зачем устраивать личную расправу в форуме?
У меня все равно пустые строки:


Подскажите в чем может быть причина?
Add(MainForm,12720070,273,182)
{
Width=685
Height=472
Caption="1859"
link(onCreate,9129846:doFindSysListView32,[])
}
Add(GlobalVar,10882181,532,203)
{
@Color=16755285
Name="handle"
link(onValue,14626141:doEvent1,[])
}
Add(Hub,14626141,623,203)
{
OutCount=6
link(onEvent3,11637466:doClear,[])
link(onEvent4,8093015:doGetListViewHeader,[])
link(onEvent5,8093015:doGetListViewRow,[])
}
Add(InlineCode,8093015,700,224)
{
WorkPoints=#19:doGetListViewHeader|16:doGetListViewRow|
EventPoints=#8:onHeader|5:onRow|
DataPoints=#8:inHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,windows,Share,Debug;|0:|5:const|27: HDM_FIRST = $1200;|27: LVM_FIRST = $1000;|36: LVM_GETHEADER = LVM_FIRST + 31;|35: HDM_GETITEMCOUNT = HDM_FIRST + 0;|27: HDI_TEXT = $0002;|27: HDF_STRING = $4000;|2: |35: LVM_GETITEMCOUNT = LVM_FIRST + 4;|1: |4:type|19: HD_ITEM = record|19: Mask: Cardinal;|17: cxy: Integer;|23: pszText: PAnsiChar;|17: hbm: HBITMAP;|24: cchTextMax: Integer;|17: fmt: Integer;|19: lParam: LPARAM;|22: iImage: Integer; |22: iOrder: Integer; |7: end; |2: |4:type|18: LV_ITEM = record|15: mask: UINT;|19: iItem: Integer;|22: iSubItem: Integer;|16: state: UINT;|20: stateMask: UINT;|23: pszText: PAnsiChar;|24: cchTextMax: Integer;|20: iImage: Integer;|19: lParam: LPARAM;|21: iIndent: Integer;|8: end; |1: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: onHeader:THI_Event;|22: onRow:THI_Event;|25: inHandle:THI_Event;|3: |50: procedure GetListViewHeader(ALVHandle: HWND);|47: procedure GetListViewRow(ALVHandle: HWND);|59: procedure doGetListViewHeader(var dt:TData; idx:word);|56: procedure doGetListViewRow(var dt:TData; idx:word);|5: end;|0:|14:implementation|0:|46:function ListView_GetHeader(hwnd: HWND): HWND;|5:begin|51: Result := SendMessage(hwnd, LVM_GETHEADER, 0, 0);|4:end;|0:|52:function Header_GetItemCount(Header: HWnd): Integer;|5:begin|56: Result := SendMessage(Header, HDM_GETITEMCOUNT, 0, 0);|4:end;|0:|79:function Header_GetItem(Header: HWnd; Index: Integer; var Item: HD_ITEM): Bool;|5:begin|76: Result := Bool( SendMessage(Header, HDM_GETITEM, Index, Longint(@Item)) );|4:end;|0:|52:function ListView_GetItemCount(hWnd: HWND): Integer;|5:begin|54: Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);|4:end;|0:|42:procedure THiAsmClass.doGetListViewHeader;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|26: GetListViewHeader(hwnd);|4:end;|0:|39:procedure THiAsmClass.doGetListViewRow;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|23: GetListViewRow(hwnd);|4:end;|0:|57:procedure THiAsmClass.GetListViewHeader(ALVHandle: HWND);|6:const |49: cchTextMax=148; // максимальная длина заголовка|5:var |20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|17: dwCount: DWORD;|17: pszText: PChar;|22: svText: ShortString;|18: HDItem: HD_ITEM;|20: pHDItem: ^HD_ITEM;|29: i, j, nTextLength: Integer;|17: lvHeader: HWND;|14: stmp:string;|5:begin|0:|38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|0:|35: // Получаем количество заголовков|43: dwCount := Header_GetItemCount(lvHeader);|27: if dwCount = 0 then Exit;|0:|25: // Получаем ID процесса|19: dwProcessID := 0;|51: GetWindowThreadProcessId(lvHeader, @dwProcessID);|0:|25: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|0:|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|0:|48: // Выделяем в нем память под текстовый буффер |54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|48: // Выделяем в нем память под структуру HDITEM|59: pHDItem := VirtualAllocEx(hProcess, nil, SizeOf(HD_ITEM),|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@HDItem, SizeOf(HD_ITEM));|26: HDItem.mask := HDI_TEXT;|28: HDItem.pszText := pszText;|34: HDItem.cchTextMax := cchTextMax;|0:|45: // Заполняем информацию о каждом заголовке.|30: for i := 0 to dwCount - 1 do|7: begin|0:|41: // Пишем в память удалённого процесса|57: if not WriteProcessMemory(hProcess, pHDItem, @HDItem,|57: SizeOf(HD_ITEM), dwWriten) then Exit;|0:|30: // Получаем итем заголовка|60: SendMessage(lvHeader, HDM_GETITEM, i, Longint(pHDItem));|0:|23: // Читаем заголовки|36: ZeroMemory(@svText, cchTextMax);|66: if not ReadProcessMemory(hProcess, HDItem.pszText, @svText[1],|54: cchTextMax, dwWriten) then Exit;|22: |30: // Выодим их из переменной|44: _hi_onEvent(onHeader,PChar(@svText[1]));|6: end;|0:|34: // Освобождаем выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pHDItem, 0, MEM_RELEASE);|0:|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|0:|54:procedure THiAsmClass.GetListViewRow(ALVHandle: HWND);|5:const|17: cchTextMax=255;|3:var|20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|32: LVItemCount, dwCount: Integer;|29: i, j, nTextLength: Integer;|20: pLVItem: ^LV_ITEM;|18: LVItem: LV_ITEM;|17: pszText: PChar;|22: svText: ShortString;|14: sTmp:string;|17: lvHeader: HWND;|5:begin|29: if ALVHandle = 0 then Exit;|30: // Получаем количество строк|52: LVItemCount := ListView_GetItemCount(ALVHandle); |38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|35: // Получаем количество заголовков|44: dwCount := Header_GetItemCount(lvHeader); |2: |62: // Получаем ID процесса, которому принадлежит найденное окно|19: dwProcessID := 0;|52: GetWindowThreadProcessId(ALVHandle, @dwProcessID);|24: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|47: // Выделяем в нем память под текстовый буффер|54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|47: // Выделяем в нем память под структуру LVITEM|59: pLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM),|81: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@LVItem, SizeOf(LV_ITEM));|27: LVItem.mask := LVIF_TEXT;|28: LVItem.pszText := pszText;|34: LVItem.cchTextMax := cchTextMax;|0:|21: // Считываем строки|34: for i := 0 to LVItemCount - 1 do|7: begin|25: LVItem.iSubItem := 0;|44: // Пишем ее в память удаленного процесса|57: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|54: SizeOf(LV_ITEM), dwWriten) then Exit;|58: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|52: i, Integer(pLVItem));|23: // Читаем результат|36: ZeroMemory(@svText, cchTextMax);|59: ReadProcessMemory(hProcess, LVItem.pszText, @svText[1],|46: nTextLength, dwWriten);|4: |35: sTmp := ''; |42: sTmp := PChar(@svText[1]); |0:|22: //Считываем столбцы|31: for j := 1 to dwCount - 1 do|9: begin|27: LVItem.iSubItem := j;|46: // Пишем ее в память удаленного процесса|59: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|69: SizeOf(LV_ITEM), dwWriten) then Exit;|60: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|54: i, Integer(pLVItem));|25: // Читаем результат|38: ZeroMemory(@svText, cchTextMax);|49: ReadProcessMemory(hProcess, LVItem.pszText,|59: @svText[1], nTextLength, dwWriten);|26: // добавляем столбцы|45: sTmp := sTmp + ';' + PChar(@svText[1]);|8: end;|29: _hi_onEvent(onRow, sTmp);|6: end;|0:|40: // Освобождаем ранее выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pLVItem, 0, MEM_RELEASE);|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|4:end.|
link(onHeader,11637466:doAdd,[(828,230)(828,216)])
link(onRow,11637466:doAddColumn,[])
link(inHandle,10882181:Var,[(706,191)(600,191)(600,230)(538,230)])
}
Add(StringTable,11637466,924,210)
{
Left=6
Top=111
Width=315
Height=180
Point(doAddColumn)
}
Add(InlineCode,9129846,343,196)
{
WorkPoints=#19:doFindSysListView32|
EventPoints=#13:onChildHandle|
Code=#19:// -=andrestudio=- |15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Windows,Share,Debug,Messages;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|30: onChildHandle: THI_Event;|61: procedure doFindSysListView32(var dt: TData; idx: Word);|5: end;|0:|14:implementation|0:|3:var|22: _self: THiAsmClass; |0:|73:function EnumChildProc(WndCtrl: HWND; lParam: Longint): Boolean; stdcall;|3:var|31: szClass: array[Byte] of Char;|5:begin|17: Result := True;|50: GetClassName(WndCtrl, szClass, SizeOf(szClass));|7: begin|34: // тут указываем искоммый клас|37: if szClass = 'SysListView32' then|48: // на выходе получаем Handle того что искали|47: _hi_onEvent(_self.onChildHandle,WndCtrl);|6: end;|4:end;|1: |42:procedure THiAsmClass.doFindSysListView32;|3:var|10: h: HWND;|5:begin|16: _self := Self;|40: // тут указываем Caption искомого окна|50: h := FindWindow(NIL, 'Диспетчер задач Windows');|16: if h <> 0 then|56: if (not EnumChildWindows(h, @EnumChildProc, 0)) then|11: Exit;|4:end;|0:|4:end.|
link(onChildHandle,7491927:doAdd,[])
}
Add(ListBox,7491927,406,196)
{
Left=405
Top=270
DataType=1
link(onClick,10882181:doValue,[])
}


Редактировалось 1 раз(а), последний 2021-10-13 17:47:27
карма: 0

0
Ответов: 4754
Рейтинг: 534
#9: 2021-10-13 18:09:10 ЛС | профиль | цитата
atutunnik94 писал(а):
Подскажите в чем может быть причина?

Выходные точки которые от IC идут к таблице поменяй местами
Я их поменял для удобства подключения, читай когда что то подключаешь от точки а до точки б
карма: 7
0
Ответов: 49
Рейтинг: 0
#10: 2021-10-13 18:25:59 ЛС | профиль | цитата
andrestudio писал(а):
atutunnik94 писал(а):
Подскажите в чем может быть причина?

Выходные точки которые от IC идут к таблице поменяй местами
Я их поменял для удобства подключения, читай когда что то подключаешь от точки а до точки б


Я смотрел и код, и точки, это нормально, просто как бы не тыкал, строки пустые приходят, только делиметры содержат. Так же было когда я это делал штатными компонентами, приходили пустые строки. Что может быть такого, что не дает получить строку?

карма: 0

0
Ответов: 200
Рейтинг: 28
#11: 2021-10-16 18:59:54 ЛС | профиль | цитата
atutunnik94, Не могу ответить тебе в Telegram, постараюсь ответить здесь.
Смею предположить, что у тебя Windows10/64.
Попробуй запустить Диспетчер задач Windows набрав в поле Выполнить "LaunchTM.exe"
А свою программ откомпилируй и запусти от имени администратора.
Всё должно получится.
Read SysListView32 Control.PNG
карма: 5

0
Ответов: 49
Рейтинг: 0
#12: 2021-10-17 13:36:41 ЛС | профиль | цитата
Смею предположить, что у тебя Windows10/64.
Извиняюсь что указал ранее, Windows 7/64.

Всем кто помогал спасибо большое! Вот пишет такие подсказки, просто, все варианты перебранные нами, возвращают пустые строки.
Текст подсказки.
Компоновка проекта...
Command line: dcc32.exe "D:\HiAsm_Build\Elements\delphi\code\main.dpr" "-UD:\#HiAsm\НетФильма\." -Q
Borland Delphi Version 12.0 Copyright (c) 1983,98 Inprise Corporation

D:\HiAsm_Build\Elements\delphi\code\hiInlineCode_3ADD1B0.pas(130) Hint: Value assigned to 'hProcess' never used

D:\HiAsm_Build\Elements\delphi\code\hiInlineCode_3ADD1B0.pas(110) Hint: Variable 'j' is declared but never used in 'ThiInlineCode_3ADD1B0.GetListViewHeader'

D:\HiAsm_Build\Elements\delphi\code\hiInlineCode_3ADD1B0.pas(110) Hint: Variable 'nTextLength' is declared but never used in 'ThiInlineCode_3ADD1B0.GetListViewHeader'

D:\HiAsm_Build\Elements\delphi\code\hiInlineCode_3ADD1B0.pas(112) Hint: Variable 'stmp' is declared but never used in 'ThiInlineCode_3ADD1B0.GetListViewHeader'

D:\HiAsm_Build\Elements\delphi\code\hiInlineCode_3ADD1B0.pas(207) Hint: Value assigned to 'hProcess' never used

Редактировалось 6 раз(а), последний 2021-10-17 13:42:38
карма: 0

0
Ответов: 200
Рейтинг: 28
#13: 2021-10-17 14:18:55 ЛС | профиль | цитата
atutunnik94, Как это ни покажется странным, но от того, как ты запускаешь Диспетчер задач Windows зависит то, сможешь ты читать SysListView32 или нет. Я сам очень сильно удивился от такой новости, когда стал разбираться почему у меня не читаются данные из SysListView32 и тоже возвращаются пустые строки.
Вот ссылки на объяснение этого феномена:
https://superuser.com/questions/753556/taskmgr-exe-called-with-an-argument-by-windows-7
https://www.hexacorn.com/blog/2018/07/22/taskmgr-exe-slashing-numbers/
Вот схема, на которой я экспериментировал(все InlineCode из этой темы):
Add(InlineCode,9129846,182,98)
{
WorkPoints=#19:doFindSysListView32|
EventPoints=#13:onChildHandle|
Code=#19:// -=andrestudio=- |15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Windows,Share,Debug,Messages;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|30: onChildHandle: THI_Event;|61: procedure doFindSysListView32(var dt: TData; idx: Word);|5: end;|0:|14:implementation|0:|3:var|22: _self: THiAsmClass; |0:|73:function EnumChildProc(WndCtrl: HWND; lParam: Longint): Boolean; stdcall;|3:var|31: szClass: array[Byte] of Char;|5:begin|17: Result := True;|50: GetClassName(WndCtrl, szClass, SizeOf(szClass));|7: begin|34: // тут указываем искоммый клас|37: if szClass = 'SysListView32' then|48: // на выходе получаем Handle того что искали|47: _hi_onEvent(_self.onChildHandle,WndCtrl);|6: end;|4:end;|1: |42:procedure THiAsmClass.doFindSysListView32;|3:var|10: h: HWND;|5:begin|16: _self := Self;|40: // тут указываем Caption искомого окна|42: h := FindWindow(NIL, 'Диспетчер задач');|16: if h <> 0 then|56: if (not EnumChildWindows(h, @EnumChildProc, 0)) then|11: Exit;|4:end;|0:|4:end.|
link(onChildHandle,1606663:doAdd,[])
}
Add(MainForm,12519305,28,77)
{
Width=685
Height=472
Caption="1859"
}
Add(StringTable,150237,406,105)
{
Left=130
Top=20
Width=539
Height=413
Align=5
ClearAll=0
Redaction=1
Point(doAddColumn)
}
Add(ListBox,1606663,245,98)
{
Top=20
Width=130
Height=413
Align=1
DataType=1
Point(doSelect)
Point(onSelect)
Point(String)
link(onClick,16163063:doEvent1,[])
}
Add(InlineCode,8093015,336,105)
{
WorkPoints=#19:doGetListViewHeader|16:doGetListViewRow|
EventPoints=#5:onRow|8:onHeader|
DataPoints=#8:inHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,windows,Share,Debug;|0:|5:const|27: HDM_FIRST = $1200;|27: LVM_FIRST = $1000;|36: LVM_GETHEADER = LVM_FIRST + 31;|35: HDM_GETITEMCOUNT = HDM_FIRST + 0;|27: HDI_TEXT = $0002;|27: HDF_STRING = $4000;|2: |35: LVM_GETITEMCOUNT = LVM_FIRST + 4;|1: |4:type|19: HD_ITEM = record|19: Mask: Cardinal;|17: cxy: Integer;|23: pszText: PAnsiChar;|17: hbm: HBITMAP;|24: cchTextMax: Integer;|17: fmt: Integer;|19: lParam: LPARAM;|22: iImage: Integer; |22: iOrder: Integer; |7: end; |2: |4:type|18: LV_ITEM = record|15: mask: UINT;|19: iItem: Integer;|22: iSubItem: Integer;|16: state: UINT;|20: stateMask: UINT;|23: pszText: PAnsiChar;|24: cchTextMax: Integer;|20: iImage: Integer;|19: lParam: LPARAM;|21: iIndent: Integer;|8: end; |1: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: onHeader:THI_Event;|22: onRow:THI_Event;|25: inHandle:THI_Event;|3: |50: procedure GetListViewHeader(ALVHandle: HWND);|47: procedure GetListViewRow(ALVHandle: HWND);|59: procedure doGetListViewHeader(var dt:TData; idx:word);|56: procedure doGetListViewRow(var dt:TData; idx:word);|5: end;|0:|14:implementation|0:|46:function ListView_GetHeader(hwnd: HWND): HWND;|5:begin|51: Result := SendMessage(hwnd, LVM_GETHEADER, 0, 0);|4:end;|0:|52:function Header_GetItemCount(Header: HWnd): Integer;|5:begin|56: Result := SendMessage(Header, HDM_GETITEMCOUNT, 0, 0);|4:end;|0:|79:function Header_GetItem(Header: HWnd; Index: Integer; var Item: HD_ITEM): Bool;|5:begin|76: Result := Bool( SendMessage(Header, HDM_GETITEM, Index, Longint(@Item)) );|4:end;|0:|52:function ListView_GetItemCount(hWnd: HWND): Integer;|5:begin|54: Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);|4:end;|0:|42:procedure THiAsmClass.doGetListViewHeader;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|26: GetListViewHeader(hwnd);|4:end;|0:|39:procedure THiAsmClass.doGetListViewRow;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|23: GetListViewRow(hwnd);|4:end;|0:|57:procedure THiAsmClass.GetListViewHeader(ALVHandle: HWND);|6:const |49: cchTextMax=148; // максимальная длина заголовка|5:var |20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|17: dwCount: DWORD;|17: pszText: PChar;|22: svText: ShortString;|18: HDItem: HD_ITEM;|20: pHDItem: ^HD_ITEM;|29: i, j, nTextLength: Integer;|17: lvHeader: HWND;|14: stmp:string;|5:begin|0:|38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|0:|35: // Получаем количество заголовков|43: dwCount := Header_GetItemCount(lvHeader);|27: if dwCount = 0 then Exit;|0:|25: // Получаем ID процесса|19: dwProcessID := 0;|51: GetWindowThreadProcessId(lvHeader, @dwProcessID);|0:|25: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|0:|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|0:|48: // Выделяем в нем память под текстовый буффер |54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|48: // Выделяем в нем память под структуру HDITEM|59: pHDItem := VirtualAllocEx(hProcess, nil, SizeOf(HD_ITEM),|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@HDItem, SizeOf(HD_ITEM));|26: HDItem.mask := HDI_TEXT;|28: HDItem.pszText := pszText;|34: HDItem.cchTextMax := cchTextMax;|0:|45: // Заполняем информацию о каждом заголовке.|30: for i := 0 to dwCount - 1 do|7: begin|0:|41: // Пишем в память удалённого процесса|57: if not WriteProcessMemory(hProcess, pHDItem, @HDItem,|57: SizeOf(HD_ITEM), dwWriten) then Exit;|0:|30: // Получаем итем заголовка|60: SendMessage(lvHeader, HDM_GETITEM, i, Longint(pHDItem));|0:|23: // Читаем заголовки|36: ZeroMemory(@svText, cchTextMax);|66: if not ReadProcessMemory(hProcess, HDItem.pszText, @svText[1],|54: cchTextMax, dwWriten) then Exit;|22: |30: // Выодим их из переменной|44: _hi_onEvent(onHeader,PChar(@svText[1]));|6: end;|0:|34: // Освобождаем выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pHDItem, 0, MEM_RELEASE);|0:|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|0:|54:procedure THiAsmClass.GetListViewRow(ALVHandle: HWND);|5:const|17: cchTextMax=255;|3:var|20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|32: LVItemCount, dwCount: Integer;|29: i, j, nTextLength: Integer;|20: pLVItem: ^LV_ITEM;|18: LVItem: LV_ITEM;|17: pszText: PChar;|22: svText: ShortString;|14: sTmp:string;|17: lvHeader: HWND;|5:begin|29: if ALVHandle = 0 then Exit;|30: // Получаем количество строк|52: LVItemCount := ListView_GetItemCount(ALVHandle); |38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|35: // Получаем количество заголовков|44: dwCount := Header_GetItemCount(lvHeader); |2: |62: // Получаем ID процесса, которому принадлежит найденное окно|19: dwProcessID := 0;|52: GetWindowThreadProcessId(ALVHandle, @dwProcessID);|24: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|47: // Выделяем в нем память под текстовый буффер|54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|47: // Выделяем в нем память под структуру LVITEM|59: pLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM),|81: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@LVItem, SizeOf(LV_ITEM));|27: LVItem.mask := LVIF_TEXT;|28: LVItem.pszText := pszText;|34: LVItem.cchTextMax := cchTextMax;|0:|21: // Считываем строки|34: for i := 0 to LVItemCount - 1 do|7: begin|25: LVItem.iSubItem := 0;|44: // Пишем ее в память удаленного процесса|57: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|54: SizeOf(LV_ITEM), dwWriten) then Exit;|58: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|52: i, Integer(pLVItem));|23: // Читаем результат|36: ZeroMemory(@svText, cchTextMax);|59: ReadProcessMemory(hProcess, LVItem.pszText, @svText[1],|46: nTextLength, dwWriten);|4: |35: sTmp := ''; |42: sTmp := PChar(@svText[1]); |0:|22: //Считываем столбцы|31: for j := 1 to dwCount - 1 do|9: begin|27: LVItem.iSubItem := j;|46: // Пишем ее в память удаленного процесса|59: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|69: SizeOf(LV_ITEM), dwWriten) then Exit;|60: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|54: i, Integer(pLVItem));|25: // Читаем результат|38: ZeroMemory(@svText, cchTextMax);|49: ReadProcessMemory(hProcess, LVItem.pszText,|59: @svText[1], nTextLength, dwWriten);|26: // добавляем столбцы|45: sTmp := sTmp + ';' + PChar(@svText[1]);|8: end;|29: _hi_onEvent(onRow, sTmp);|6: end;|0:|40: // Освобождаем ранее выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pLVItem, 0, MEM_RELEASE);|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|4:end.|
link(onRow,150237:doAdd,[])
link(onHeader,150237:doAddColumn,[(375,118)(375,132)])
link(inHandle,1606663:String,[(342,96)(293,96)(293,145)(272,145)])
}
Add(Hub,16163063,308,105)
{
link(onEvent1,8093015:doGetListViewHeader,[])
link(onEvent2,8093015:doGetListViewRow,[])
}
Add(Button,14859511,77,77)
{
Left=255
Top=210
Align=2
link(onClick,1534934:doEvent1,[])
}
Add(Hub,1534934,133,77)
{
OutCount=3
link(onEvent1,150237:doClear,[(382,83)(382,118)])
link(onEvent2,1606663:doClear,[(221,90)(221,111)])
link(onEvent3,9129846:doFindSysListView32,[(172,97)(172,104)])
}


--- Добавлено в 2021-10-17 14:29:31

atutunnik94 писал(а):
Вот пишет такие подсказки, просто, все варианты перебранные нами, возвращают пустые строки.

У меня тоже самое. Это просто сообщения о неиспользуемых переменных.

Редактировалось 1 раз(а), последний 2021-10-17 14:29:31
карма: 5

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)