mabue88
Goto Top

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

Content-Key: 155654

Url: https://administrator.de/contentid/155654

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: bastla
bastla 23.11.2010 um 21:56:21 Uhr
Goto Top
Hallo mabue88!
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  
Grüße
bastla
Mitglied: mabue88
mabue88 23.11.2010 um 22:09:53 Uhr
Goto Top
Hi bastla,

danke für deinen Beitrag.
Ich habs gleich mal ausprobiert, aber irgentwie bekomm ich das nicht richtig hin. In PID steht doch die Prozess-ID. Wie kann ich diese ID jetzt in den folgenden Code einbinden:

WshShell.AppActivate "PID" ???


Danke
Matze
Mitglied: Fritzius
Fritzius 23.11.2010 um 23:31:20 Uhr
Goto Top
Hallo Matze,
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.

Du musst eigentlich auch nix umschreiben... face-wink - 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
Mitglied: bastla
bastla 23.11.2010 um 23:35:17 Uhr
Goto Top
Hallo mabue88!
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
[Edit]
@Fritzius
Zunächst: Willkommen im Forum!

Völlig richtig face-smile - 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:
Mitglied: mabue88
mabue88 24.11.2010 um 00:11:03 Uhr
Goto Top
Hi,

ich hab eure Vorschläge gleich mal ausprobiert. Jedoch kommt bei mir immer eine Fehlermeldung:

Skript: C:\...
Zeile: 10
Zeichen: 1
Fehler: Objekt erforderlich: 'objProcess'
Code: 800A01A8
Quelle: Laufzeitfehler in Microsoft VBScript

Ich will hier noch erwähnen, dass ich was VBS und VBA / VB angeht ein blutiger Anfänger bin.


Hier nochmal der Code:
strComputer = "."  
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'EXCEL.exe'")  
For Each objProcess in colProcessList
msgbox objProcess.ProcessId
Next

WshShell.AppActivate (objProcess.ProcessID)
WScript.Sleep 200
WshShell.SendKeys "{ENTER}"  
Mitglied: bastla
bastla 24.11.2010 um 00:15:35 Uhr
Goto Top
Hallo mabue88!

"objProcess" existiert nur innerhalb der Schleife ...

Grüße
bastla
Mitglied: mabue88
mabue88 24.11.2010 um 00:18:10 Uhr
Goto Top
@bastla:
Ok,

das heisst, ich lege (so wie du es in deinem Beispiel gemacht hast) eine Variable an, in die ich in der Schleife die Process-ID schreibe, damit ich diese ID auch nach der Schleife verarbeiten kann!?

So funktionierts bei mir auch.

@all:
Hat noch jemand eine Idee zu der Sache mit dem Cursor?
Mitglied: bastla
bastla 24.11.2010 um 00:23:21 Uhr
Goto Top
Hallo mabue88!
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
Mitglied: mabue88
mabue88 24.11.2010 um 00:28:57 Uhr
Goto Top
Also, zu dem Cursor-Problem:

ich habe ein Programm, das verschiedene Felder (eine Art Textfelder, die aber nicht bearbeitet werden können) hat, in denen verschiedene Daten stehen. Diese Daten können mit der Maus markiert und rauskopiert werden. Demzufolge können diese Daten auch mit der Tastatur rauskopiert werden (Strg+A,Strg+C, usw.).
Diese Daten müssen in eine Excel-Tabelle übertragen werden. Grundsätzlich bekomme ich das hin.

Allerdings, steht beim Öffnen des (ich bezeichne es jetzt einfach mal als) Quell-Programm, der Cursor in keinem der Textfelder, so dass ich mit TAB oder Shift-TAB durch die einzelnen Textfelder "navigieren" kann. Setze ich den Cursor händisch mit der Maus in ein Feld, funktioniert der Rest wunderbar.

Da ich die Eingabe mit der Maus weg haben will, muss ich auf irgenteine andere Art den Cursor in eines der Textfelder setzen.
Das Programm wird standartmässig immer an der gleichen Position auf dem Desktop geöffnet. Unabhänging davon was VBS kann und was nicht, wäre es von dem Punkt zumindest möglich, dass man z.B. sagt:

- Setze Maus auf Position (x,y) (Textfeldposition)
- Klicke 1x links

Der Rest würde dann mit TAB usw. gehen.

Bei weiteren Fragen einfach fragen face-smile.


Danke
Matze
Mitglied: 76109
76109 24.11.2010 um 01:01:43 Uhr
Goto Top
Hallo zusammen!

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