![]() |
#1
|
|||
|
|||
Mouse pointer problem
Hi,
In one of my programs I want a DropList to appear during a run and choose an item and then hide the list and the mouse pointer again. It all works fine except that the mouse will not go away until I move it after I disabled it. I tried viz.sendEvent(viz.MOUSE_MOVE_EVENT) to simulate a mouse movement but the pointer only disappears after a real mouse movement. Is it possible to hide the mouse without physically moving it? Thanks in advance, Albert Code:
import viz import vizshape viz.go() vizshape.addGrid() viz.clearcolor(viz.GRAY) def enableMouse(): viz.mouse(viz.ON) viz.cursor(viz.ON) viz.mouse.setVisible(viz.ON) def disableMouse(): viz.mouse(viz.OFF) viz.cursor(viz.OFF) viz.mouse.setVisible(viz.OFF) drop = viz.addDropList() drop.setPosition(0.5, 0.5) drop.addItems(["a", "b", "c"]) drop.visible(viz.OFF) disableMouse() def handleKey(key): global drop if key == 'x': drop.visible(viz.ON) enableMouse() elif key == 'y': drop.visible(viz.OFF) disableMouse() viz.sendEvent(viz.MOUSE_MOVE_EVENT) # does not work, I must move the real mouse to make the pointer go away viz.callback(viz.KEYBOARD_EVENT, handleKey) |
#2
|
|||
|
|||
I ran into a similar issue a few years ago. What I came up with is show below. I found this function that acts as if the mouse has been moved and the left button clicked.
Code:
from ctypes import * import time, win32con, win32gui PUL = POINTER(c_ulong) class KeyBdInput(Structure): _fields_ = [("wVk", c_ushort), ("wScan", c_ushort), ("dwFlags", c_ulong), ("time", c_ulong), ("dwExtraInfo", PUL)] class HardwareInput(Structure): _fields_ = [("uMsg", c_ulong), ("wParamL", c_short), ("wParamH", c_ushort)] class MouseInput(Structure): _fields_ = [("dx", c_long), ("dy", c_long), ("mouseData", c_ulong), ("dwFlags", c_ulong), ("time",c_ulong), ("dwExtraInfo", PUL)] class Input_I(Union): _fields_ = [("ki", KeyBdInput), ("mi", MouseInput), ("hi", HardwareInput)] class Input(Structure): _fields_ = [("type", c_ulong), ("ii", Input_I)] class POINT(Structure): _fields_ = [("x", c_ulong), ("y", c_ulong)] def click(x,y): orig = POINT() windll.user32.GetCursorPos(byref(orig)) windll.user32.SetCursorPos(x,y) FInputs = Input * 2 extra = c_ulong(0) ii_ = Input_I() ii_.mi = MouseInput( 0, 0, 0, 2, 0, pointer(extra) ) ii2_ = Input_I() ii2_.mi = MouseInput( 0, 0, 0, 4, 0, pointer(extra) ) x = FInputs( ( 0, ii_ ), ( 0, ii2_ ) ) windll.user32.SendInput(2, pointer(x), sizeof(x[0])) return orig.x, orig.y click(1,1) and it's like you clicked it at the location x=1,y=1. For me, the mouse click was actually more important than moving the mouse, so I ended up modifying the the code so that instead of moving the mouse to the passed x and y, I just kept it at the same point and performed the mouse click. Aaron |
#3
|
|||
|
|||
Thanks Aaron, windll.user32.SetCursorPos(x,y) solved my problem.
|
![]() |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
viz.STEREO mouse problem | moneim230 | Vizard | 0 | 12-05-2010 01:32 AM |
mouse pointer | shahramy | Vizard | 3 | 09-07-2010 03:22 PM |
Laser Pointer Question (Again) | Elittdogg | Vizard | 5 | 09-08-2009 01:02 PM |
how to make the mouse pointer pain... | yak | Vizard | 0 | 05-30-2009 08:05 PM |
Mouse problem | steve | Vizard | 7 | 07-14-2005 04:01 PM |