1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Fenstername per API ermitteln

Dieses Thema im Forum "Visual Basic 6.0, VBA & VBScript" wurde erstellt von DrMueller, 25. Januar 2012.

  1. DrMueller

    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
  2. Zvoni

    Zvoni Erfahrenes Mitglied

    Werden diese zwei anderen Fenster aus demselben Programm heraus aufgerufen oder kommen die von einem externen Programm?
  3. DrMueller

    DrMueller Erfahrenes Mitglied

    Falscher Thread gepostet...

    Die werden von einem externen Aufgerufen. Daher muss ich ja über die Prozeduren gehen.
  4. Zvoni

    Zvoni Erfahrenes Mitglied

    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!
    DrMueller sagt Danke.
  5. DrMueller

    DrMueller Erfahrenes Mitglied

    Jo klar, es ist so simpel.
    Falls wer was ähnliches hat, hier die Anleitung:

    ProcessID des Hauptprogramms rausfinden:

    Code (Visual Basic):
    1. Public Function getProcessID(ProgrammName) As Long
    2.     Dim hSnapshot As Long, Result As Long
    3.     Dim Process As PROCESSENTRY32
    4.  
    5.     ' "Snapshot" des aktuellen Prozess ermitteln
    6.    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
    7.     If hSnapshot <> 0 Then
    8.       Process.dwSize = Len(Process)
    9.      
    10.       ' Ersten Prozess ermitteln
    11.      Result = ProcessFirst(hSnapshot, Process)
    12.      
    13.       Do Until Result = 0
    14.         If InStr(LCase$(Process.szExeFile), LCase$(ProgrammName)) > 0 Then
    15.           getProcessID = Process.th32ProcessID
    16.           Exit Do
    17.         End If
    18.        
    19.         ' nächster Prozess
    20.        Result = ProcessNext(hSnapshot, Process)
    21.       Loop
    22.      
    23.       ' Handle schliessen
    24.      CloseHandle hSnapshot
    25.     End If
    26.  
    27. End Function

    Danach über EnumWindows etc. die entsprechenden HWNDs auslesen.

    Mit dieser Hwnd die ProcID auslesen über
    Code (Visual Basic):
    1. Call GetWindowThreadProcessId(thisHWND, thisProcID)
    Und danach müssen diese nur noch gegengeprüft werden.


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

Diese Seite empfehlen