Вверх ↑
Ответов: 52
Рейтинг: 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