Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
892to896
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
892to896
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Name der aktiven Anwendung

Name der aktiven Anwendung
10.08.2007 12:02:00
Jürgen
Hallo Excel Gemeinde.
In einem Makro wechsle ich von Excel zu SAP um dort Eingaben machen zu können.
Diese Eingaben dürfen aber erst gemacht werden, wenn eine bestimmte Transaktion aufgerufen wurde und aktiv ist. Der Name dieser Transaktion, bzw. der dann aktiven Anwendung wird auch angezeigt (z. B. "Konfiguration : Ergebnis").
Ich benötige also einen Code, der mir den Namen der aktiven Anwendung ausliest. Ist sicherlich ganz einfach, aber alle meine bisherigen Versuche lieferten mir immer nur "Microsoft Excel" als Ergebnis zurück
auch wenn schon zu SAP gewechselt wurde.
Das Makro soll dann weiterlaufen, wenn das aktive Fenster z. B. "Konfiguration : Ergebnis" heißt.
Wer kann mir einen Tipp geben, wie ich das bewerkstelligen kann.
Viele Grüße und besten Dank im voraus, Jürgen.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Name der aktiven Anwendung
10.08.2007 19:39:00
Nepumuk
Hallo Jürgen,
ich weiß ja nicht, wie du es versuchst, aber ich würde es so machen:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" ( _
    ByVal hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" ( _
    ByVal hWnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Public Sub test()
    Do
        Sleep 1000
        DoEvents
        If GetWindowTitle(GetActiveWindow) = "Konfiguration : Ergebnis" Then Exit Do
    Loop
    Beep
End Sub

Private Function GetWindowTitle(ByVal hWnd As Long) As String
    Dim lngReturn As Long, strTemp As String
    lngReturn = GetWindowTextLength(hWnd) + 1
    strTemp = Space(lngReturn)
    lngReturn = GetWindowText(hWnd, strTemp, lngReturn)
    GetWindowTitle = Left(strTemp, Len(strTemp) - 1)
    Debug.Print GetWindowTitle
End Function

Gruß
Nepumuk

Anzeige
AW: Name der aktiven Anwendung
10.08.2007 22:04:00
Herby
Hallo Nepumuk,
ich hab so meine Probleme mit Deinem Code. Zuerst wird angemeckert, dass GetActiveWindow nicht als Variable vorhanden ist.
Nach dem ich sie mit
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
definiert habe (hoffentlich richtig), funktionierts meiner Meinung nach immer noch nicht. Ich rufe das Makro auf, wechsle dann zu einer anderen Anwendung, z.B. nach "Dokument1 - Microsoft Word" und warte dort auf eine Info. - Vergebens ! auch wenn ich wieder nach Excel zurückkehre das gleiche !
Kannst Du mir sagen, was ich am Code ändern muß, damit ich irgendwie/irgendwann ein vernünftiges Feedback kriege ? Oder habe ich das Ganze falsch verstanden ?
Die Zeile
If GetWindowTitle(GetActiveWindow) = "Dokument1 - Microsoft Word" Then
habe ich entsprechend abgeändert.
An dieser Stelle ein kräftiges Danke!!!!! für Deine - für mich immer wertvollen Infos !
Viele Grüße
Herby

Anzeige
AW: Name der aktiven Anwendung
10.08.2007 22:12:24
Nepumuk
Hallo Herby,
oben korrigiert, aber unten vergessen. So geht's:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" ( _
    ByVal hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" ( _
    ByVal hWnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Public Sub test()
    Do
        Sleep 1000
        DoEvents
        If GetWindowTitle(GetForegroundWindow) = "Eigene Dateien" Then Exit Do
    Loop
    Beep
End Sub

Private Function GetWindowTitle(ByVal hWnd As Long) As String
    Dim lngReturn As Long, strTemp As String
    lngReturn = GetWindowTextLength(hWnd) + 1
    strTemp = Space(lngReturn)
    lngReturn = GetWindowText(hWnd, strTemp, lngReturn)
    GetWindowTitle = Left(strTemp, Len(strTemp) - 1)
    Debug.Print GetWindowTitle
End Function

Gruß
Nepumuk

Anzeige
Danke - funktioniert super !
11.08.2007 14:18:00
Herby
Hallo Nepumuk,
ich hab noch mit dem Code ein bischen rumprobiert und festgestellt, dass er bei mir super funktioniert.
Danke nochmals !
Viele Grüße
Herby

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige