【问题标题】:Python Script to Exe Win32api not workingExe Win32api的Python脚本不起作用
【发布时间】:2015-08-18 11:43:41
【问题描述】:

我尝试寻找可能有人遇到但找不到的类似问题。长话短说。我整理了一个 python 脚本,它创建一个文件并写入它并从中读取。然后,我使用 nssm-2.24 创建了 .exe,并将 exe 作为服务安装,它可以工作。

然后我创建了第二个脚本,它从 python 模块调用 win32api 和 win32con,只需在屏幕上移动鼠标并执行一两次点击。这可以在 python 中工作,并且在编译为 .exe 时工作。

当我将第二个 exe 作为服务安装时,它显示为服务并运行,但鼠标不会在屏幕上移动。

Code below:
import autopy
import time
import win32api
import win32con

def click(x, y):
    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 move_mouse_around():
    time.sleep(300)
    autopy.mouse.smooth_move(500,500)
    time.sleep(.`enter code here`5)
    autopy.mouse.smooth_move(200,200)
    time.sleep(1.5)
    autopy.mouse.smooth_move(200,600)
    time.sleep(1)
    autopy.mouse.smooth_move(200,500)
    time.sleep(1)
    autopy.mouse.smooth_move(200,400)
    time.sleep(1)
    autopy.mouse.smooth_move(400,200)
    time.sleep(.5)
    autopy.mouse.smooth_move(400,300)
    time.sleep(.5)
    autopy.mouse.smooth_move(400,400)
    time.sleep(.5)
    autopy.mouse.smooth_move(400,450)
    time.sleep(1)

    autopy.mouse.smooth_move(50,50)
    time.sleep(1)

    click(50,50)
    click(50,50)
    time.sleep(.5)
    autopy.mouse.smooth_move(50,150)
    click(50,150)

    autopy.mouse.smooth_move(500,500)
    time.sleep(.5)
    autopy.mouse.smooth_move(200,200)
    time.sleep(1.5)
    autopy.mouse.smooth_move(200,600)
    time.sleep(1)
    autopy.mouse.smooth_move(200,500)
    time.sleep(1)
    autopy.mouse.smooth_move(200,400)
    time.sleep(1)
    autopy.mouse.smooth_move(400,200)
    time.sleep(.5)
    autopy.mouse.smooth_move(400,300)
    time.sleep(.5)
    autopy.mouse.smooth_move(400,400)
    time.sleep(.5)
    autopy.mouse.smooth_move(400,450)
    time.sleep(1)

    autopy.mouse.smooth_move(17,50)
    click(17,50)
    click(17,50)
    time.sleep(1.5)


def close_window():
    autopy.mouse.smooth_move(1360,5)
    click(1360,5)
    time.sleep(30)




#close_window()


while True:
    move_mouse_around()

【问题讨论】:

  • 用您尝试过的代码更新您的问题。
  • 您不能通过服务运行 GUI 程序。
  • @martineau 的评论不准确。您无法通过服务与交互式桌面进行交互。

标签: python winapi service


【解决方案1】:

服务在非交互式会话(会话 0)中执行,因此与用户的交互式桌面隔离。用户在会话 1、会话 2 等中拥有桌面。

所有这一切意味着您无法通过服务与用户的桌面进行交互。您必须在用户会话中执行此代码,与用户在同一桌面上。

【讨论】:

  • 更多信息参见Service Changes for Windows Vista: Session 0 Isolation
  • 谢谢,我的印象是桌面可以通过服务进行交互。这解释了为什么一项服务有效而另一项服务无效。这是我想了解的。德克萨斯州大卫
猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2015-03-31
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多