标签: pythoncom

ImportError:没有名为pywintypes的模块

我正在使用pyHook,pythoncom和Pywin32模块,用Python制作一个小型键盘记录器.这是我的代码:

import pyHook, pythoncom, sys, logging

file_log = 'C:\\important\\log.txt'

def OnKeyboardEvent (event):
    logging.basicConfig(filename=file_log, level=logging.DEBUG, format='%(message)s')
    chr(event.Ascii)
    logging.log(10, chr(Event.Ascii))
    return True
hooks_manager=pyHook.HookManager()
hooks_manager.KeyDown = OnKeyboardEvent
hooks_manager.HookKeyboard()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

运行时,它会返回以下错误消息:

 File "C:\Python27\lib\site-packages\pythoncom.py", line 2, in <module>
    import pywintypes
ImportError: No module named pywintypes
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

python pywin32 keylogger pythoncom pyhook

11
推荐指数
3
解决办法
3万
查看次数

当钩子连接到某些应用程序时,pythoncom在KeyDown上崩溃

我写了这段代码来观察keydown动作的事件.问题似乎是,当运行此脚本时,某些程序将使此程序崩溃,并吐出此错误消息:

TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_
code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'
Run Code Online (Sandbox Code Playgroud)

一些被发现崩溃的程序是:Skype,Sublime Text 2

在调试它的几次试验之后,问题似乎发生在最后一行,但我似乎无法缩小范围.我也不明白编译器返回的KeyboardSwitch()的含义......

我还发现程序会交替返回此错误消息

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pyHook\HookManager.py", line 351, in KeyboardSwitch
    return func(event)
  File "observe.py", line 6, in OnKeyboardEvent
    print ('MessageName:',event.MessageName)
TypeError: an integer is required (got type NoneType)
Run Code Online (Sandbox Code Playgroud)

原因是什么以及如何解决这个问题,特别是因为它只出现在按下的两个键中

import pyHook, pythoncom

def OnKeyboardEvent(event):
# Source: http://code.activestate.com/recipes/553270-using-pyhook-to-block-windows-keys/ 
    print ('MessageName:',event.MessageName)
    print ('Message:',event.Message)
    print ('Time:',event.Time)
    print ('Window:',event.Window)
    print ('WindowName:',event.WindowName)
    print ('Ascii:', event.Ascii, chr(event.Ascii))
    print ('Key:', event.Key)
    print ('KeyID:', …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pythoncom pyhook

11
推荐指数
2
解决办法
5859
查看次数

Python通过win32com运行MessageQueue.Peek,如何正确设置超时时间?

首先,我想说如果有人可以在这里提供帮助,您真是不可思议。

一般问题

我的Python程序需要与MSMQ进行交互。基本上,我想窥视一个队列,如果队列中没有任何内容,则指定一个超时。

但是,尽管我已尽力而为,但当队列中先前没有任何值时,我无法让Peek()等待超时间隔。 您能否指出此代码中缺少的内容?


我当前的代码

现在是我的代码:

from socket import gethostname

import win32com.client
import pythoncom

import clr
clr.AddReference("System")
clr.AddReference("System.Messaging")
from System import TimeSpan
from System.Messaging import MessageQueue


# Source: [1]
# [1] https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms707027%28v%3dvs.85%29
MQ_DENY_NONE = 0x0
MQ_PEEK_ACCESS = 0x1
MQ_SEND_ACCESS = 0x2


# Set up queue
pythoncom.CoInitialize()
qinfo = win32com.client.Dispatch("MSMQ.MSMQQueueInfo")
qinfo.FormatName = f"direct=os:{gethostname()}\\PRIVATE$\\MyQueue"
queue = qinfo.Open(MQ_PEEK_ACCESS, MQ_DENY_NONE)

# Receive a value
timeout_sec = 1.0
timespan = TimeSpan.FromSeconds(timeout_sec)
label, body = "", ""
# TODO: timeout value does not appear working. …
Run Code Online (Sandbox Code Playgroud)

python msmq msmq-wcf win32com pythoncom

9
推荐指数
1
解决办法
98
查看次数

Python - pythoncom.PumpMessages()

我很惊讶地看到没有很多关于函数pythoncom.PumpMessages()pythoncom模块的解释文档。

那么做什么pythoncom.PumpMessages()pythoncom.PumpWaitingMessages()做什么以及如何做?我真正了解它用于从输入设备捕获事件。

python message-pump pythoncom

6
推荐指数
1
解决办法
9782
查看次数

Python win32api.mouse_event 类型错误

import sys
import win32api, win32con
import pyHook
import pythoncom

def CursorLeft():
    win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, -1, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)

def Quit():
    print "Quitting"
    sys.exit()

# create a keyboard hook
def OnKeyboardEvent(event):
    print 'MessageName:', event.MessageName
    print 'Key:', event.Key
    if event.Key in ['Numpad2']:
        CursorLeft()
    elif event.Key in ['End']:
        Quit()
    return True

def OnMouseEvent(event):
    print 'Position:', event.Position
    return True

hm = pyHook.HookManager()
hm.MouseAll = OnMouseEvent
hm.HookMouse()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

函数 CursorLeft 每隔一段时间都可以正常工作。如果没有任何负数作为参数,它也能正常工作。我完全不知道为什么会这样!

第一次打电话,很好。

第二个电话,

类型错误:需要一个整数

第三次电话,好的。

第四次通话,

类型错误:需要一个整数。

等等等等。





解决了 …

python winapi pythoncom pyhook

5
推荐指数
1
解决办法
3212
查看次数

如何使用pythonCOM将表格从excel复制到word

是否可以从excel文件中获取表格并将其粘贴到保存其excel样式的word文档中?我没有找到有关 win32com 及其所有方法的足够文档。

我找到了一个方法PasteExcelTable,我想我应该在调用这个方法之前从 excel 中选择表格。我执行以下操作:

from win32com import client
excel = client.Dispatch("Excel.Application")
word = client.Dispatch("Word.Application")
doc = word.Documents.Open("C:/word_file.docx")
book = excel.Workbooks.Open("C:/excel_file.xlsx")
sheet = book.Worksheets(1)
sheet.Range("A1:D20").Select      # Selected the table I need to copy
doc.Content.PasteExcelTable(False, False, False)
Run Code Online (Sandbox Code Playgroud)

然后它失败了。我什至不知道我是否走对了方向。

python excel ms-word win32com pythoncom

5
推荐指数
1
解决办法
6750
查看次数

使用py2exe包装时,Python Com Server无法创建实例 - 错误对象没有属性

我用这个打了一堵墙.我需要创建一个基于python的com服务器,将其打包为windows exe并将其部署在Windows上.它必须具有"完整"接口 - 因为消费者需要idispatch和特定的interfce才能运行.现在我已经创建了com服务器并让它在解释器下运行,并且它与我挑剔的客户端完美地运行.但是,当打包为EXE时 - 它是一个本地服务器 - 当系统尝试实例化时,我在日志中出现错误(即使是从vbs脚本).所以这里的每一个.我在itnernet中搜索高低,它看起来像一个导入问题,但我不知道如何导入我自己的python对象供本地服务器使用.

这是安装了pywin32扩展的python 2.7.

首先 - 我为服务器创建的IDL:

imtg.idl

// This file will be processed by the MIDL tool to
// produce the type library (imtg.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
    [
        object,
        uuid(4fafbb23-6a38-4613-b93b-68ea66c67043),
        dual,
        helpstring("IImtGroupApp Interface"),
        pointer_default(unique)
    ]
    interface IImtGroupApp : IDispatch
    {
        [id(1), helpstring("method EchoString")] HRESULT EchoString([in] BSTR in1, [out, retval] BSTR *vals);
        [id(2), helpstring("method AddNumbers")] HRESULT AddNumbers([in] long in1, [in] long in2, [out, retval] long *vali);
    };
    [
    uuid(d665e9d0-71a9-4e23-a1b4-abe3376d5c58),
    version(1.0), …
Run Code Online (Sandbox Code Playgroud)

python pywin32 py2exe python-2.7 pythoncom

5
推荐指数
1
解决办法
1074
查看次数

Outlook pywintypes.com_发送电子邮件时出错

第一次用outlook发邮件,就成功了。然后,在第二次循环迭代中,它失败了

import threading
import pythoncom  # to lauch mails in threads
import win32com.client as win32  # pip install pywin32, pip install pypiwin32
from datetime import datetime, timedelta
import psutil
import time


def is_outlook_app_open():
    for proc in psutil.process_iter():
        try:
            if(proc.name() == "OUTLOOK.EXE"):
                return True
        except NoSuchProcess:
            pass
    return False


def send_status_email(outlook_id):
    '''
    status email: that the script works
    '''
    recipients = [
        'someone@gmail.com',
    ]

    was_open = is_outlook_app_open()

    # Initialize
    pythoncom.CoInitialize()

    # Get instance from the id
    outlook = win32.Dispatch(pythoncom.CoGetInterfaceAndReleaseStream(
                outlook_id, pythoncom.IID_IDispatch) …
Run Code Online (Sandbox Code Playgroud)

python win32com python-3.x pythoncom

5
推荐指数
0
解决办法
1164
查看次数

使用 pythoncom 在 Python 进程之间封送 COM 对象

我希望有人可以帮助我从 Python 对 Excel 进行编组的跨进程调用。

我有一个通过 Python 启动的 Excel 会话,我知道它会在需要从单独的 Python 进程访问时启动并运行。我使用编组CoMarshalInterfaceInStream()CoGetInterfaceAndReleaseStream()来自 pythoncom 模块的调用使一切正常工作,但我需要重复访问流(在我的情况下我只能设置一次),并且CoGetInterfaceAndReleaseStream()只允许一次访问接口。

我相信,我想实现是可以做到的是什么CreateStreamOnHGlobal()CoMarshalInterface()CoUnmarshalInterface()但我无法得到它的工作,几乎可以肯定,因为我不是在正确的参数传递。

我没有详细描述我的主要场景,而是设置了一个简单的示例程序,如下所示 - 显然这发生在同一过程中,但一次一个步骤!以下代码段工作正常:

import win32com.client
import pythoncom

excelApp = win32com.client.DispatchEx("Excel.Application")

marshalledExcelApp = pythoncom.CoMarshalInterThreadInterfaceInStream(pythoncom.IID_IDispatch, excelApp)

xlApp = win32com.client.Dispatch(
                                pythoncom.CoGetInterfaceAndReleaseStream(marshalledExcelApp, pythoncom.IID_IDispatch))

xlWb = xlApp.Workbooks.Add()
xlWs = xlWb.Worksheets.Add()
xlWs.Range("A1").Value = "AAA"
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试以下操作时:

import win32com.client
import pythoncom

excelApp = win32com.client.DispatchEx("Excel.Application")

myStream = pythoncom.CreateStreamOnHGlobal()                                   
pythoncom.CoMarshalInterface(myStream,
                             pythoncom.IID_IDispatch,
                             excelApp,
                             pythoncom.MSHCTX_LOCAL,
                             pythoncom.MSHLFLAGS_TABLESTRONG)   

myUnmarshaledInterface = pythoncom.CoUnmarshalInterface(myStream, pythoncom.IID_IDispatch)
Run Code Online (Sandbox Code Playgroud)

调用时出现此错误(我认为与第三个参数有关)pythoncom.CoMarshalInterface()

"ValueError: argument …
Run Code Online (Sandbox Code Playgroud)

python com excel marshalling pythoncom

4
推荐指数
1
解决办法
1811
查看次数

Python-Python 3.2.2中的pythoncom.com_error处理

我正在使用Python 3.2.2,并构建Tkinter接口来进行一些Active Directory更新。我在尝试处理pythoncom.com_error异常时遇到麻烦。

我从这里获取了一些代码:http : //code.activestate.com/recipes/303345-create-an-account-in-ms-active-directory/

但是,我使用以下(直接来自上述站点)处理所引发的异常:

except pythoncom.com_error,(hr,msg,exc,arg):
Run Code Online (Sandbox Code Playgroud)

该代码与我所见过的处理这些异常的许多站点一致,但是对于Python 3.2.2,如果在“ pythoncom.com_error”之后加上逗号,则会出现语法错误。如果删除逗号,程序将启动,但是当引发异常时,我会收到其他异常,因为“ hr”,“ msg”等未定义为全局变量。

如果我删除逗号和方括号中的所有位,那么一切正常,除了我无法确切看到异常情况(我想要的)之外,这样我就可以通过AD传递实际的错误消息。

有谁知道如何在Python 3.2.2中正确处理这些pythoncom异常?

提前致谢!

exception pythoncom

3
推荐指数
1
解决办法
9290
查看次数

我想阻止pythoncom工作

我正在编写一个关于pyHook的键盘记录代码.以下代码是示例:

import pythoncom as pc, pyHook as ph

def KeyboardHook(event):
    print chr(event.Ascii)
    return True

hm = ph.HookManager()
hm.KeyDown = KeyboardHook
hm.HookKeyboard()
pc.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

我想稍后停止pythoncom的PumpMessages方法(例如5秒).但我找不到任何答案.

我用的是:Windows 7,Python2.7

谢谢你的回答.

python python-2.7 pythoncom pyhook

3
推荐指数
1
解决办法
3269
查看次数

结束程序中期运行

pythoncom.PumpMessages()

根据我的理解,这条线基本上告诉程序永远等待.为了我的目的,它似乎工作.但是,我希望能够在给定正确刺激的情况下结束该计划.如何结束上述行,或停止程序进一步运行.

python exit message-pump pythoncom

2
推荐指数
2
解决办法
5219
查看次数

如何在Outlook中连续监视新邮件和python中特定文件夹的未读邮件

我想检查特定的发件人电子邮件,并在到达目的地时自动进行处理

但是,在某些情况下,我的Outlook可能会重新启动,这意味着我收到了发件人的邮件并标记为未读

为了连续监视特定主题的新邮件,我找到了以下代码

import win32com.client
import pythoncom
import re

class Handler_Class(object):
  def OnNewMailEx(self, receivedItemsIDs):
    # RecrivedItemIDs is a collection of mail IDs separated by a ",".
    # You know, sometimes more than 1 mail is received at the same moment.
    for ID in receivedItemsIDs.split(","):
        mail = outlook.Session.GetItemFromID(ID)
        subject = mail.Subject
    print subject   
        try: 
            command = re.search(r"%(.*?)%", subject).group(1)

            print command # Or whatever code you wish to execute.
        except:
            pass


outlook = win32com.client.DispatchWithEvents("Outlook.Application",Handler_Class)

#and then an infinit loop that waits from …
Run Code Online (Sandbox Code Playgroud)

python win32com pythoncom

2
推荐指数
1
解决办法
4829
查看次数