通过python脚本

时间:2018-04-20 21:48:20

标签: python windows pywin32 pywinauto

我正在编写一个旨在供项目团队成员使用的脚本。作为脚本的一部分,我正在推出通过Citrix运行的第三方专有应用程序。我将主要使用脚本向此应用程序发送密钥,但启动后的第一步是用户登录。

因为我希望用户在脚本运行时登录,而不是先前从某种GUI输入请求用户/传递,并且因为Citrix启动所需的时间各不相同,所以我想包括一些一种逻辑,用于检测用户何时登录,然后从那里恢复脚本,而不是包含令人讨厌的长时间隐式等待或冒出脚本超时的风险。

有没有办法使用win32com.client检测用户击键(或检测应用程序本身状态的变化)?请参阅下面的相关代码以启动应用程序:

import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.Run('C:\Citrix\[rest of path])

编辑: 根据瓦西里在下面评论中提出的建议,我试图使"hook and listen" code适应我的情景,但没有成功。当我启动我的文件时,我甚至没有在终端中收到异常消息,我得到一个Windows弹出窗口,说Python遇到了问题并需要退出。

这是我改编它的方式:

#[omitting import lines for brevity]
def on_timer():
    """Callback by timer out"""
    win32api.PostThreadMessage(main_thread_id, win32con.WM_QUIT, 0, 0);


def on_event(args):
    """Callback for keyboard and mouse events"""
    if isinstance(args, KeyboardEvent):
        for i in range(1,100):
            time.sleep(1)
            if args.pressed_key == 'Lcontrol':
                break

def init():
    hk = Hook()
    hk.handler = on_event
    main_thread_id = win32api.GetCurrentThreadId()
    t = Timer(55.0, on_timer)  # Quit after 55 seconds
    t.start()
    hk.hook(keyboard=True, mouse=True)

当第三方Citrix应用程序开始在我的主脚本中启动时,我调用hookandlisten.init()。

提醒一下,我的目标是等到用户发出某个击键(这里我选择了Control),然后继续执行主脚本的其余部分。

0 个答案:

没有答案