Cita:
Empezado por yelian
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.