![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.12.2012
Сообщений: 11
|
![]()
Ооочень срочно надо, помогите пожалуйста!вывести на экран список окон верхнего уровня и у каждого окна указать какому процессу оно принадлежит(в delphi)
Последний раз редактировалось kat308; 19.12.2012 в 18:05. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 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. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |