Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1080to1084
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

Probleme mit Appactivate

Probleme mit Appactivate
10.06.2009 14:10:11
chris
Hallo liebe Forumsbesucher und VBA Experten,
ich benötige mal wieder eure Hilfe.
Ich versuche mir die ganze zeit ein kleines Programmm zu schreiben.
Was eigentlich auch schon soweit ok ist.
Nur ich habe mit AppActivate Probleme.
Ich will mir damit ein fremdes fenster aktivieren lassen.
Das klappt auch ganz gut, aber leider nur beim ersten Makro durchlauf.
Will ich mein Makro dann noch einmal starten kommt der Fehler bei Appactivate
Laufzeitfehler 5 "Ungültiger Prozeduraufruf oder ungültiges Argument"
AppActivate ("Fenster Title suchen")
Aber warum ? Das SAP Fenster ist geöffnet ?
Vielen dank im vorraus gruß Chris
P.s den code selbst kann ich nicht veröffentlichen.
ich hoffe meine Angaben reichen aus.
Danke

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW:Zusatzinfo
10.06.2009 14:15:12
chris
Hallo, ich habe jetzt zusätzlich etwas versucht.
und zwar habe ich aus dem Forum diesen Code irgendwann einmal erstellt.
Mit dem code kann ich in einer Exceldatei wählen ob ich NUR sichtbare oder alle fenster untereinander angezeigt bekommen möchte.
Das SAP fenster das ich aktivieren möchte wird aber komischerweiße nur gefunden wenn ich alle fenster anzeigen wähle also auch die Unsichtbaren.
Nur warum verstehe ich nicht.Das SAP Fenster ist ja nicht unsichtbar ich sehe es unten in meiner taskleiste ?
Vielen Dank noch einmal.
Hier der code der Datei die mir die fenster anzeigt:
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" _
(ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As Long, ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long
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 PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
LParam As Any) As Long
Private Declare Function GetWindowTextLength Lib "user32" _
Alias "GetWindowTextLengthA" (ByVal hWnd As Long) _
As Long
Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hWnd As Long, ByVal wIndx As _
Long) As Long
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Const WM_CLOSE = &H10
Const GWL_STYLE = (-16)
Const WS_VISIBLE = &H10000000
Const WS_BORDER = &H800000

Public Function ListAll( _
Optional bolKill As Boolean = False, Optional KillHWND As Long)
Dim hWnd As Long, A As Long
Dim Titel$, Result$
A = Cells(Rows.Count, 1).End(xlUp).Row
hWnd = GetDesktopWindow()
hWnd = GetWindow(hWnd, GW_CHILD)
Do While hWnd  0
Style = GetWindowLong(hWnd, GWL_STYLE)
Style = Style And (WS_VISIBLE Or WS_BORDER)
Result = GetWindowTextLength(hWnd) + 1
Titel = Space$(Result)
Result = GetWindowText(hWnd, Titel, Result)
Titel = Left$(Titel, Len(Titel) - 1)
If bolKill = False Then
If (Style = (WS_VISIBLE Or WS_BORDER) Or Tabelle1.CheckBox1 = False) Then
If Titel > "" Then
A = A + 1
Cells(A, 1) = Titel
Cells(A, 2) = hWnd
End If
End If
Else
If hWnd = KillHWND And bolKill = True Then
PostMessage hWnd, WM_CLOSE, 0&, 0&
On Error Resume Next
AppActivate (Titel)
On Error GoTo 0
Exit Function
End If
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT) ' nächstes Fenster
Loop
End Function



Private Sub CommandButton1_Click()
Call LeseMeTask
End Sub


Sub LeseMeTask()
Cells.ClearContents
Range("A1") = "Titel": Range("B1") = "Window-Handle"
ListAll
Cells.Columns.AutoFit
'Call Sortiere
End Sub


Sub VersucheKillTask()
For A = 1 To Selection.Count
If Selection(A).Column = 1 And (Selection(A) > "" And _
Selection(A).Offset(0, 1) > 0) Then
ListAll True, Selection(A).Offset(0, 1)
End If
Next A
LeseMeTask
End Sub


'Dankeschön

Anzeige
AW: AW:Zusatzinfo
10.06.2009 16:32:14
Ramses
Hallo
ich kriegs nicht auf die Reihe !?
Du schliesst doch das Fenster/Applikation mit
PostMessage hWnd, WM_CLOSE, 0&, 0&
Wie willst du es dann aktivieren ?
By the way... wenn du nicht klar kommst, lass mal das OnError weg und schau dir die Fehlermeldung an die dann evtl. aufläuft
Gruss Rainer
AW: AW:Zusatzinfo
10.06.2009 22:47:36
chris
Hallo Rainer,
danke für Deine Antwort.
Weil du oben schreibst:
-ich kriegs nicht auf die Reihe !?
-Du schliesst doch das Fenster/Applikation mit
-PostMessage hWnd, WM_CLOSE, 0&, 0&
ich schliese ja das Fenster nicht.
Der code den ich oben eingebaut habe zum zeigen der ist ja nur dafür da um in einer leeren Exceldatei
alle gestarteten Fenster anzuzeigen mit Namen.
Und eben auch "versteckte Fenster"
und das ist es was mich wundert.
Er zeigt mir das gewünschte SAP fenster nur an wenn ich auch versteckte Fenster anzeigen lasse.
Deshalb funktioniert mein appactivate ("Fenstertitel") nicht.
Ich versuchs einfach am Dienstag noch einmal.
Vieleicht weißt du doch noich etwas dann würde ich mich über eine kurze Antwort freuen.
Danke gruß Chirs
Anzeige
AW: AW:Zusatzinfo
11.06.2009 12:04:00
chris
Danke Rainer,
aber ich schliese das fenster doch nich.
Mit dem Code beispiel lasse ich mir nur anzeigen welche fenster geöffnet sind.
Der hat mit meinem Code den ich verwende nichts zu tun.
Den habe ich nur gepostet damit mann versteht das das Fenster geöffnet ist aber nur angezeigt wird wenn man unsichtbare anwählt.
Ich Poste mal die ganze Datei.
https://www.herber.de/bbs/user/62370.zip
Diese datei ist nur als beispiel gedacht wie ich es meine das das SAP Fenster nicht angezeigt oder gefunden wird mit Appactivate.Weil in der Datei muss ich den hacken entfernen bei "Nur sichtbare"
Dann wird das SAP Fenster angezegt.Deshalb denke ich auch das mein Appactivate nicht funktioniert.
Hier
Dank schon mal !
Anzeige
Das bringt nichts. Noch offen
11.06.2009 13:50:58
Ramses
Hallo
Wenn du den TopLevel Process abschiesst, und das machst du, kannst kein Fenster das von diesem Process abhängig ist, aktivieren weil es nicht mehr exisitiert.
Ich habe keine Ahnung was du machst und ohne Originalcode bringt das nichts.
Das Beispiel das du bringst schiesst den Top-Level Process ab und anschliessend willst du dieses Handle aktivieren.
Das ist die einzige Stelle mit AppActivate !!
Das ist Quatsch und kann nicht funktionieren.
Schmeiss in deinem Beispiel, wie schon vorgeschlagen, mal das blöde "On Error Resume Next" raus.
Dann siehst du, dass die Fehlermeldung "Ungültiger Proceduraufruf" kommt.
Wie gesagt, für mich ist das ein sinnloses stochern im Nebel weil ich nicht weiss was du tatsächlich machst oder effektiv willst
Wenn du die Anwendung aktivieren willst, dann muss das AppActivate woanders hin, aber nicht in den Löschprocess.
Gruss Rainer
Anzeige
AW: Das bringt nichts. Noch offen
11.06.2009 15:41:15
chris
Danke Rainer,
ich merk schon ohne code funktioniert meine erklärung nicht.
Weil wie gesagt ich den code den ich gepostet habe nicht zum beenden nehme sondern einfach nur um zu erklären was ich meine dasich fenster die in die tabelle eingetragen werden nicht mit Appactivate aktivieren kann.
Appactivate ist in dem Code unrelevant weil ich den Code nicht verwende.
Aber ich werde versuchen am dinstag mal etwas zu posten.
Danke bis dahin und schönes We
AW: AW:Zusatzinfo
11.06.2009 14:01:35
Nepumuk
Hallo,
der Code sucht nach sichtbaren Fenstern mit Rahmen (WS_BORDER). Eventuell benutzt SAP ja rahmenlose Fenster. Warum AppActivate das SAP-Fenster nicht findet, hängt garantiert mit dem Titel zusammen. Aber ohne das Fenster kann ich das nicht sagen und dieses befindet sich auf deinem Rechner.
Gruß
Nepumuk
Anzeige
AW: AW:Zusatzinfo
11.06.2009 15:46:49
chris
Hallo Nepumuk,
Danke für deine Antwort ich glaube du verstehst mich und mein Problem.
''''Eventuell benutzt SAP ja rahmenlose Fenster
Das ist gut möglich.
Wie gesagt ich habe zwei Varianten um das Fenster zu aktiieren.
Einmal mit appactivate und das andere weiß ich jetzt gerade nicht weil ich Zuhause bin.
Aber das komische ist das das mit dem Appactivate beim ersten durchlauf meines Programme funktioniert und beim zweiten durchlauf obwohl das fenster von SAP genauso sichtbar ist nicht mehr.
Aber danke für deine Hilfe.
Ich werde es am Dienstag mal so versuchen.
Erst bevor ich mein programm laufen lasse das handle dieses SAP fensters zu ermitteln und dann immer das Fensterhandle zu aktivieren.
Zwar geht das glaube ich ich mit Appactivate nicht aber ich finde da bestimt irgendetwas das das fenster mittels Handle aktivieren kann.
Aber trotzdem vielen Dank für deine Hilfe.
Vielleicht kannst du mir auch am Dienstag noch einmal weiter helfen.
Ich setze dann einfach diesen Beitrag erneut auf offen.
Dankeschön
Anzeige
AW: AW:Zusatzinfo
11.06.2009 19:22:21
eli
Hallo,
Ich hatte schon ein ähnliches Problem.
  • Wenn Du das gesuchte Fenster minimiert hast dann funktioniert AppActivate nicht.

  • Ist der Fenstertitel nach dem 1. Aufruf gleich oder hat er sich vielleicht geändert bzw. erweitert?

  • Mehr fällt mir auch nicht ein.
    Gruß eli
    AW: AW:Zusatzinfo
    11.06.2009 22:15:55
    chris
    Danke für deine Antwort.
    Wenn Du das gesuchte Fenster minimiert hast dann funktioniert AppActivate nicht.
    'Doch bei mir klappts wenn minimiert auch.Aber eben nur beim ersten mal.
    Aber was machen wenn minimiert ? Also wie löst du das Problem ?
    Ist der Fenstertitel nach dem 1. Aufruf gleich oder hat er sich vielleicht geändert bzw. erweitert?
    'Fenstertitel bleibt gleich
    Anzeige
    AW: AW:Zusatzinfo
    12.06.2009 10:54:23
    Luschi
    Hallo Chris,
    wenn man schon den Handle des Fensters (hWnd) ermittelt hat, dann kann man das Fenster auch mit dieser Information aktivieren; siehe:
    http://www.ms-office-forum.net/forum/sitemap/index.php?t-139363.html
    (ganz unten hinter 'ist bereits geöffnet) . Da wird überprüft, ob das Fenster minimiert ist oder nicht so entsprechend wird die Application aktiviert.
    Gruß von Luschi
    aus klein-Paris
    AW: AW:Zusatzinfo
    12.06.2009 13:28:05
    chris
    Hi Luschi,
    also danke erst mal für deine Antwort.
    Klingt gut der Ansatz !
    Ich teste es morgen mal oder erst am Dienstag.
    gebe aber sobald ich es getestet habe noch einmal Feedback.
    Danke und schönes WE
    Anzeige
    AW: AW:Zusatzinfo
    12.06.2009 16:12:12
    chris
    Hallo Luschi,
    ich bins noch einmal.
    Also ich bekomm das nicht hin. Ich weiß nicht genau was die da in dem thread diskutieren oder schreiben.
    Habe den ersten Code mal versucht um damit z.b den Windows rechner zu aktivieren oder in den Vordergrund zu holen.Das klappt aber nicht.
    Könntest du mir helfen ?
    Danke vielmals
    AW: Probleme mit Appactivate
    10.06.2009 14:15:19
    selli
    hallo chris,
    weshalb kannst du den code nicht veröffentlichen?
    arbeitest du für "die andere seite" ?
    der code funktioniert nicht. er ist es also nicht wert nicht gezeigt zu werden.
    gruß selli
    AW: offen bitte um Hilfe nicht um dumme sprüche
    10.06.2009 14:32:30
    chris
    gruß
    Nicht ganz unberechtigt....
    10.06.2009 16:37:34
    Ramses
    Hallo
    Aber eine Lösung deines Problems ohne Codebeispiel ist nicht möglich.
    Wenn dein Problem nur ansatzweise auf dem Code basiert den du oben gepostet hast, wie soll da jemand helfen.
    Hier sitzen keine Hellseher.
    Ausserdem ist es ein Geben und Nehmen
    Du kriegst hier Gratis Support für das deine Firma sonst einen Haufen Geld bezahlen müsste :-)
    Gruss Rainer
    Anzeige
    AW: Nicht ganz unberechtigt....
    10.06.2009 18:07:12
    chris
    Danke für den Tipp Rainer.
    Schönen Feiertag
    Ich versuchs nächste Woche noch einmal mit ein bisschen Code.

    14 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige