VB Script miért nem fut korrektül?
Szia.
Az ablakváltásra két módszer van elvileg :
1. a szabályos (ami nem müködik - legalábbis nállam) :
Set WshShell = WScript.CreateObject("WScript.Shell")
.
.
.
Rem Elvileg ez aktiválná az ablakot, de nállam nem müködött, nem jött fel az ablak
WshShell.AppActivate "Ablak cimsora".
2. ALT+TAB küldése az abléakoknak ez szokott müködni :
Set WshShell = WScript.CreateObject("WScript.Shell")
.
.
.
Rem ALT+TAB küldése, hogy az ablak aktiválódjon
WshShell.sendkeys "%{TAB}"
Illetve gondot okozhat még az is, hogy nem várja meg a script, hogy az ablak activálódjon (időzités) ezt esetlegesen késleltetésekkel meg lehet kerülni, mindkét esetben 1 másodperces várakozás az ablak aktiválása után :
WshShell.AppActivate "Ablak cimsora".
wscript.sleep 1000
illetve :
WshShell.sendkeys "%{TAB}"
wscript.sleep 1000
Sok sikert
Üdv.
Köszönöm a gyors válaszokat. A lassítást kipróbálom,beírom az ablakváltós részekhez.
Ez a módszer működik a váltáshoz:
Option Explicit
Dim WshShell
Set wshShell = CreateObject("WScript.Shell")
wshShell.AppActivate("ablak neve")
Szia.
Továbbra is azon az állásponton vagyok, hogy nem jó az ablakváltás.
Amit irtál kipróbáltam a következő scriptel :
Option Explicit
Dim objShell
Dim Ciklus
Set objShell = CreateObject("WScript.Shell")
Ciklus=true
While Ciklus
_ _If (objShell.AppActivate("Jegyzettömb") = False) Then
_ _ _ _objShell.AppActivate "Jegyzettömb"
_ _else
_ _ _ _Ciklus=false
_ _End If
Wend
Nos a fenti kód, csak abban az esetben aktiválja a Jegyzettömböt, ha előtte a jegyzettümb aktiv volt, és úgy lett inaktiv, hogy "mellé" kattintottam. Ha a "kis méretre állitás" gombot használtam abban az esetben a csak lent villogott a tálcán és nem jött fel a képernyőre.
Kipróbáltam az ALT+TAB-os módszert annak pediglen az a hátránya, hogy nem tudod igazából hány ALT+TAB-ot kell küldeni, hogy pontosan az az ablak aktiválódjon amit szeretnél.
Próbáld mással !
Én pl. az ilyen automatizálási folymatokat Macro Expres-vel szoktam megoldani. (Mivel ebben van olyan funkció, hogy "Run/Activate and Wait") de próbálhatod más programmal is google keresés : Windows Automation Tool : [link]
Sok sikert.
Üdv.
uhh,ez nekem "kínai".
Variáltam kicsit,az eredmény : futtatom a scriptet-tökéletes. Futtatom újra,erre ablakváltáskor hibázik (vagy nem vált át és marad az excel táblázat,vagy átvált és ott egyből ront) És érdekesség, ha hiba után visszamegyek a kezdő állapotra,és újra futtatom,akkor megint korrektül végigmegy. Következőnél megint hiba,visszaállítom, újra tökéletes.
Találtam egy ilyen magyarázatot.Nektek ez talán többet mond:
Here is the script running showing hwnd, PID, and window title (and error code). Note how when script
starts there is no active window for about two seconds (windows is waiting for your program to create
one for it to make active. It only waits 2 seconds). Usually at program starts, but also other times, for
short periods there will be no active window. You must trap this. Here's a script that does.
On error resume next
Set wso=CreateObject("WindowScriptingObject")
Do
x = wso.ActiveWindow
wscript.echo x
wscript.echo wso.windowtext(x)
wscript.echo (err.number)
err.clear
wscript.echo wso.windowpid(x)
wscript.echo (err.number)
err.clear
wscript.sleep 1000
Loop
Szia.
SimkoL a következőre gondolt (szerintem, de ez csak VBA-ban müködik, VBS-ben nen - legalábbis nállam nem megy): [link]
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Igy fel tudnád használni a Showwindow funkciót arra, hogy aktiváld a megfelelő ablakot.
De ha ezen a vonalon elindulunk akkor semmi más nem kell a dologhoz, mint egy "külső" showwindows program (tehát semmi más dolgod nincs mint irni valamilyen programozási nyelven egy ilyen showwindows programot.
Összegoogliztam egy ilyen programot és Delphiben megirtam (használd belátásod szerint) : [link]
Innen letölthető az Exe van benne meg a forrás : [link] (Nagyképüen a program neve : FAAW - FAAW.EXE-t és a FAAW.DPR-t (mint forrás fájlt) tartalmazza a zip fálj - konzolos a program)
Itt a virustotal analizis a FAAW.EXE-re : [link]
Használata : FAAW.EXE Ablak cimsora
Használható az ablak név darabja is. pl. Jegyzettömb helyett Jegyzet
De azért figyelj a következőre, egy példával illusztrálom :
Set Shell = CreateObject("WScript.Shell")
Shell.Exec("calc")
Shell.Exec("FAAW.exe Jegyzet")
Ez a Script Elinditja a Számológépet és aztán aktiválja a Jegyzettömböt (Természetesen csak akkor, ha a jegyzettömb el van inditva).
Mit vár az ember a fenti scriptől ?
Azt, hogy indditsa el a számológépet és aztán aktiválja a jegyzettömböt. Erre mi lesz az eredmény ?
Igaz, ugyan, hogy a script elinditja a számológépet, és aktiválja (legalábbis felhozza a Jegyzettömböt), de attól függetlenűl a Számológép lesz az Aktiv ablak. (???)
Ahhoz hogy ez ne igy legyen nállam be kellet rakni a scripbe egy kis késleltetést :
Set Shell = CreateObject("WScript.Shell")
Shell.Exec("calc")
WScript.Sleep 250
Shell.Exec("FAAW.exe Jegyzet")
Igy már úgy müködik ahogyan elvárnánk a scriptől, tehát Számológép elindul, a jegyzettömb pedig aktiválódik és az is lesz az aktiv ablak.
(A késleltetés valószinűleg gép függő, tehát nem biztos hogy minden gépen elég a 250 miliszekundomos késleltetés - a régebbi, lassabb gépeken biztosan több késleltetés kell)
Sok sikert.
üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!