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