VBA und ACCESS - Mehrere gleichnamige Prozesse auslesen - Einen bestimmten ermitteln, in den Vordergrund holen und Tastaturbefehle per sendkey übermitteln
Hallo,
ich habe eine Frage,
ich habe Programme (CSB.exe) die vom Ursprung her gleich sind.
Ich starte nun alle 3 Programme mit verschiedenen Parametern, diese habe ich im Taskmanager unter Prozesse den " csb.exe" Prozess 3 mal stehen, also:
csb.exe
csb.exe
csb.exe
Fensterbezeichnung
"12345 Testumgebung..."
"47894 Testumgebung..."
"78945 Testumgebung..."
Wie kann ich in den aktiven Prozess wechseln, welcher in der Fensterbezeichnung (WindowTitle) "12345 Testumgebung..." den Namen 12345 stehen hat
und im Anschluss dort per Sendkey Befehle übermitteln,
im Vorfeld soll geprüft werden ob der Prozess / Programm mit Fensterbezeichnung 12345 überhaut gestartet ist.
Wie kann ich dieses über Access und VBA am besten lösen?
Über Eure Hilfe wäre ich dankbar.
Grüße aus München
ich habe eine Frage,
ich habe Programme (CSB.exe) die vom Ursprung her gleich sind.
Ich starte nun alle 3 Programme mit verschiedenen Parametern, diese habe ich im Taskmanager unter Prozesse den " csb.exe" Prozess 3 mal stehen, also:
csb.exe
csb.exe
csb.exe
Fensterbezeichnung
"12345 Testumgebung..."
"47894 Testumgebung..."
"78945 Testumgebung..."
Wie kann ich in den aktiven Prozess wechseln, welcher in der Fensterbezeichnung (WindowTitle) "12345 Testumgebung..." den Namen 12345 stehen hat
und im Anschluss dort per Sendkey Befehle übermitteln,
im Vorfeld soll geprüft werden ob der Prozess / Programm mit Fensterbezeichnung 12345 überhaut gestartet ist.
Wie kann ich dieses über Access und VBA am besten lösen?
Über Eure Hilfe wäre ich dankbar.
Grüße aus München
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 306386
Url: https://administrator.de/forum/vba-und-access-mehrere-gleichnamige-prozesse-auslesen-einen-bestimmten-ermitteln-in-den-vordergrund-holen-und-306386.html
Ausgedruckt am: 23.12.2024 um 01:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo Thomas1972,
kannst du so machen:
Grüße Uwe
<< edit >> Korrektur einer Variablen
kannst du so machen:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
'Sub sucht dein Fenster und wenn es gefunden wurde wird es aktiviert und Tastendrücke an es gesendet
Private Sub FindMyWindow()
Dim lngHandle As Long
Set objShell = CreateObject("wscript.shell")
If GetHandleFromCaption(lngHandle, "12345 Testumgebung") = True Then
'Fenster aktivieren
SetForegroundWindow lngHandle
'Tastendrücke senden
objShell.SendKeys ("BlaBlaBlaBla")
Else
MsgBox "Fenster wurde nicht gefunden!", vbExclamation
End If
set objShell = Nothing
End Sub
' Funktion das Fenster anhand des Titels sucht
Private Function GetHandleFromCaption(ByRef lWnd As Long, ByVal sCaption As String) As Boolean
Dim lhWndP As Long, sStr As String
GetHandleFromPartialCaption = False
lhWndP = FindWindow(vbNullString, vbNullString)
Do While lhWndP <> 0
sStr = String(GetWindowTextLength(lhWndP) + 1, Chr$(0))
GetWindowText lhWndP, sStr, Len(sStr)
sStr = Left$(sStr, Len(sStr) - 1)
If InStr(1, sStr, sCaption) > 0 Then
GetHandleFromCaption = True
lWnd = lhWndP
Exit Do
End If
lhWndP = GetWindow(lhWndP, 2)
Loop
End Function
<< edit >> Korrektur einer Variablen
Zitat von @thomas1972:
nun muss ich nur schauen wie bekomme ich variablen in die Zwischenablage und per Sendkey dann in das aktive vorgeblendete Feld im geöffnetem Programm.
Clipboard setzen, kein Problemnun muss ich nur schauen wie bekomme ich variablen in die Zwischenablage und per Sendkey dann in das aktive vorgeblendete Feld im geöffnetem Programm.
' Hinweis: Zur Verwendung einen Verweis zur Bibliothek "Microsoft Forms 2.0 Object Library" hinzufügen
Dim clipboard As MSForms.DataObject
Set clipboard = New MSForms.DataObject
clipboard.SetText "Das ist mein Text"
clipboard.PutInClipboard
STRG+V
objShell.SendKeys("^v")
Man kann aber auch Controls einer Anwendung direkt per Message-API (SendMessage()) ansprechen und den Text setzen, aber denke das wird für dich zu kompliziert. Außerdem müsste ich dazu an deinem Rechner sitzen um die Control-interne ID zu extrahieren.
Für Anfänger einfacher ist das per AutoIt-EXE, das hat ein Tool namens AutoIt-WindowInfo mit dem man die Control-IDs anzeigen lassen kann.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.