Möglichkeiten um Cursor in Programm zu positionieren und dazugehörige Prozess-ID auslesen - mit VBS
Hi,
ich suche eine Möglichkeit, den Cursor in einem Programm in eine bestimmte Zelle zu setzen. Das Problem ist, dass beim Öffnen des Programms der Cursor niergens steht. Mit TAB kann ich hierbei also nicht arbeiten. Durch die Programmierung will ich die Verwendung der Maus überflüssig machen.
Zudem muss ich die Prozess-ID von diesem Programm auslesen. Dazu habe ich folgendes kleines Programm gefunden, allerdings bekomme ich es nicht umgeschrieben, so dass ich die Prozess-ID mithilfe einer Variable weiterverwenden kann (http://forum.fachinformatiker.de/basic/80573-vbs-pid-auslesen.html):
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
msgbox objProcess.ProcessId
Next
Die ID benötige ich, um anschließend das Programm in den Vordergrund legen kann.
Das Ganze sollte mit VBS programmiert werden.
Ich bin für jede Hilfe dankbar.
Schöner Abend noch
Matze
ich suche eine Möglichkeit, den Cursor in einem Programm in eine bestimmte Zelle zu setzen. Das Problem ist, dass beim Öffnen des Programms der Cursor niergens steht. Mit TAB kann ich hierbei also nicht arbeiten. Durch die Programmierung will ich die Verwendung der Maus überflüssig machen.
Zudem muss ich die Prozess-ID von diesem Programm auslesen. Dazu habe ich folgendes kleines Programm gefunden, allerdings bekomme ich es nicht umgeschrieben, so dass ich die Prozess-ID mithilfe einer Variable weiterverwenden kann (http://forum.fachinformatiker.de/basic/80573-vbs-pid-auslesen.html):
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
msgbox objProcess.ProcessId
Next
Die ID benötige ich, um anschließend das Programm in den Vordergrund legen kann.
Das Ganze sollte mit VBS programmiert werden.
Ich bin für jede Hilfe dankbar.
Schöner Abend noch
Matze
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 155654
Url: https://administrator.de/contentid/155654
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo mabue88!
Grüße
bastla
allerdings bekomme ich es nicht umgeschrieben, so dass ich die Prozess-ID mithilfe einer Variable weiterverwenden kann
Da sollte doch eine minimale Änderung reichen:strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
PID = objProcess.ProcessId
Next
MsgBox "Die Process-ID lautet: " & PID
bastla
Hallo Matze,
Du musst eigentlich auch nix umschreiben... - die von Dir gesuchte Prozess-ID steht doch in objProcess.ProcessID!
Lediglich den oben fett markierten Dateinamen -Edit- (wie er im Taskmanager steht) -/edit- ggf. durch den Dich Interessierenden ersetzen - und diesen dann mittels
WshShell.AppActivate (objProcess.ProcessID) aktivieren!
Bei meinem Versuch wurde das Programm (-edit- nach der Anzeige der Process-ID durch die 'msgbox' -/edit- eine Instanz von Notepad.exe) korrekt aktiviert (zu sehen unten in der Taskleiste); nach einem Druck auf ENTER kam das Programm dann (mit Cursor am Anfang der 1. Zeile) auch in den Vordergrund (läßt sich mittels 'SetFocus' o.ä. bestimmt auch noch automatisieren).
HTH und Grüssles
Martin
Zitat von @mabue88:
[...] allerdings bekomme ich es nicht umgeschrieben,
so dass ich die Prozess-ID mithilfe einer Variable weiterverwenden kann
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
msgbox objProcess.ProcessId
Next
Die ID benötige ich, um anschließend das Programm in den Vordergrund legen kann.
[...] allerdings bekomme ich es nicht umgeschrieben,
so dass ich die Prozess-ID mithilfe einer Variable weiterverwenden kann
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
msgbox objProcess.ProcessId
Next
Die ID benötige ich, um anschließend das Programm in den Vordergrund legen kann.
Du musst eigentlich auch nix umschreiben... - die von Dir gesuchte Prozess-ID steht doch in objProcess.ProcessID!
Lediglich den oben fett markierten Dateinamen -Edit- (wie er im Taskmanager steht) -/edit- ggf. durch den Dich Interessierenden ersetzen - und diesen dann mittels
WshShell.AppActivate (objProcess.ProcessID) aktivieren!
Bei meinem Versuch wurde das Programm (-edit- nach der Anzeige der Process-ID durch die 'msgbox' -/edit- eine Instanz von Notepad.exe) korrekt aktiviert (zu sehen unten in der Taskleiste); nach einem Druck auf ENTER kam das Programm dann (mit Cursor am Anfang der 1. Zeile) auch in den Vordergrund (läßt sich mittels 'SetFocus' o.ä. bestimmt auch noch automatisieren).
HTH und Grüssles
Martin
Hallo mabue88!
[Edit]
@Fritzius
Zunächst: Willkommen im Forum!
Völlig richtig - eine Variable (PID) ist für diesen Zweck unnötig.
[/Edit]
Grüße
bastla
P.S.: Code entsprechend formatiert zu posten ist übrigens gar nicht schwer:
Wie kann ich diese ID jetzt in den folgenden Code einbinden:
Da es sich bei der "Process-ID" um einen numerischen Wert handelt:WshShell.AppActivate PID
@Fritzius
Zunächst: Willkommen im Forum!
Völlig richtig - eine Variable (PID) ist für diesen Zweck unnötig.
läßt sich mittels 'SetFocus' o.ä. bestimmt auch noch automatisieren
Da das Ganze in VBS ablaufen soll, wird ein Platzieren des Cursors im Editor-Fenster wohl nur über "SendKeys
" möglich sein ...[/Edit]
Grüße
bastla
P.S.: Code entsprechend formatiert zu posten ist übrigens gar nicht schwer:
Hallo mabue88!
Was hast Du eigentlich genau mit dem "Cursor-Platzieren" vor (insbesondere, da es - vielleicht ? - um Excel geht)?
Grüße
bastla
das heisst, ich lege (so wie du es in deinem Beispiel gemacht hast) eine Variable an
Nicht notwendiger Weise - da die PID später ja nicht mehr gebraucht wird, kommst Du auch ohne die Variable aus, wenn Du einfach Deine Zeile 10 vor Zeile 8 einfügst ...Was hast Du eigentlich genau mit dem "Cursor-Platzieren" vor (insbesondere, da es - vielleicht ? - um Excel geht)?
Grüße
bastla
Hallo zusammen!
Excel in den Vordergrund zu holen, geht auch einfacher:
Gruß Dieter
Excel in den Vordergrund zu holen, geht auch einfacher:
Dim oShell, Result
Set oShell = WScript.CreateObject("WScript.Shell")
Result = oShell.AppActivate("Microsoft Excel")
If Result = True Then
'Excel ist im Vordergrund
Else
'Excel ist nicht gestartet
End If
Gruß Dieter