Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Как по процессу узнать заголовок окна?   Найти похожие ветки 

 
grigory ©   (2005-02-01 13:17) [0]

Подскажите,можно ли зная имя процесса, узнать заголовок окна!
Например процесс outlook.exe может иметь различные заголовки, в зависимости от версии и от того какая папка активирована!
"Входящие.." "Аутлук сегодня.."


 
Kerk ©   (2005-02-01 13:24) [1]

Как ты узнаешь у какого окна процесса узнавать заголовок?


 
VsInLg   (2005-02-01 13:24) [2]

unit RDapi;

interface

uses Windows;

type

 TPROCESSENTRY32 = packed record
   dwSize: DWORD;
   cntUsage: DWORD;
   th32ProcessID: DWORD;       // this process
   th32DefaultHeapID: DWORD;
   th32ModuleID: DWORD;        // associated exe
   cntThreads: DWORD;
   th32ParentProcessID: DWORD; // this process"s parent process
   pcPriClassBase: Longint;    // Base priority of process"s threads
   dwFlags: DWORD;
   szExeFile: array[0..MAX_PATH - 1] of Char;// Path
 end;

 TCreateToolhelp32Snapshot = function (dwFlags, th32ProcessID: DWORD): THandle stdcall;
 TProcess32First = function (hSnapshot: THandle; var lppe: TProcessEntry32): BOOL stdcall;
 TProcess32Next = function (hSnapshot: THandle; var lppe: TProcessEntry32): BOOL stdcall;

 function GetWindowsVer:Shortint;
 function GetAppExeName(WndHWND:Cardinal):string;
 function GetAppExeNameNT(WndHWND:Cardinal):string;
 function GetAppExeName9X(WndHWND:Cardinal):string;
implementation

const

 kernel32 = "kernel32.dll";

var

 CreateToolhelp32Snapshot:TCreateToolhelp32Snapshot;

{ function GetWindowsVer:Shortint Определяет текущую версию Виндовоза.
 Возвращает одно из следующих значений:
  0 - Win 9x/me
  1 - Win на основе NT (NT 4, W2K, WinXP, Win2003)
 -1 - Другая версия Виндовоза (скорее всего Win 3.1 либо что-то похожее)}

function GetWindowsVer:Shortint;
var
 OsVer:_OSVERSIONINFOA;
begin
OsVer.dwOSVersionInfoSize:=SIZEOF(_OSVERSIONINFOA);
if GetVersionEx(OsVer) then
 case OsVer.dwPlatformId of
   VER_PLATFORM_WIN32_WINDOWS: Result:=0;
   VER_PLATFORM_WIN32_NT: Result:=1;
  else
   Result:=-1;
 end;
end;

{function GetAppExeName(WndHWND:Cardinal):string возвращает полное название
 имени файла просесса с которым связанно окно WndHWND независимо от платформы
 (Win 9.x/ME, Win2k, WinXP)}

function GetAppExeName(WndHWND:Cardinal):string;
var
 AppExeName:string;
begin
 case GetWindowsVer of
   0:
   begin
    AppExeName:=GetAppExeName9X(WndHWND);
    if AppExeName="" then
     Result:="ExeName not detected";
   end;
   1:
   begin
    AppExeName:=GetAppExeNameNT(WndHWND);
    if AppExeName="" then
     Result:="ExeName not detected";
   end;
 end;
 Result:=AppExeName;
end;

{function GetAppExeNameNT(WndHWND:Cardinal):string [WinNT only]
Определяет полное название имени файла процесса
с которым связанно окно WndHWND.}

function GetAppExeNameNT(WndHWND:Cardinal):string;
var
 KernelHandle,PID,HSnap:Cardinal;
 pe32:TPROCESSENTRY32;
 ModName:array[0..MAX_PATH] of Char;
 CreateToolhelp32Snapshot:TCreateToolhelp32Snapshot;
 Process32First:TProcess32First;
 Process32Next:TProcess32Next;
begin
KernelHandle:=GetModuleHandle(kernel32);
@CreateToolhelp32Snapshot:=GetProcAddress(KernelHandle,"CreateToolhelp32Snapshot");
@Process32First:=GetProcAddress(KernelHandle,"Process32First");
@Process32Next:=GetProcAddress(KernelHandle,"Process32Next");

Result:="";

if GetWindowThreadProcessId(WndHWND,@PID)=0 then
 Exit;
hSnap:=CreateToolhelp32Snapshot(2,PID);
if hSnap=DWord(-1) then
 Exit;
pe32.dwSize:=sizeof(TPROCESSENTRY32);
if Process32First(HSnap,pe32) then
 if GetModuleFileName(pe32.th32ModuleID,ModName,MAX_PATH)<>0 then
  Result:=String(ModName);
CloseHandle(HSnap);

end;

{function GetAppExeName9X(WndHWND:Cardinal):string [Win9x/ME only]
Определяет полное название имени файла процесса
с которым связанно окно WndHWND.}

function GetAppExeName9X(WndHWND:Cardinal):string;
var
 pe32:TPROCESSENTRY32;
 KernelHandle,PID,hSnap:Cardinal;
 CreateToolhelp32Snapshot:TCreateToolhelp32Snapshot;
 Process32First:TProcess32First;
 Process32Next:TProcess32Next;
begin
KernelHandle:=GetModuleHandle(kernel32);
@CreateToolhelp32Snapshot:=GetProcAddress(KernelHandle,"CreateToolhelp32Snapshot");
@Process32First:=GetProcAddress(KernelHandle,"Process32First");
@Process32Next:=GetProcAddress(KernelHandle,"Process32Next");

Result:="";
if GetWindowThreadProcessId(WndHWND, @PID)=0 then
 exit;
hSnap:=CreateToolhelp32Snapshot(2,PID);
if hSnap=DWord(-1) then
 exit;
pe32.dwSize:=sizeof(TPROCESSENTRY32);
if Process32First(hSnap,pe32) and (PId=pe32.th32ProcessID) then
begin
  Result:=pe32.szExeFile;
  CloseHandle(hSnap);
  exit;
end;
while (Process32Next(hSnap, pe32)) and (PID<>pe32.th32ProcessID) do;
if PId=pe32.th32ProcessID then
 Result:=pe32.szExeFile;
CloseHandle(hSnap);
end;

end.


 
grigory ©   (2005-02-01 13:29) [3]


> Kerk ©   (01.02.05 13:24) [1]
> Как ты узнаешь у какого окна процесса узнавать заголовок?

:)) а разве не я это спросил?
я так понимаю..что то окно, которое активировано в данный момент!


 
Digitman ©   (2005-02-01 13:35) [4]


> я так понимаю..что то окно, которое активировано в данный
> момент!


а нахрена тебе тогда "имя процесса", спрашивается ?

есть активное (переднеплановое, например, и имеющее фокус ввода) окно.. нафих имя процесса-то ? и без него как-нть обойдется, думаю) ..


 
grigory ©   (2005-02-01 13:39) [5]

нет..не совсем! Ну вот у аутлука это "Входящие", "исходящие", "удаленные" и т.д. Заголовок каждый раз разный, в зависимости от того что там выбрали! А он может быть свернут, и совсем даже неактивным!


 
Digitman ©   (2005-02-01 13:47) [6]


> grigory ©   (01.02.05 13:39) [5]


ты вообще-то осознаешь, что в ходе работы процесса может быть создано БОЛЕЕ ЧЕМ ОДНО ОКНО ?

и при этом спрашивается, заголовок КАКОГО КОНКРЕТНО окна из более чем одного созданного в контексте дан.процесса ты хочешь поиметь ?


 
Eraser ©   (2005-02-01 15:59) [7]

grigory ©
Тебе надо решать обратную задачу: по дескриптору окна узназнать дескриптор процесса, и его имя.
Вчера на этом форуме обсуждалось...



Страницы: 1 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1109714823
Shnabs
2005-03-02 01:07
2005.03.13
Графика


3-1108026505
Brain Force
2005-02-10 12:08
2005.03.13
Получение результатов выполнения запроса в список


8-1101267734
DDDeN
2004-11-24 06:42
2005.03.13
Проиграть mp3 через DirectSound


1-1109412325
webpauk
2005-02-26 13:05
2005.03.13
Определение имени переменной


1-1109678219
Doxygen
2005-03-01 14:56
2005.03.13
Файл или директория