मान लें कि मुझे एक खिड़की मिली है जिसके लिए मैं माउस को अनुकरण करना चाहता हूं एक विशिष्ट एक्स, वाई समन्वय पर क्लिक करें। मेरे पास पहले से ही एचडब्ल्यूएन है लेकिन मुझे यकीन नहीं है कि एलपीएआरएम का निर्माण कैसे करें। मैंने अतीत में SendMessage का उपयोग बटन, इत्यादि पर पर क्लिक करने के लिए किया है, लेकिन मुझे उनके hwnds पता था। किसी भी मदद की सराहना की जाएगी। मैं भी मदद नहीं कर सकता लेकिन आश्चर्यचकित हूं कि मैं इस बारे में सही तरीके से जा रहा हूं। मेरा अंतिम लक्ष्य स्काइप मुख्य विंडो (उदाहरण के लिए) पर एक निश्चित उपयोगकर्ता पर क्लिक कर रहा है। मैंने सभी मुख्य विंडो के बच्चों को खोजने के लिए EnumChildWindows का उपयोग किया, लेकिन सही नहीं मिला। तो लगा कि मैं निर्देशांक का उपयोग करके उस पर 'क्लिक' करने का प्रयास करूंगा।पायथन win32 अनुकरण
उत्तर
आप निम्न स्तर की विंडोज़ एपीआई का उपयोग कर सकते हैं। एक उदाहरण देखें (कुछ से अनुकूलित मैं इसे परीक्षण नहीं किया था लेकिन यह ठीक होना चाहिए)
import ctypes
MOUSEEVENTF_MOVE = 0x0001 # mouse move
MOUSEEVENTF_ABSOLUTE = 0x8000 # absolute move
MOUSEEVENTF_MOVEABS = MOUSEEVENTF_MOVE + MOUSEEVENTF_ABSOLUTE
MOUSEEVENTF_LEFTDOWN = 0x0002 # left button down
MOUSEEVENTF_LEFTUP = 0x0004 # left button up
MOUSEEVENTF_CLICK = MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP
def click(x, y):
#move first
x = 65536L * x/ctypes.windll.user32.GetSystemMetrics(0) + 1
y = 65536L * y/ctypes.windll.user32.GetSystemMetrics(1) + 1
ctypes.windll.user32.mouse_event(MOUSEEVENTF_MOVEABS, x, y, 0, 0)
#then click
ctypes.windll.user32.mouse_event(MOUSEEVENTF_CLICK, 0, 0, 0, 0)
अद्यतन: मैं नीचे दिए गए कोड का परीक्षण नहीं किया था लेकिन मुझे लगता है कि यह मदद करनी चाहिए तुम्हें कुछ लिखने के लिए बच्चे की स्थिति पाएं फिर आप सही स्थिति पर क्लिक करने का प्रयास कर सकते हैं।
CHILD= None
def the_callback(child_hwnd, regex):
'''Pass to win32gui.EnumWindows() to check all the opened windows'''
if re.match(regex, win32gui.GetWindowText(child_hwnd)):
CHILD= child_hwnd
win32gui.EnumChildWindows(hwnd, the_callback, regex)
if CHILD:
(x_tl, y_tl, x_br, y_br) = win32gui.GetWindowRect(CHILD)
मुझे लगता है कि यह आपके लिए अच्छा है, आप इसे सीधे या अपने पायथन कार्यक्रम में आयात कर सकते हैं।
"""mousemacro.py defines the following functions:
click() -- calls left mouse click
hold() -- presses and holds left mouse button
release() -- releases left mouse button
rightclick() -- calls right mouse click
righthold() -- calls right mouse hold
rightrelease() -- calls right mouse release
middleclick() -- calls middle mouse click
middlehold() -- calls middle mouse hold
middlerelease() -- calls middle mouse release
move(x,y) -- moves mouse to x/y coordinates (in pixels)
getpos() -- returns mouse x/y coordinates (in pixels)
slide(x,y) -- slides mouse to x/y coodinates (in pixels)
also supports optional speed='slow', speed='fast'
"""
from ctypes import*
from ctypes.wintypes import *
from time import sleep
import win32ui
__all__ = ['click', 'hold', 'release', 'rightclick', 'righthold', 'rightrelease', 'middleclick', 'middlehold', 'middlerelease', 'move', 'slide', 'getpos']
# START SENDINPUT TYPE DECLARATIONS
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)]
# END SENDINPUT TYPE DECLARATIONS
# LEFTDOWN = 0x00000002,
# LEFTUP = 0x00000004,
# MIDDLEDOWN = 0x00000020,
# MIDDLEUP = 0x00000040,
# MOVE = 0x00000001,
# ABSOLUTE = 0x00008000,
# RIGHTDOWN = 0x00000008,
# RIGHTUP = 0x00000010
MIDDLEDOWN = 0x00000020
MIDDLEUP = 0x00000040
MOVE = 0x00000001
ABSOLUTE = 0x00008000
RIGHTDOWN = 0x00000008
RIGHTUP = 0x00000010
FInputs = Input * 2
extra = c_ulong(0)
click = Input_I()
click.mi = MouseInput(0, 0, 0, 2, 0, pointer(extra))
release = Input_I()
release.mi = MouseInput(0, 0, 0, 4, 0, pointer(extra))
x = FInputs((0, click), (0, release))
#user32.SendInput(2, pointer(x), sizeof(x[0])) CLICK & RELEASE
x2 = FInputs((0, click))
#user32.SendInput(2, pointer(x2), sizeof(x2[0])) CLICK & HOLD
x3 = FInputs((0, release))
#user32.SendInput(2, pointer(x3), sizeof(x3[0])) RELEASE HOLD
def move(x,y):
windll.user32.SetCursorPos(x,y)
def getpos():
global pt
pt = POINT()
windll.user32.GetCursorPos(byref(pt))
return pt.x, pt.y
def slide(a,b,speed=0):
while True:
if speed == 'slow':
sleep(0.005)
Tspeed = 2
if speed == 'fast':
sleep(0.001)
Tspeed = 5
if speed == 0:
sleep(0.001)
Tspeed = 3
x = getpos()[0]
y = getpos()[1]
if abs(x-a) < 5:
if abs(y-b) < 5:
break
if a < x:
x -= Tspeed
if a > x:
x += Tspeed
if b < y:
y -= Tspeed
if b > y:
y += Tspeed
move(x,y)
def click():
windll.user32.SendInput(2,pointer(x),sizeof(x[0]))
def hold():
windll.user32.SendInput(2, pointer(x2), sizeof(x2[0]))
def release():
windll.user32.SendInput(2, pointer(x3), sizeof(x3[0]))
def rightclick():
windll.user32.mouse_event(RIGHTDOWN,0,0,0,0)
windll.user32.mouse_event(RIGHTUP,0,0,0,0)
def righthold():
windll.user32.mouse_event(RIGHTDOWN,0,0,0,0)
def rightrelease():
windll.user32.mouse_event(RIGHTUP,0,0,0,0)
def middleclick():
windll.user32.mouse_event(MIDDLEDOWN,0,0,0,0)
windll.user32.mouse_event(MIDDLEUP,0,0,0,0)
def middlehold():
windll.user32.mouse_event(MIDDLEDOWN,0,0,0,0)
def middlerelease():
windll.user32.mouse_event(MIDDLEUP,0,0,0,0)
if __name__ == '__main__':
while 1:
move(10,1)
धन्यवाद यह ठीक दिखता है – nabizan
यह पूरी तरह से कमाल है! धन्यवाद। – IronManMark20
- 1. win32: माउस आंदोलन अनुकरण किए बिना एक क्लिक अनुकरण करें?
- 2. एक पायथन Win32 सेवा
- 3. पायथन Win32 एक्सटेंशन प्रलेखन
- 4. Win32
- 5. आयरन पायथन, सुंदर सूप, win32 ऐप
- 6. Win32
- 7. WIN32
- 8. Win32
- 9. Win32
- 10. Win32
- 11. WIN32
- 12. Win32
- 13. Win32
- 14. Win32
- 15. Win32
- 16. Win32
- 17. WIN32
- 18. mysqldb python 2.6+ (win32)
- 19. सी ++ Win32, एक Win32 DialogBox
- 20. #if परिभाषित (WIN32) और #ifdef (WIN32)
- 21. पायथन Win32 कॉम: 'आउट' पैरामीटर को कैसे संभालें?
- 22. पायथन के साथ win32 एपीआई का उपयोग कैसे करें?
- 23. SQLite FTS3 अनुकरण की तरह अनुकरण%
- 24. क्या सी में पायथन ट्यूपल्स का अनुकरण करना संभव है?
- 25. अनुकरण माउस आंदोलन
- 26. Win32 एपीआई
- 27. Win32 एपीआई
- 28. Win32 पर्ल
- 29. Win32: hwnd
- 30. Win32 रजिस्ट्री
हाय त्वरित उत्तर के लिए धन्यवाद। बीटीडब्ल्यू कहता है कि आपके पास मुख्य खिड़की और उनके बच्चों की खिड़कियों का गुच्छा भी उनके hwnds के साथ है ... क्या आप जानते हैं कि मैं उन सभी बच्चों में कुछ विशिष्ट टेक्स्ट सामग्री कैसे देख सकता हूं? और सही एक की पहचान करें ताकि मैं इस पाठ (लिंक) पर क्लिक कर सकूं? ... – nabizan
@nabizan: मेरा अपडेट देखें। मुझे उम्मीद है कि अगर यह गलत है तो – luc
हमम मुझे सही करने में मदद करता है लेकिन * .GetWindowText केवल विंडो का शीर्षक देता है। यह मेरे लिए कुछ नया है और मुझे नहीं पता कि यह वास्तव में कैसे काम कर रहा है, लेकिन मुझे लगता है कि जब भी आप कुछ जटिल ऐप (जैसे फोटोशॉप) की खिड़की खोलते हैं तो आपको मुख्य एचडब्ल्यूएन और बच्चों की खिड़कियां मिलती हैं (उनके पास शीर्षक नहीं होता है) तो सबसे पहले आपको एक विशिष्ट बाल खिड़की की खोज करना है उदाहरण के लिए कुछ यादृच्छिक जेनरेट किए गए लिंक के साथ और इसके बाद आप इसे क्लिक कर सकते हैं ... मुझे नहीं पता कि यह सही तरीके से अंधा जा रहा है, तो – nabizan