Python win32api.SetCursorPos проблема с двумя экранами
Я пытаюсь создать простую программу, которая будет щелкать по определенным координатам каждые x секунд на основе вашего выбора, если вам нужно нажать на левый экран или правый экран. Моя проблема здесь в том, что win32api.SetCursorPos, который перемещается с моим курсором, не перемещается на дополнительный экран (прямо в моем случае). Он остается на главном экране.
И у меня есть еще одна проблема с моим кодом, когда нажата кнопка "Выход" внутри графического интерфейса, окно закроется, но программа все еще работает в фоновом режиме. Я использую функцию self.Destroy(), чтобы убить весь процесс.
Спасибо за совет.
Вот мой код:
import time
import pyautogui
import wx
import threading
import sys
import win32api
class bucky(wx.Frame):
def __init__(self,parent,id):
self.positionx = ""
self.positiony = ""
wx.Frame.__init__(self,parent,id,'AutoClick 2.0', size=(300,200))
panel=wx.Panel(self)
self.buttonpos=wx.Button(panel,label="Left Screen",pos=(30,10),size=(80,40))
self.buttonpos2=wx.Button(panel,label="Right Screen",pos=(180,10),size=(80,40))
self.button=wx.Button(panel,label="Start",pos=(120,90),size=(60,30))
self.button2=wx.Button(panel,wx.ID_EXIT,label="Exit",pos=(120,120),size=(60,30))
self.Bind(wx.EVT_BUTTON, self.action, self.button)
self.Bind(wx.EVT_BUTTON, self.closebutton, self.button2)
self.Bind(wx.EVT_BUTTON, self.position, self.buttonpos)
self.Bind(wx.EVT_BUTTON, self.position, self.buttonpos2)
self.Bind(wx.EVT_CLOSE, self.closewindow)
def position(self, event):
label = event.GetEventObject().GetLabel()
if label == "Left Screen":
self.positionx = 1640
self.positiony = 183
self.buttonpos.Disable()
self.buttonpos2.Enable()
elif label == "Right Screen":
self.positionx = 3308
self.positiony= 186
self.buttonpos.Enable()
self.buttonpos2.Disable()
def closebutton(self,event):
self.Destroy()
def closewindow(self,event):
self.Destroy()
def action(self,event):
self.button.Disable()
def callback():
while 1:
pos = pyautogui.position()
time.sleep(10)
pos1 = pyautogui.position()
if (pos1[0] == pos[0]) and (pos1[1] == pos[1]):
win32api.SetCursorPos((self.positionx, self.positiony))
pyautogui.click()
else:
pass
t = threading.Thread(target=callback)
t.start()
if __name__=='__main__':
app=wx.PySimpleApp()
frame=bucky(parent=None,id=1)
frame.Show()
app.MainLoop()
РЕДАКТИРОВАТЬ: проблема была решена. Спасибо за помощь.
1 ответ
Глядя на это сообщение Reddit, я думаю, что координаты x для дополнительного монитора просто добавляются к разрешению основного монитора (например, если у вас было два монитора 1920x1080, середина второго монитора будет 2880,520)
Попробуйте использовать (win32api.GetSystemMetrics(MONITOR_NUMBER)
чтобы увидеть, как представлены различия.