Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 17:54   #1
kat308
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 11
По умолчанию windows list

Ооочень срочно надо, помогите пожалуйста!вывести на экран список окон верхнего уровня и у каждого окна указать какому процессу оно принадлежит(в delphi)

Последний раз редактировалось kat308; 19.12.2012 в 18:05.
kat308 вне форума Ответить с цитированием
Старый 19.12.2012, 23:01   #2
kat308
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 11
По умолчанию

скажите что неправильно???и если можно пример программки
program winlist;
uses
Windows,
Messages,
SysUtils,strutils,classes;

const
WndClass = 'TWindow';
WndCaption = ' Windows List';

var
listbox : HWND;

function GetProcessImageFileName(hProcess:TH andle; lpImageFileName:LPTSTR; nSize:DWORD):DWORD; stdcall;
external 'PSAPI.dll' name 'GetProcessImageFileNameW';
function GetProcessFileName(PID : DWORD) : string;
var
Pr : THandle;
PrName : array[0 .. MAX_PATH] of Char;
begin
Pr := OpenProcess(PROCESS_QUERY_INFORMATI ON, False, PID);
if Pr <> 0 then
begin
if GetProcessImageFileName(Pr, @PrName, MAX_PATH) = 0 then
begin
MessageBox(0, PChar(SysErrorMessage(GetLastError) ), 'Error !', MB_ICONERROR or MB_OK);
Exit;
end;
Result := ExtractFileName(PrName);
CloseHandle(Pr);
end;
end;
function listwindows (Wd: HWnd; Param: LPARAM): Bool; stdcall; // Обязательно stdcall !!!
Var
Nm:Array[0..max_path] of Char; // буфер для имени
Cs: Array[0..max_path] of Char; // буфер для класса
s : string;
PID : DWORD; //символ обозначающий, что окно минимизиравано
Begin
if IsWindowVisible(Wd) then
GetClassName(Wd,Cs,max_path); // считываем название класса окна
SendMessage(Wd, WM_GETTEXT, MAX_PATH, LPARAM(@Cs));
GetWindowThreadProcessId(Wd, PID);
s := Format('Class = %s, Name = %s, PID = %d, Process : %s',
[Cs, Nm, PID, GetProcessFileName(PID)]);
SendMessage(listbox, LB_ADDSTRING, 0, lparam(@s[1]));
Result := TRUE;
end;

function WinPr(Wnd : HWND; Msg, wParam, lParam : Integer) : Integer ; stdcall;
begin
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
Exit;
end;
else
Result := DefWindowProc(Wnd, Msg, wParam, lParam)
end;
end;

var
Wnd : HWND;
WC : TWndClassEx;
Msg : TMsg;
begin
FillChar(WC, SizeOf(TWndClassEx), 0);
WC.cbSize := SizeOf(WC);
WC.style := CS_HREDRAW or CS_VREDRAW;
WC.lpfnWndProc := @WinPr;
WC.hInstance := hInstance;
WC.hIcon := LoadIcon(0, IDI_APPLICATION);
WC.hCursor := LoadCursor(0, IDC_ARROW);
WC.hbrBackground := COLOR_WINDOW;
WC.lpszMenuName := NIL;
WC.lpszClassName := WndClass;

RegisterClassEx(WC);

Wnd := CreateWindowEx(0, WndClass, WndCaption, WS_OVERLAPPEDWINDOW,
250, 60, 800, 200, 0, 0, hInstance, NIL);
ShowWindow(Wnd, SW_SHOWNORMAL);

listbox := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', LBS_STANDARD or WS_VISIBLE,
0, 0, 790, 160, Wnd, 0, hInstance, NIL);
SendMessage(listbox, WM_SETFONT, WPARAM(GetStockObject(DEFAULT_GUI_F ONT)), 1);
EnumWindows(@listwindows, LPARAM(0));

while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;

end.
kat308 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# list bpystep Помощь студентам 1 29.04.2012 20:35
[c++][list] Порядок обработки двух list Padavan Помощь студентам 1 10.05.2011 14:56
list in list Cpluser Общие вопросы .NET 1 28.10.2010 02:38
List<> Cpluser Общие вопросы .NET 3 20.03.2010 15:02
List yurik1 Общие вопросы C/C++ 1 06.05.2008 16:34