Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Möglichkeiten um Cursor in Programm zu positionieren und dazugehörige Prozess-ID auslesen - mit VBS

Frage Entwicklung

Mitglied: mabue88

mabue88 (Level 2) - Jetzt verbinden

23.11.2010 um 20:48 Uhr, 4888 Aufrufe, 10 Kommentare

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
Mitglied: bastla
23.11.2010 um 21:56 Uhr
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:
01.
strComputer = "." 
02.
Set objWMIService = GetObject _ 
03.
    ("winmgmts:\\" & strComputer & "\root\cimv2") 
04.
Set colProcessList = objWMIService.ExecQuery _ 
05.
    ("Select * from Win32_Process Where Name = 'Notepad.exe'") 
06.
For Each objProcess in colProcessList 
07.
    PID = objProcess.ProcessId 
08.
Next 
09.
MsgBox "Die Process-ID lautet: " & PID
Grüße
bastla
Bitte warten ..
Mitglied: mabue88
23.11.2010 um 22:09 Uhr
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
Bitte warten ..
Mitglied: Fritzius
23.11.2010 um 23:31 Uhr
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... - 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
Bitte warten ..
Mitglied: bastla
23.11.2010 um 23:35 Uhr
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 - 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: http://www.administrator.de/helpsystem/detail.php?idx=20#toc28
Bitte warten ..
Mitglied: mabue88
24.11.2010 um 00:11 Uhr
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:
01.
strComputer = "." 
02.
Set objWMIService = GetObject _ 
03.
("winmgmts:\\" & strComputer & "\root\cimv2") 
04.
Set colProcessList = objWMIService.ExecQuery _ 
05.
("Select * from Win32_Process Where Name = 'EXCEL.exe'") 
06.
For Each objProcess in colProcessList 
07.
msgbox objProcess.ProcessId 
08.
Next 
09.
 
10.
WshShell.AppActivate (objProcess.ProcessID) 
11.
WScript.Sleep 200 
12.
WshShell.SendKeys "{ENTER}"
Bitte warten ..
Mitglied: bastla
24.11.2010 um 00:15 Uhr
Hallo mabue88!

"objProcess" existiert nur innerhalb der Schleife ...

Grüße
bastla
Bitte warten ..
Mitglied: mabue88
24.11.2010 um 00:18 Uhr
@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?
Bitte warten ..
Mitglied: bastla
24.11.2010 um 00:23 Uhr
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
Bitte warten ..
Mitglied: mabue88
24.11.2010 um 00:28 Uhr
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 .


Danke
Matze
Bitte warten ..
Mitglied: 76109
24.11.2010 um 01:01 Uhr
Hallo zusammen!

Excel in den Vordergrund zu holen, geht auch einfacher:
01.
Dim oShell, Result 
02.
 
03.
Set oShell = WScript.CreateObject("WScript.Shell") 
04.
Result = oShell.AppActivate("Microsoft Excel") 
05.
 
06.
If Result = True Then 
07.
    'Excel ist im Vordergrund 
08.
Else 
09.
    'Excel ist nicht gestartet 
10.
End If
Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Visual Studio
DotNet Audio Stream Handle(s) über Prozess ID bekommen (7)

Frage von Aicher1998 zum Thema Visual Studio ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Windows Server
User-ID zu Application Crash

Frage von pablovic zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...