2014-02-08 178 views
2

我试图通过按下退出键退出循环,但我的程序无法正常工作。有没有办法做到这一点? 我的代码:按退出键退出循环

import win32api 
import win32con 
import time 
from msvcrt import kbhit,getch 

def clickerleft(x,y): 
    """Clicks on given position x,y 

    Input: 
    x -- Horizontal position in pixels, starts from top-left position 
    y -- Vertical position in pixels, start from top-left position 

    """ 

    win32api.SetCursorPos((x,y)) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0) 


def fonctionclic(): 
    while True : 
     clickerleft(1193,757) 
     time.sleep(0.1) 

while True : 
    key = ord(getch()) 
    if key == 97: #a 
     fonctionclic() 
    elif key == 27: #escap 
     break 

回答

2

这不是我清楚你想与你在你的代码有两个while True循环来完成什么—所以我删除其中的一个心想也许这你想要做什么:

import msvcrt 
import win32api 
import win32con 
import time 

def readch(): 
    """ Get a single character on Windows. 
    see http://msdn.microsoft.com/en-us/library/078sfkak 
    """ 
    ch = msvcrt.getch() 
    if ch in b'\x00\xe0': # arrow or function key prefix? 
     ch = msvcrt.getch() # second call returns the actual key code 
    return ch 

def clickerleft(x,y): 
    """Clicks on given position x,y 

    Input: 
     x -- Horizontal position in pixels, starts from top-left position 
     y -- Vertical position in pixels, start from top-left position 
    """ 
    win32api.SetCursorPos((x,y)) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0) 

print('Press Esc to quit or "a" to simulate mouse click') 
while True : 
    if msvcrt.kbhit(): 
     key = ord(readch()) 
     if key == 97: # ord('a') 
      clickerleft(1193,757) 
     elif key == 27: # escape key 
      break 
    time.sleep(0.1) 
print('Done') 
+0

感谢您的回答,但我该如何处理点击功能中的while循环。 – user3144427

+0

查看更新的答案。请注意,在我的系统上,模拟点击转移焦点远离我用来运行脚本的控制台窗口。 – martineau