Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
4-1107175604
mbIkola
2005-01-31 15:46
2005.03.13
Как определить факт закрытия сессии в терминальном режиме.


1-1109510549
Bogdan
2005-02-27 16:22
2005.03.13
Как заменить символы на *


1-1109423831
Генри
2005-02-26 16:17
2005.03.13
Правильная растановка символов


1-1109184659
tUUm
2005-02-23 21:50
2005.03.13
Сервис запускается но неработает.


1-1109604044
hgd
2005-02-28 18:20
2005.03.13
Функция playsound





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский