schine
Goto Top

Aktives Windows-Fenster aus Batch-Skript heraus bestimmen ?

Hallo,

ich habe das Folgende Problem bei einem Batch-Programm:

Ich lasse in meinem Batch-Skript per "start"-Befehl eine
PDF-Datei mit dem Acrobat-Reader öffnen:

start "Dokumenttitel" "C:\Program Files\Adobe\Reader\AcroRd32.exe" %QUELLPFAD%%QUELLDATEI%

Das Öffnen funktioniert einwandfrei, jedoch wird beim Öffnen das neu geöffnete Fenster
(vom Acrobat Reader) als aktives Fenster in Windows gesetzt.
Von der geöffneten PDF-Datei soll aber nur vom Benutzer eine Inventar-Nummer abgelesen und
dann im Batch-Programm (das vorherige Fenster) eingetippt werden.
Umständlicherweise muss der Benutzer aber dann erst wieder zum vorherigen CMD-Fenster in
dem das Batch-Skript die Eingabe abfragt zurückwechseln (mit Maus oder ALT+TAB).


Wie kann man aus dem Batch-Skript heraus das aktive Windows-Fenster bestimmen ?
Oder kann man verhindern, dass sich das aktive Fenster auf den Acrobat Reader ändert ?
Gibt es auch eine Möglichkeit aus dem Batch-Skript heraus die Fenster-Position zu bestimmen ?


Danke im Voraus für die Hilfe.


ciao

Schine

Content-ID: 103980

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

72648
72648 12.12.2008 um 23:31:07 Uhr
Goto Top
Hallo Schine,

ich glaube kaum, dass es mit Batch funktioniert.
Da wirst du wohl auf VB umsteigen müssen.

Hier mal ein wink in die Richtung:

set newobj=createobject("wscript.shell")
newobj.run("C:\xyz\test.exe"),2

Wenn man diese Datei ausführt, startet test.exe minimiert.

Der 2er am Ende der 2.Zeile kann auch noch durch andere Parameter ersetzt werden:

0 - kein fenster proggi unsichtbar
1 - normal
2 - mimimiert starten
3 - maximiert
4 - wie letzes mal
5 - wie 4 aber aktiv
6 - mimimiert nächstes sichtbar
7 - mimimiert aktives bleibt aktiv
8 - standartgröße aktives bleibt aktiv
9 - aktiv + normale größe
10 - fenstermodus richtet sich nach scriptfenster

du kannst ein solches VB Script auch einfach aus der Batch heraus erzeugen.

Gruß Milo
bastla
bastla 13.12.2008 um 14:43:37 Uhr
Goto Top
Hallo schine und willkommen im Forum!

Der Vorschlag von Milo2000 sollte sich (etwas modifiziert) etwa so umsetzen lassen:
@echo off & setlocal
if "%~1" neq "" goto :Ein  

set "QUELLPFAD=D:\Dein Pfad\"  
set "QUellDATEI=Dein.pdf"  

set S=%temp%\StartReader.vbs
> %S% echo PID=CreateObject("WScript.Shell").Exec("""C:\Program Files\Adobe\Reader\AcroRd32.exe"" ""%QUELLPFAD%%QUELLDATEI%""").ProcessID  
>>%S% echo WScript.Sleep 2000:CreateObject("WScript.Shell").Run """%~f0"" " ^&PID  
cscript //nologo %S% & exit

:Ein
echo %1
set /p "Eingabe=Hier die Eingabe: "  
echo %Eingabe%
::Weitere Verarbeitung
pause
::Reader schließen
taskkill /PID %1 >nul
Soferne "taskkill.exe" verfügbar ist (also ab XP), sollte dieser Batch den Reader starten, danach selbst neu gestartet werden und so über dem Reader als aktives Fenster liegen, und am Ende den Reader-Prozess beenden.

Soferne der Batch mit Parametern gestartet werden soll, müsste eine Anpassung erfolgen, da in der obigen Variante beim ersten Start kein Parameter und beim zweiten Start die "ProcessID" des Reader-Fensters erwartet wird.
Ob es nicht sinnvoller wäre, zu versuchen, die entsprechende Nummer aus der PDF-Datei zu extrahieren und somit automatisiert weiterverarbeiten zu können, musst Du selbst beurteilen ...

Grüße
bastla
72648
72648 13.12.2008 um 15:41:40 Uhr
Goto Top
Hallo,

nettes Skript, eine anmerkung hätte ich dennoch, Taskkill.exe ist erst ab XP Pro verfügbar. Unter XP Home ist standartmäßig nur Tskill.exe dabei und der Parameter /PID muss nicht mit angegeben werden bsp. tskill %1 >nul .

Gruß Milo
bastla
bastla 13.12.2008 um 18:33:44 Uhr
Goto Top
@72648
Danke für die Anmerkung - und wollen wir hoffen, dass schines User die Inventar-Nummern nicht tatsächlich mit XP Home eingeben müssen ... face-wink

Grüße
bastla
72648
72648 13.12.2008 um 18:45:26 Uhr
Goto Top
@bastla

Da hast du recht, obwohl es vielleicht den ein oder anderen Arbeitsplatz schaffen würde face-wink

Gruß Milo
schine
schine 18.12.2008 um 22:29:10 Uhr
Goto Top
Hallo Bastla und Milo,

danke für eure Hilfe.
Das VB-Skript kann ich unter XP Pro dann mit dem Befehl "cscript" ausführen, oder ?

Wie könnte man das denn bewerkstelligen z. B. eine Nummer aus einer PDF-Datei zu extrahieren ? Da manche davon handschriftlich sind: könnte man auch handschriftliches aus dem PDF extrahieren (Schönschrift Mal vorausgesetzt) ?

ciao

Schine
Biber
Biber 19.12.2008 um 00:01:53 Uhr
Goto Top
Moin schine,

mal abgesehen davon, ob so etwas wie eine OCR-Erkennung noch mit vertretbarem Aufwand handwerlich machbar ist - schon hier bei diesem Satz:
Von der geöffneten PDF-Datei soll aber nur vom Benutzer eine Inventar-Nummer abgelesen und
dann im Batch-Programm (das vorherige Fenster) eingetippt werden.
. ..hatte ich mir damals verkniffen, darauf hinzuweisen, dass Batch/Skripting eine gute gute Wahl zur Automatisierung von unvermeidlich anfallenden Alltagsprozessen sind.
Ich würde an Deiner Stelle prüfen, ob dieser Eure praktizierte Prozess denn wirklich in seiner Eigenart erhaltenswert ist.

Es muss doch möglich sein - wenn es um Inventarnummern geht, die naturgemäß in einem zentralen System gehalten werden müssen - dass diese Daten am Ort ihrer Entstehung erfasst, und zwar digital erfasst werden und nicht irgendwann später von eingescannten fliegenden Zetteln abgelesen werden.

Da ist irgendwas schiefgelaufen, drängt sich mir der Eindruck auf.

Grüße
Biber