Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Auslesen eines Klassenname aus Processhandle

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.10.2002, 08:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
wie kann man den Klassenname eines Fensters auslesen, wenn man nur das/den Processhandle hat?
Ich bräuchte den Klassennamen da er mir mit FindWindow das Fenster nicht findet ohen Klassenname ...

Oder kann man aus dem ProcessHandle einfacher das FensterHandle rauslesen?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.10.2002, 09:34 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Er findet das Fenster mit FindWindow() ohne Klassenname? Wie kann das sein?
Brauchst Du das für verschiedene Klassen oder nur für eine, d.h. brauchst Du das zur Laufzeit oder musst Du nur einmal den Klassennamen hearusfinden?
Wenn Du nur die Klassennamen aller Fenster haben willst die offen sind hilft vielleicht das hier:


C++:
#include <windows.h>
#include <string>
#include <stdio.h>

int main(void)
{
  std::string names;
  HWND w=FindWindowEx(NULL, NULL, NULL, NULL);
  char caption[512];
  while(w)
  {
    GetWindowText(w, caption, 512);
    w=GetNextWindow(w, GW_HWNDNEXT);
    names+=caption;
    names+='@';
    GetClassName(w, caption, 512);
    names+=caption;
    names+='\n';
  }

  FILE *f=fopen("c:/temp/dump.txt", "w");
  if(!f)
    return(1);
  fprintf(f, "%s", names.c_str());
  fclose(f);

  return(0);
}



Sonst formulier Dein Ziel doch noch mal etwas anders.

Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.10.2002, 10:45 Uhr
Tobi



hast du auch die ID vom Prozess? Dann hät ich da nämlich was!
--
Mit Computern können wir Probleme lösen die wir ohne sie gar nicht erst hätten!

mfg

Tobi

Dieser Post wurde am 26.10.2002 um 11:02 Uhr von Tobi editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.10.2002, 15:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ich hab auch die Id des Prozesses ... schliesslich starte ich ihn selbst
Ich bräuchte eigentlich nur einmal den Klassenname, damit eben FindWindow funktioniert, ich weiß im moment nur den Fenstertitel ...

Ich möchte nämlich nachrichten an das Fenster senden, welche ich per Keyboardhook abgefangen habe, da irgendwie bei dem Spiel Wiggles DirectInput bei den Num+/- Tasten streikt ...

Den Hook einzurichten ist kein Problem, nur ich bräuchte das Fensterhandle...

void* deinen Vorschlag probier ich mal aus ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.10.2002, 17:21 Uhr
Tobi



also ich würds so machen

Code:
#define TITEL _T("Fenster")

DWORD process;//Process-ID
char klasse[MAX_PATH+1];//Fenster-Klasse

BOOL CALLBACK wnd(HWND hwnd,LPARAM)
{
DWORD id;
GetWindowThreadProcessId(hwnd,&id);
char title[MAX_PATH];
GetWindowText(hwnd,title,MAX_PATH);
if(id==process&&GetParent(hwnd)==NULL&&strcmp(title,TITEL)==0)
{
GetClassName(hwnd,klasse,MAX_PATH);
return FALSE;
}
return TRUE;
}

bool GetWindow(DWORD pid)
{
process=pid;
return EnumWindows(wnd,NULL);
}



musste halt n bisschen umbaun...

aber wenn du SendMessage benutzen willst, warum machst du dann nicht einfach

Code:
::SendMessage(GetForegroundWindow(),WM_KEYDOWN,...);



ich denke mal das Spiel ist auf jeden Fall im Vordegrund!
--
Mit Computern können wir Probleme lösen die wir ohne sie gar nicht erst hätten!

mfg

Tobi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.10.2002, 22:48 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat:
Tobi postete

aber wenn du SendMessage benutzen willst, warum machst du dann nicht einfach

C++:
::SendMessage(GetForegroundWindow(),WM_KEYDOWN,...);



ich denke mal das Spiel ist auf jeden Fall im Vordegrund!



Man manchmal steht man wirklich aufm Schlauch ...
Immer wenn man um 3 Ecken denkt, denkt man nicht mehr ans einfachste
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: