Kódból mozgassuk az egeret és kattintgassuk bőszen!

2018. március 31. - Office Guru

Alapvetően VBA-t főleg az Office-programok manipulálására, adatok mozgatására, formázására, levelek küldésére, Access-adatbázisok frissítésére stb. használunk, ha ki kell nyúlnunk mondjuk Excelen kívülre, akkor ott azért beleütközhetünk korlátokba, ezért általában bizonyos, Officeon kívüli dolgok megvalósításához inkább már más megoldások szoktak képbe jönni. Ettől függetlenül simán megtörténhet, hogy egy makró részeként meg akarunk nyitni egy weblapot, majd a weblapon be akarunk pötyögni valamit és esetleg egy gombra is rá akarunk nyomni. A weblap megnyitásról korábban már volt szó itt a blogon, úgyhogy a mai posztban az egér kurzorját fogjuk megmozdítani és kattintunk is vele kettőt, felhasználva az erre a célra leggyakrabban használt standard módszert.

Csak azért, hogy legyen valamilyen keretünk, adott a következő gomb:

mozgatas1.JPGMegnyomása után szeretnénk, ha az egérkurzorunk elmozdulna lefelé és duplán belekattintana az F14-es cellába. Ennek érdekében rendeljünk hozzá egy makrót a gombhoz, majd az ALT+F11 lenyomásával lépjünk be VBA-ba. Mielőtt a konkrét mozgatós és kattintós szubrutinba ugranánk, deklarálunk kell egy funkciót a kurzorunk pozíciójának beállításához és az egérgombok eseményeihez egy szubrutint. Ez alapvetően standard, tehát be is másolom ide:

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Az Excelnek ugyebár nincs beépített funkciója a kurzor pozíciójának meghatározásához vagy beállításához, de egy API segítségével hozzáférhetünk a user32.dll-ben tárolt SetCursorPos funkcióhoz (a GetCursosPos segítségével a jelenlegi pozíciót kaphatjuk vissza), ami ugyebár segíteni fog beállítani a kurzor helyét. ByVal X és ByVal Y a konkrét koordináták változói. A második deklaráció szintén a user32.dll-ben tárolt mouse_event szubrutint fogja megszólítani, ami segít az egér lehetőségeit használni. A dwFlags paraméter a konkrét egéreseményeket jelenti, ide kerülhet például egy MOUSEEVENTF_LEFTDOWN esemény, ami egy bal egérgomb lenyomását jelenti. A dx az egér kurzorának abszolút helyzetét jelenti az X tengely mentén, a dy pedig az y tengely mentén, dwExtraInfo pedig esetlegesen szükséges extra információk begyűjtését teszi lehetőve a dll-ből. Ezután pedig jöjjön a két, bal egérgomb lenyomásához kapcsolódó esemény deklarálása, ez a MOUSEEVENTF_LEFTUP és MOUSEEVENTF_LEFTDOWN.

Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4

A kérdés biztos felmerül bennetek, hogy mi a fene az a &H2 vagy éppen &H4. Amikor egy szám előtt &H áll, az azt jelenti, hogy az utána következő karakter egy hexadecimális szám, tehát &H2 konkrétan a kettes szám.

Ha megvannak ezek a deklarációk, akkor jöhet a konkrét mozgató szubrutin:

Private Sub Mozgatas()
SetCursorPos 400, 180
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

A SetCursorPos funkció értelemszerűen X és Y tengelyen megadott pixelszám szerint elmozdítja a kurzort, példánk esetében tehát a kurzor új koordinátája a képernyőn X: 400 és Y: 180. A mouse_event funkció első paramétere a konkrét egéresemény, jelen esetben a bal egérgomb lenyomása, második paramétere az x, harmadik paramétere az y koordináta, de mi most csak kattintani szeretnénk, ezért ezek nullák. A negyedik paraméter a dwData, itt csak akkor vesz fel értéket, ha az egér görgőjével akarunk valamit csinálni, tehát az első paraméter a MOUSEEVENTF_WHEEL lenne. Az utolsó nulla pedig a dwExtraInfo, nekünk erre nincs szükségünk.

És azért dupláztuk meg a sorokat, mert lenyomjuk-felengedjük-lenyomjuk-felengedjük, tehát duplakattintást szimulálunk.

mozgatas2.JPG

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr7313796518

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.