Toon posts:

[VBS] Sendkeys ( maar venster is wel/niet "actief" )

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo tweakers,

ik heb een vbscript die uiteindelijk een reeks sendkeys uitvoert, alles werkt goed op 1 ding na. Het betreft een Mcafee installatie. Nadat de sendkeys zijn uitgevoerd opent mcafee een nieuw venster, deze maken we actief met "AppActivate". Vervolgens is de venster geselecteerd, MAAR nu kun je geen toetsenbord commandos invoeren DUS ook geen sendkeys gebruiken. Dit werkt pas nadat je met de linkermuisknop in het venster een willekeurige click maakt, vervolgens kunnen er wel toetsenbord commando's worden uitgevoerd.

Het ligt dus aan de venster van Mcafee die niet aan te passen is zonder muis klik in het venster.

Weet iemand hier een oplossing op ?


Mvg,
Andre

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

Als je geluk hebt, staat de focus van het window op een control die geen toetsen accepteert.
Door een {tab} te sturen kun je de focus naar een andere control verplaatsen.

Overigens is SendKeys een uiterst onbetrouwbare methode. 'k Zou zeker kijken naar andere methoden om je software te distribueren; dacht dat McAfee daar een of andere server component voor had, om de client software te pushen.

QnJhaGlld2FoaWV3YQ==


Verwijderd

Topicstarter
Hoi Brahiewahiewa ,

bedankt voor je replay. Ik gebruik sendkeys omdat de script voor clients die niet weten hoe ze het pakket moeten installeren. Hierbij maakt de security nietzoveel uit.

Ook na een tab krijg ik nergens een focus in de venster. Het maakt niet uit welk toetsenbord knop ik indruk, er komt nergens een focus in de venster, alleen nadat er met de muis ergens is geclickt.

Is er misschien een speciale toetsencombo om dit toch naarvoren te krijgen zonder muisclick ? of misschien eens sendkey voor een muisclick op de betreffende venster?

Mvg,
Andre

Verwijderd

Als je een MSI aangeleverd hebt gekregen dan moet je even een MST maken, of gewoon een silent installatie draaien(msiexec /i mcaffee.msi /qb-). Anders even bij MCAffee zoeken naar silent installation of de administrators guide. Setup.exe /s wil ook nog wel eens werken.

Verwijderd

Topicstarter
Bedankt Freggle010,

ik kan de gebruiker ook deze handeling handmatig laten uitvoeren. Ik ben nieuwe met het scripten.

Weet iemand hoe ik een onclick event in de script kan plaatsen?

Momenteel vind ik alleen topics over asp (html) pagina's die dit mogelijk maken. Dan sla ik die stap even over en kijken hoe dit uitpakt, nadat de focus er zit kan de rest vanzelf weer verder.

Verwijderd

http://www.autoitscript.com/autoit3/downloads.php

Kijk hier eens naar, een nadeeltje is dat je elke pc het com object van Autoit moet zetten.
Maar dan heb je ook meer controle over je windows.

Even voor de duidelijkheid bij vergeten te vertellen dat je met de Com dll muis kliken op een positie van het scherm kan geven.

[ Voor 26% gewijzigd door Verwijderd op 17-01-2006 14:10 ]


Verwijderd

Topicstarter
LordWarlock bedankt,

maar dan zul je zeker ook een code moeten schrijven om de resolutie etc te detecteren?

Ik denk dat het maar op een andere manier zal moeten :-P.

Toch bedankt allemaal.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-04 22:58

Janoz

Moderator Devschuur®

!litemod

Ik snap niet waarom je dit met een VBScript aan het proberen bent en de opmerking van Freggle010 zo naast je neer legt. Daarnaast is de sendkeys oplossing erg onbetrouwbaar zoals Brahiewahiewa ook al zegt en onbetrouwbaar heeft hier niks te maken met security.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

In mijn ervaring maakt het niet uit wat voor een resolutie het scherm staat. Meestal staan de installatie schermen op dezelfde plek. De cordinaten die Autoit gebruikt zijn relatief en dus voor alle resolutie's te gebruiken.

Ik heb een paket op mijn werk naar 5000 werkplekken uitgerold op deze manier, waarbij minder dan 1 procent problemen zijn ontstaan.

Ik zou zeggen speel er een keer me. De mogelijkheden worden met deze DLL heel wat groter.

  • TheVMaster
  • Registratie: Juli 2001
  • Laatst online: 17-04 20:26

TheVMaster

Moderator WOS
Brahiewahiewa schreef op dinsdag 17 januari 2006 @ 11:48:
Als je geluk hebt, staat de focus van het window op een control die geen toetsen accepteert.
Door een {tab} te sturen kun je de focus naar een andere control verplaatsen.

Overigens is SendKeys een uiterst onbetrouwbare methode. 'k Zou zeker kijken naar andere methoden om je software te distribueren; dacht dat McAfee daar een of andere server component voor had, om de client software te pushen.
McAfee heeft daar idd een servercomponent voor (of in ieder geval dat hadden ze..) ben alleen de naam ff kwijt :(

En als je de ppl wilt verspreiden zou ik niet voor Sendkeys gaan maar zoals al eerder genoemd voor een MST! :)

  • kunnen
  • Registratie: Februari 2004
  • Niet online
Je kunt ook via enkele windows api's de muis bedienen, en zo ergens in het venster klikken. Ik deed dit laatst zo:


Ruby:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def klikKnop(knopnr)        
    hwnd = GetForegroundWindow.call()
    venster = Window.new(hwnd,"a")
    titel = venster.getWindowText
    
    if titel['deelVanTitle']
        #Get window location
            lpRect = " " * 16 # Four LONGs
            getWindowRect = Win32API.new("user32", "GetWindowRect", ['P','P'], 'V')
            getWindowRect.call(hwnd, lpRect)
            wleft, wtop, wright, wbottom = lpRect.unpack('LLLL')
        
        #Set the positions  
            y = 115
            x = 162 if knopnr==1
            x = 283 if knopnr==2
            x = 379 if knopnr==3
        
            puts "Clicking button " + knopnr.to_s + "..." if $debug
            
        #Store the old mouse position
            lpRect = " " * 16 # Four LONGs
            GetCursorPos.call(lpRect)
            oldleft, oldtop, oldright, oldbottom = lpRect.unpack('LLLL')
        
                #X&Y contain the left & right within the window, we need it within the screen, so:
            y = wtop + y
            x = wleft + x
            
        #Set new mouse position 
            setCursorPos = Win32API.new("user32", "SetCursorPos", ['I','I'], 'V')
            setCursorPos.Call(x,y)
            
        #Click
            Mouse_event.call(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 1)
            sleep(0.01)
            Mouse_event.call(MOUSEEVENTF_LEFTUP, 0, 0, 0, 1)
            sleep(0.01)
        #Reset to old positions
            setCursorPos = Win32API.new("user32", "SetCursorPos", ['I','I'], 'V')
            setCursorPos.Call(oldleft,oldtop)
end

(Ruby code - alle functies met .call kun je opzoeken in de windows API's)

Als je dus bij het x=... en y=... de coordinaten weet, kun je zo een knop binnen het venster aanklikken/gewoon ergens klikken en de muis terug zetten.

[ Voor 36% gewijzigd door kunnen op 17-01-2006 18:38 ]

Pagina: 1