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

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

Как получить данные из чужого контрола?


Страницы:   1 2

maxistent ©   (2006-08-15 00:00:00) 

Привет всем! Не знаю, куда отнести этот вопрос, так что пишу сюда. В Win 2000/XP есть такая вещь, как диспетчер задач. В нем на вкладке Процессы есть контрол, очень похожий на TListView. Я могу получить его хэндл:

...
var
w1:hwnd;
...
begin
w1:=FindWindow(nil,PChar(Диспетчер задач Windows'));
w1:=FindWindowEX(w1,0,'#32770','');
w1:=FindWindowEX(w1,0,PChar('SysListView32'),nil);
...
end;


Как мне теперь из этого контрола "вытянуть" данные? (кол-во строк/столбцов, заголовки столбцов, и, собственно, данные из ячеек)
Т.е. мне нужно создать на своей форме такой же контрол (а не его изображение) - объект TListView со свойством ViewStyle=vsReport - с теми же данными.

Буду очень признателен за помощь. С уважением, maxistent.


GrayFace   (2006-09-08 15:25:00) [1]

Сергей М. ©   (25.08.06 19:10) [28]
Говорю, суй с формой и все будет работать. АП тут не при чем.


Сергей М.   (2006-08-25 19:10:00) [2]


> GrayFace ©   (25.08.06 18:50) [27]


Ой)

А форма - она, конечно, не контрол)

"Упалпацтул" (С) Ат падонкафф


GrayFace   (2006-08-25 18:50:00) [3]

Rouse_ ©   (15.08.06 10:35) [4]
+ для Win9x вместо VirtualAllocEx создавать MMF.

Сергей М. ©   (17.08.06 8:40) [25]
Только работать твоконтрол не будет при этом. Нужно внедрять код контрола в АП того процесса, который создал то самое окно.

Сувать вместе с формой и будет счстье.


maxistent   (2006-08-22 02:29:00) [4]


> Сергей М. ©   (17.08.06 08:40) [25]


Понятно.

Ладно, всем ОГРОМНОЕ спасибо за помощь! Терь, думаю, ветку можно прикрыть.


Сергей М.   (2006-08-17 08:40:00) [5]

Засунуть-то проще простого - установи у своего контрола св-во ParentWindow равным значению хэндла того самого окна.
Только работать твоконтрол не будет при этом. Нужно внедрять код контрола в АП того процесса, который создал то самое окно.


maxistent   (2006-08-16 21:37:00) [6]

Ну типа имеется хэндл какого-то окна... Вот. В это какое-то (! ЧУЖОЕ !) окно "засунуть" свой контрол, например кнопку или поле ввода (TEdit). Как это сделать?


Сергей М.   (2006-08-16 12:33:00) [7]


> контрольный в голову: Можно ли создавать СВОИ контролы НА
> ЧУЖИХ?
>


"НА" - это как ?)


maxistent   (2006-08-16 12:19:00) [8]


> Rouse_ ©   (16.08.06 10:09) [19]

Благодарю за помощь!!! Терь буду знать, к кому обращаться :-)


> А что ж ты тогда в [5] "русским по белому" кричал, что список задач тебя не интересует, а ?)

Да ладно вам! Не кипятитесь. :-) Просто я сначала хотел сделать что-то вроде Диспетчера задач, потом заинтересовался задачей вытягивания инфы из других окон. Ещё раз спасибо Роузу за исходничОк!!! А терь контрольный в голову: Можно ли создавать СВОИ контролы НА ЧУЖИХ?


Rouse_   (2006-08-16 11:26:00) [9]


> "русским по белому" кричал

:))))))))))))))))


Сергей М.   (2006-08-16 10:19:00) [10]


> maxistent ©   (15.08.06 23:01) [18]


А что ж ты тогда в [5] "русским по белому" кричал, что список задач тебя не интересует, а ?)


Rouse_   (2006-08-16 10:09:00) [11]

Можно, пример у меня на сайте: http://rouse.front.ru/taskmon.zip


maxistent   (2006-08-15 23:01:00) [12]


> begin...end ©   (15.08.06 21:12) [17]

Я пробовал - не получается. Прога вылетает, не успевая ничего сказать. :-(

А есть ли способ получить инфу о процессах так, как это делает тот же Диспетчер задач, т.е. Имя процесса, Имя пользователя, ЦП, Память (столбцы по умолчанию)? И при этом не использовать сам Диспетчер задач? Если да, то лучше подскажите как ЭТО сделать.


begin...end   (2006-08-15 21:12:00) [13]

> maxistent ©   (15.08.06 21:01) [16]

> Мне нужно получить те строки, которые находятся в остальных
> столбцах!

Для этого перед посылкой LVM_GETITEMTEXT следует присваивать полю lviRemoteLVItem.iSubItem номер столбца (считая с нуля).


maxistent   (2006-08-15 21:01:00) [14]


> Rouse_ ©   (15.08.06 13:35) [6]


Используя приведенный тобой код я получаю список ярлыков (ну или список процессов из диспетчера задач, т.е. ТОЛЬКО ПЕРВЫЙСТОЛБЕЦ объекта TListView, если его свойство ViewStyle=vsReport). Их я могу получить более упрощенным способом :-) Мне нужно получить те строки, которые находятся в остальных столбцах!  Т.е. полностью скопировать данные оттуда в свой объект TListView. И совсем не обязательно использовать Диспетчер задач! Это только для проверки, т.к. у него свойство ViewStyle=vsReport, а мне, собственно, это и нужно. Так как мне ЭТО сделать?


Медведъъ   (2006-08-15 16:26:00) [15]

ПС
господа власть имущие не утомились медведов регистрировать ?


Медведъъ   (2006-08-15 16:24:00) [16]

автор читай рихтера
http://c100.rusbook.biz/item_8283.html
а тупо передирая код роуза обезьяне будешь подобен


Rouse_   (2006-08-15 14:53:00) [17]

Ооопс, вот на эту строку не обратил внимания. Сенькс, учтем.


begin...end   (2006-08-15 14:31:00) [18]

> Rouse_ ©   (15.08.06 14:29) [11]

Я вот о чём:

If the LVIF_TEXT flag is set in the mask member of the LVITEM structure, the pszText member must point to a valid buffer and the cchTextMax member must be set to the number of characters in that buffer. Applications should not assume that the text will necessarily be placed in the specified buffer. The control may instead change the pszText member of the structure to point to the new text, rather than place it in the buffer.


Rouse_   (2006-08-15 14:29:00) [19]

Да тут роли не играет, согласен :)


begin...end   (2006-08-15 14:19:00) [20]

> Rouse_ ©   (15.08.06 13:35) [6]

> ReadProcessMemory(hProcess, pszText, @svText[1], nTextLength,
> dwBytesWriten);

Только читать, ИМХО, лучше не из pszText, а по тому адресу, который находится в lviRemoteLVItem.pszText после посылки сообщения.


Страницы:   1 2

Наверх

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