You are on page 1of 6

Iniciar sesin

Buscar...

Comunidad Delphiaccess

Foros

Miembros

Chat

Calendario

Crear una cuenta

En este tema

Contenido nuevo

Comunidad DelphiAccess PROGRAMACIN API

Obtener el Window Handle de un Proceso?


Comenzado por c0lo , Mar 10 2010 08:13 AM
Por favor identifcate para responder

3 respuestas en este tema

c0lo

#1

Advanced Member

Escrito 10 March 2010 - 08:13 AM

Bueno ocurre que tengo una aplicacion que no tiene Caption... o titulo en si... lo cual no puedo usar
1. WHandle := FindWindow(nil, 'Caption');
Miembro Platino
241 mensajes
Location Lima-Peru

Ahora ocurre que si se la clase pero si en una PC o cliente X hay una clase similar... e ahi un problemita...
Lo que quiero es obtener el Window Handle de un Proceso cualquiera..
Sabiendo el nombre del proceso.. obtener el Handle .. se que para un proces existe X Windows Handle pero para un
Window Handle solo existe un proceso...

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Como puedo obtener la solucion?


Gracias

Disculpen si no me expreso correctamente, pero se me chispoteo...


Reportar

c0lo

#2

Advanced Member

Escrito 10 March 2010 - 08:28 AM

Ahora indagando un poco mas... y analizando mas..


Encontre una web china o koreana..
Miembro Platino
241 mensajes

http://www.delphitop...ncheng/219.html
http://delphi.ktop.c...id=79&tid=61654

Location Lima-Peru

Program NameProcess IDWindow HandleProcess Handle


TerminateProcess=> Process Handle
PostMessage,SendMessage=> Window Handle
1. // Get ProcessID By ProgramName (Include Path or Not Include)
2. function GetPIDByProgramName(const APName: string): THandle;
3. // Get Window Handle By ProgramName (Include Path or Not Include)
4. function GetHWndByProgramName(const APName: string): THandle;
5. // Get Window Handle By ProcessID

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

6. function GetHWndByPID(const hPID: THandle): THandle;


7. // Get ProcessID By Window Handle
8. function GetPIDByHWnd(const hWnd: THandle): THandle;
9. // Get Process Handle By Window Handle
10. function GetProcessHndByHWnd(const hWnd: THandle): THandle;
11. // Get Process Handle By Process ID
12. function GetProcessHndByPID(const hAPID: THandle): THandle;

Ahora cual es el que corresponde correctamente al handle devuelto por FindWindow


Process Handle o Window Handle
Disculpen si no me expreso correctamente, pero se me chispoteo...
Reportar

escafandra
Advanced Member

#3
Escrito 10 March 2010 - 09:51 AM

Hola c0lo, haca tiempo que no pasabas por aqu.


En primer lugar, he de decirte que por el nombre del proceso puedes encontrar mas de uno, es decir, pueden correr
Moderadores
2895 mensajes
Location Madrid - Espaa

mas de una instancia de un proceso o procesos con nombres similares. Debers saber cual es el que te interesa.
Mejor sera conociendo el Pid del proceso que te interesa, pues es un identificador nico.
Para conseguir lo que quieres sabiendo slo el nombre de un proceso, primero debes buscar el Pid del proceso. En
el ejemplo nos conformamos con el primero que encontremos. Despus enumeramos todas las ventanas hasta
encontrar una que pertenezca al proceso en cuestin y de esta calculamos su parent ltimo:
1.
2. struct WINDATA{

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

3.

HWND

hWin;

4.

DWORD ProcessId;

5. };
6.
7. BOOL CALLBACK EnumWindowsProc(HANDLE Handle, WINDATA* Data)
8. {
9.

DWORD ProcessId;

10.

GetWindowThreadProcessId(Handle, &ProcessId);

11.

if(Data->ProcessId == ProcessId){

12.

Data->hWin = Handle;

13.

return false;

14.

15.

return true;

16. }
17.
18. HWND GetWindow(char* FileName)
19. {
20.

// Encontrar una ventana del proceso

21.

WINDATA Data = {0};

22.

PROCESSENTRY32 proc = { sizeof(proc) };

23.

HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

24.

if(hSysSnapshot != INVALID_HANDLE_VALUE && Process32First(hSysSnapshot, &proc)){

25.

do{

26.

if(!stricmp(proc.szExeFile, FileName)){

27.

Data.ProcessId = proc.th32ProcessID;

28.

EnumWindows((PROC)EnumWindowsProc, LPARAM(&Data));

29.

break;

30.

31.

open in browser PRO version

}while(Process32Next(hSysSnapshot, &proc));

32.

33.

CloseHandle(hSysSnapshot);

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

34.
35.

// Encontar MainWindow

36.

HWND hParent = Data.hWin;

37.

do {

38.

Data.hWin = hParent;

39.

hParent = GetParent(Data.hWin);

40.

}while(hParent);

41.
42.

return Data.hWin;

43. }
44.
Ejemplo de uso:
1.
2. HWND hW = GetWindow("Notepad.exe");
3.
Espero que te aclare las ideas.
Saludos.
Reportar

c0lo
Advanced Member

open in browser PRO version

#4
Escrito 10 March 2010 - 09:55 AM

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Muchas gracias escafandra y si ya me despejastes mis dudas amigo


Disculpen si no me expreso correctamente, pero se me chispoteo...
Miembro Platino
241 mensajes
Location Lima-Peru
Reportar

Volver a API

Like

Comunidad DelphiAccess PROGRAMACIN API


Cambiar tema visual

Espaol (ES)

open in browser PRO version

Ayuda

Are you a developer? Try out the HTML to PDF API

Privacy Policy
Community Forum Softw are by IP.Board 3.4.7

pdfcrowd.com

You might also like