Fenstername per API ermitteln

DrMueller

Erfahrenes Mitglied
Hallo Leute,

Wir haben eine Überprüfung gemacht, ob ein Dokument offen ist, indem wir per getWindowTitle überprüfen, ob der Name des Dokuments in einem Fenster vorkommt.

Dies klappt soweit auf allen Plattformen recht gut, nur gibt es das Problem, dass es zwei Fenster gibt, welche den Namen ebenfalls enthalten können. Daher solange eines davon offen ist, denkt die Logik, dass Dokument sei offen.

Ich habe nun per ClassName versucht über die entsprechenden HWNDs diese beiden Fenster auszuschliessen, doch dort bekomme ich, auch wenn ich das DLL kompiliere, immer nur den Rückgabewert "ThunderRT6FormDC"

Was ich ebenfalls versucht habe, ist per GetWindowThreadProcessId die ProcessID und dann den Namen des Prozesses herauszufinden, doch irgendwie scheint's keine API zu geben, welche den ProcNamen ausgibt.


Hat da jemand eine Idee, wie man das am einfachsten lösen könnnte?



Vielen Dank im Voraus.

Müller Matthias
 
Werden diese zwei anderen Fenster aus demselben Programm heraus aufgerufen oder kommen die von einem externen Programm?
 
Falscher Thread gepostet...

Die werden von einem externen Aufgerufen. Daher muss ich ja über die Prozeduren gehen.
 
Doc, wenn die zwei Fenster von einem externen Programm aufgerufen werden, haben die einen eigenen Prozess und somit auch eine eigene ProzessID.

Vergleich doch einfach die ProcessID deines eigenen Programms mit dem der zwei Fenster!
 
Jo klar, es ist so simpel.
Falls wer was ähnliches hat, hier die Anleitung:

ProcessID des Hauptprogramms rausfinden:

Visual Basic:
Public Function getProcessID(ProgrammName) As Long
    Dim hSnapshot As Long, Result As Long
    Dim Process As PROCESSENTRY32
  
    ' "Snapshot" des aktuellen Prozess ermitteln
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
    If hSnapshot <> 0 Then
      Process.dwSize = Len(Process)
      
      ' Ersten Prozess ermitteln
      Result = ProcessFirst(hSnapshot, Process)
      
      Do Until Result = 0
        If InStr(LCase$(Process.szExeFile), LCase$(ProgrammName)) > 0 Then
          getProcessID = Process.th32ProcessID
          Exit Do
        End If
        
        ' nächster Prozess
        Result = ProcessNext(hSnapshot, Process)
      Loop
      
      ' Handle schliessen
      CloseHandle hSnapshot
    End If

End Function


Danach über EnumWindows etc. die entsprechenden HWNDs auslesen.

Mit dieser Hwnd die ProcID auslesen über
Visual Basic:
Call GetWindowThreadProcessId(thisHWND, thisProcID)

Und danach müssen diese nur noch gegengeprüft werden.


Danke an Zvoni, evtl. kann das jemand auch noch gebrauchen.
 
Zurück