Fremden,aktiven Anwendungsnamen auslesen
-
Hallo zusammen,
ich möchte von der aktuellen Anwendung (z.B. Internet Explorer) den Namen auslesen und den dann in einem Label ausgeben.bisher habe ich folgendes versucht:
HWND hwnd = GetCurrentProcess();
weil ich die Hilfe von GetCurrentProcess() so interpretiert habe, dass man ein pseudohandle vom Aktuellen Prozess (dem IExplorer) bekommt und mir dann gedacht habe, den Procesnamen auszulesen.
Nur finde ich keine Funktion wie z.B. GetProcessName(*void); oder so was in der Art.
Könnt ihr mir helfen?
Danke!
J0
-
Verschoben nach "WinAPI".
-
Was genau meinst du denn mit Name der Anwendung?!
[ Dieser Beitrag wurde am 09.03.2003 um 20:40 Uhr von flenders editiert. ]
-
Am besten währe die Caption, aber wenn das kompliziert ist, dann lieber nur den 'Namen' (IEFrame).
Danke,
J0
-
Ich glaube dann bist du auf der falschen Spur
Versuch's mal so:
Zuerst mit GetForegroundWindow ein Handle auf das Fenster besorgen, das sich gerade im Vordergrund befindet und anschließend mit GetWindowText die Bescriftung der Titelleiste (den Text meinst du doch, oder?) holen
Ist nicht getestet! Es kann also sein, dass es so auch nicht funktioniert
-
Du könntest auch folgendes probieren:
AnsiString FindIE ( void ) { HANDLE hProcessSnap = NULL; PROCESSENTRY32 pe32 = { 0 }; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return (false); pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hProcessSnap, &pe32)) { do { // IExplorer suchen if ( !strcmpi ( pe32.szExeFile, "IEXPLORE.EXE" ) ) { CloseHandle (hProcessSnap); // hier gibst Du den Fensternamen oder // was auch immer einfach zurück an die // aufrufende Funktion } } while (Process32Next(hProcessSnap, &pe32)); } else return ""; return ""; }
Ich hab das jetzt aus ner Anwendung von mir genommen.
Ich habs im Überfliegen etwas angepasst, aber da steckt immer noch VCL-Kram drin (AnsiString). Wenn Du noch n bissl dran feilst, dann könnte das für Dich brauchbar sein.[ Dieser Beitrag wurde am 10.03.2003 um 02:03 Uhr von Midnighter editiert. ]
-
@Midnighter: Danke für den Code, aber der ließt ja nur die Caption des Explorers aus (wenn ich den richtig verstanden hab) aber ich möchte ja universell auslesen.
Ich hab´s jetzt so Probiert:
HWND hwnd = GetForegroundWindow(); Form1->Caption =GetWindowTextA(hwnd,/*Was muss hier hin?*/,500);
Nur weiss ich nciht was als 2ter Parameter hinmuss, ich bekomme immer nur nen Integer ausgegeben (Länge der Caption) aber es soll ja der Text angezeigt werden.
Schonmal Dank,
J0
-
In der Doku machen die das in einem Beispiel so:
// Länge auslesen cTxtLen = GetWindowTextLength(hwnd); // Allocate memory for the string and copy the string into the memory. pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); GetWindowText(hwnd, pszMem, cTxtLen + 1);
Also du musst dir halt erst Speicher für den String reservieren
-
Ah danke!
Jetzt hab ich´s verstanden !
J0