Ver Mensaje Individual
  #8  
Antiguo 18-12-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por yelian Ver Mensaje
Otra duda es posible saber el titulo de otra aplicacion , es decir el titulo de un juego por ejemplo...
Pues sí. Es sencillo si conoces el HANDLE de la ventana principal o la clase de la misma, siempre que sea única o específica de la aplicación y esté registrada.

Código:
GetWindowText(hWnd, AppTitle, sizeof(AppTitle)-1);
Si no conoces nada más que el nombre del ejecutable, es mas complicado pero también se puede te pongo este ejemplo:
Código:
// Encuentra el título de la aplicación que primero encuentre del notepad.exe
// Podrás adaptarlo para otros exename e incluso para todos los procesos abiertos de ese exemane.   
HANDLE GetWindowFromProcessId(DWORD ProcessId, char* WindowName);
DWORD GetProcessId(char* ExeName);

DWORD Pid = GetProcessId("notepad.exe");
HANDLE hWnd = GetWindowFromProcessId(Pid, 0);
char AppTitle[256]; // El titulo buscado
GetWindowText(hWnd, AppTitle, sizeof(AppTitle)-1);
Funciones usadas:
Código:
DWORD GetProcessId(char* FileName)
{
   DWORD Result = 0;
   PROCESSENTRY32 proc = { sizeof(proc) };
   HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
   if(hSysSnapshot != reinterpret_cast<HANDLE>(-1) && Process32First(hSysSnapshot, &proc)){
     do{
        if(!stricmp(proc.szExeFile, FileName)){
           Result = proc.th32ProcessID;
        }
     }while(Process32Next(hSysSnapshot, &proc));
   }
   CloseHandle(hSysSnapshot);
   return Result;
}
y
Código:
//---------------------------------------------------------------------------
// Traducción y adaptación a C++ del código de seoane
//---------------------------------------------------------------------------
struct TWindowRec{
   HANDLE Handle;
   DWORD  ProcessId;
   char*  WindowName;
};

BOOL CALLBACK EnumWindowsProc(HANDLE Handle, LPARAM lParam)
{
  DWORD ProcessId;
  char* Buffer;
  int   Size;

  bool Result = true;
  ProcessId = 0;
  GetWindowThreadProcessId(Handle, &ProcessId);
  if(ProcessId == ((TWindowRec*)(lParam))->ProcessId){
    if(((TWindowRec*)(lParam))->WindowName != 0){
      Size = GetWindowTextLength(Handle) + 1;
      Buffer = new char[Size];
      try{
        GetWindowText(Handle, Buffer, Size);
        if(stricmp(((TWindowRec*)(lParam))->WindowName, Buffer) == 0){
          ((TWindowRec*)(lParam))->Handle = Handle;
          Result = false;
        }
      }
      __finally{
        delete Buffer;
      }
    }else{
      ((TWindowRec*)(lParam))->Handle = Handle;
      Result = false;
    }
  }
  return Result;
}

typedef BOOL (__stdcall *TP)();
HANDLE GetWindowFromProcessId(DWORD ProcessId, char* WindowName)
{
  TWindowRec WindowRec;

//  setmem(&WindowRec, sizeof(WindowRec), 0);
  WindowRec.ProcessId = ProcessId;
  WindowRec.WindowName = WindowName;
  EnumWindows((TP)EnumWindowsProc, LPARAM(&WindowRec));
  return WindowRec.Handle;
}
Saludos.

Última edición por escafandra fecha: 18-12-2008 a las 08:19:07.
Responder Con Cita