Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fenster/Instanz vom Programm aktivieren?

Fenster/Instanz vom Programm aktivieren?
06.06.2020 11:50:51
Sergej
Hallo Leute,
ich habe hier im Forum ein Code von Nepumuk gefunden, das mir evtl. helfen könnte, den Fokus auf eine Instanz/ das Programm zu setzen bzw. zu aktivieren. So wie es erkennen könnte, wird die Instanz über den Titel aktiviert.
Wie kann ich bitte bei lngHwnd nur nach folgenden Teil-String suchen: P:\Daten\sergej\Desktop\Test.dwg
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Public Sub test()
Dim lngHwnd As Long
lngHwnd = FindWindow(vbNullString, "P:\Daten\sergej\Desktop\Test.dwg Vectorworks 2020 ( _
SELECTseries 8)")
If lngHwnd  0 Then Call SetForegroundWindow(lngHwnd)
End Sub
Besten Dank im Voraus.
Gruß,
Sergej

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fenster/Instanz vom Programm aktivieren?
06.06.2020 12:59:43
volti
Hallo Sergej,
die Findwindow-Funktion ermittelt im Speicher geladene Applikationen (Programme) anhand des Fenstertitels.
Ein Vollpfad (wie. z.B. "P:\Daten\sergej\Desktop\Test.dwg" oder der Exe-Dateiname wird hierbei nicht unterstützt.
Auch frage ich mich, ob bei Deiner angegebenen Version die Declares nicht 64 Bit-fähig sein müssten.
Ist irgendetwas rot bei Deinen Declares dargestellt?
viele Grüße
Karl-Heinz
AW: Fenster/Instanz vom Programm aktivieren?
06.06.2020 13:34:33
Sergej
Hallo Karl-Heinz,
es ist nichts rot bei Declares .
In meinem Fenstertitel steht z.B. AutoCAD MEP 2018 - [P:\Daten\sergej\Desktop\096_XX_E_Gr_A1A_O3_5_010_b_F_2.DWG] (Nicht für den gewerblichen Einsatz)
Ich möchte im Code beispielsweise als Fenstertitel nur 096_XX_E_Gr_A1A_O3_5_010_b_F_2.DWG (Groß- und Kleinschreibung soll nicht berücksichtigt werden) eintragen, um diese Anwendung dann zu aktivieren.
Beste Grüße,
Sergej
Anzeige
AW: Fenster/Instanz vom Programm aktivieren?
06.06.2020 13:51:38
volti
Hallo Sergej,
ok, dann passen Deine Declares ja....
Zu Deiner Frage: M.E. musst Du den gesamten Fenstertext genau angeben und nicht nur Teile davon.
Auch ggf. führende Leerzeichen oder doppelte Leerzeichen (sieht man manchmal nicht so genau) müssen angegeben werden, sonst wird das Fenster nicht gefunden.
Wenn Du nur einen Teil des Fenstertextes angeben möchtest, musst Du alle geladenen Fenster mit EnumWindows durchscannen und über die zugegebenen Handles die Fenstertexte mit Deiner Vorgabe vergleichen.
Machbar, aber deutlich aufwändiger….
viele Grüße
Karl-Heinz
Anzeige
AW: Fenster/Instanz vom Programm aktivieren?
06.06.2020 15:03:46
volti
Hallo Sergej,
hier der Code, falls Du nur einen Teil Deines Fensters angeben willst:

Option Explicit
Option COMPARE TEXT
Private Declare Function GetWindow Lib "user32" ( _
        ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Const GW_HWNDFIRST = 0
Private Const GW_HWNDNEXT = 2
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
        ByVal hwnd As Long, ByVal lpString As String, _
        ByVal cch As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" ( _
        ByVal hwnd As Long) As Long
Sub SetzeInVorgrund()
 Dim hwnd As Long
 Dim sTxt As String * 255, T As String, sSuch As String
'Hier Deinen Fenstertext eingeben
 sSuch = "096_XX_E_Gr_A1A_O3_5_010_b_F_2.DWG"
 hwnd = GetWindow(GetActiveWindow(), GW_HWNDFIRST) 'Erstes relevante Fenster holen
 Do
    hwnd = GetWindow(hwnd, GW_HWNDNEXT)            'Nächstes Fenster
    If hwnd <> 0 Then
      GetWindowText hwnd, sTxt, 512                'Fenstertext holen
      T = Left$(sTxt, InStr(sTxt, vbNullChar))     'Formatieren
      If Len(T) > 1 Then
        If InStr(T, sSuch) > 0 Then                'Fenster gefunden
          SetForegroundWindow hwnd: Exit Sub       'In den Vordergrund
        End If
      End If
    End If
 Loop Until hwnd = 0
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Fenster/Instanz vom Programm aktivieren?
06.06.2020 15:07:58
Sergej
Hallo Karl-Heinz,
vielen herzlichen Dank! Es funktioniert perfekt.
Beste Grüße,
Sergej

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige