使用 win32com,我打开了两个工作簿。
我有一个使用 win32com 的 Python 脚本来打开 Visio 文件并将每个选项卡转储为.png文件。执行此操作时,它会在屏幕上短暂地闪烁 Visio gui。有没有办法在不加载 Visio 窗口的情况下在后台执行此操作?
import win32com.client
visio = win32com.client.Dispatch("Visio.Application")
visio.Documents.Open(filepath)
...
visio.Quit()
Run Code Online (Sandbox Code Playgroud) 我正在使用 psexec 在 Windows 7 的远程机器上运行 exe。我需要 exe 以管理员权限运行,因为它需要更新远程系统中 HKLM 下的一些注册表。
在运行 psexec 时,我提供了远程系统上管理员帐户的凭据。当远程系统上的 UAC 关闭时,一切正常。
但是当 UAC 开启时,远程 exe 无法启动。
在已配置 exe 以使用“RequireAdministrator”的清单设置中。我期望的是在远程计算机上启动 exe 时看到 UAC 提示提升警告。虽然如果有某种方法可以绕过提示会很棒。
但不幸的是,exe 无法自行启动。有任何想法吗?
所以,我有以下代码片段,它试图通过 win32api 启动 Microsoft Powerpoint:
import threading
import win32com.client
import sys
class myDemo(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
try:
myObject = win32com.client.Dispatch("Powerpoint.Application")
print "OK"
except:
print "Failed to start Powerpoint!"
sys.exit(1)
print "Now attempting to shutdown..."
try:
myObject.quit()
except:
print "Error"
if __name__ == "__main__":
test = myDemo()
test.start()
Run Code Online (Sandbox Code Playgroud)
问题是它失败了,我不知道为什么。但是,如果我将最后一行更改为test.run()它将成功启动。那么,为什么这会失败test.start()?
为什么会发生这种情况,考虑到我需要 Powerpoint 在单独的线程上异步运行,我应该如何解决它?
提前致谢。
编辑:显然我的问题与此有关:http : //python.6.x6.nabble.com/Dispatch-error-CoInitialize-has-not-been- called-td1951088.html
然而,除了提出的正确解决方案之外,似乎没有人回答为什么 COM 会以这种方式行事。
我需要从我知道标题的窗口提供 PID。
这是一个安装程序,当在我的代码中以编程方式按下第一个“下一步”按钮时,它似乎会更改重要凭据。
我认为这样做是因为窗口逐渐消失然后再次消失,但是当我单击后退按钮并再次单击下一步时,它不会再次执行此操作。
第一个“下一步”按钮,我第一次点击它时,上面有一个盾牌,所以我认为它可能与 UAC 有关。
我正在使用以下代码向窗口发送 ENTER 键盘按键:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
def setwindowfocus(windowname): # can be the window title or the windows PID
shell.AppActivate(windowname)
def sendkeypresstowindow(windowname, key):
setwindowfocus(windowname)
shell.SendKeys(key)
time.sleep(0.1)
sendkeypresstowindow(u'Some Known Window Title', '{ENTER}')
time.sleep(5) # Wait for next window
sendkeypresstowindow(u'Some Known Window Title', '{ENTER}')
time.sleep(5) # Wait for next window
Run Code Online (Sandbox Code Playgroud)
在shell.AppActivate()可采取的pid也所以我想知道我怎么会得到,如果我拥有的唯一信息是窗口标题。
我尝试使用 pywinauto 并遇到了同样的问题,除了许多不应该在 pywinauto 中访问的成员之外,它对于我需要做什么来使用它非常不直观,所以我宁愿避开它,直到代码被清理了。。
我还注意到窗口的句柄发生了变化,所以如果我能以某种方式从窗口标题中获取句柄,然后从句柄中获取 PID 也可以使用。
我正在尝试编写一个函数来选择工作表中的所有非空单元格,将列宽调整为内容,并将它们格式化为表格。
我被困在最后一点,这是我当前的代码:
import win32com.client
from win32com.client import constants
f = r"D:\Project\test_copy.xlsx"
exc = win32com.client.gencache.EnsureDispatch("Excel.Application")
exc.Visible = 1
exc.Workbooks.Open(Filename=f)
exc.ActiveSheet.UsedRange.Select()
exc.Selection.Columns.AutoFit()
exc.ActiveSheet.ListObjects("Table1").TableStyle ="TableStyleLight8"
Run Code Online (Sandbox Code Playgroud)
问题出在最后一行。我不确定该怎么做,因为错误消息非常神秘。
*snip*
line 80, in __call__
ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((12, 1),),Index
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
Run Code Online (Sandbox Code Playgroud) 在使用 python 和 win32com api 处理简单的邮件自动化时,我遇到了 SendUsingAccount 的问题。它被忽略了,或者更糟糕的是,当我从 Windows 7 升级到 Windows 10 时产生错误。
这是我的原始代码
import win32com.client
o = win32com.client.Dispatch("Outlook.Application")
oacctouse = None
for oacc in o.Session.Accounts:
if oacc.SmtpAddress == "sender@mail.com":
oacctouse = oacc
break
Msg = o.CreateItem(0)
if oacctouse:
Msg.SendUsingAccount = oacctouse
if to:
Msg.To = ";".join(to)
if cc:
Msg.CC = ";".join(cc)
if bcc:
Msg.BCC = ";".join(bcc)
Msg.HTMLBody = ""
Msg.Send()
Run Code Online (Sandbox Code Playgroud)
导致出现以下错误: Traceback (most recent call last): File "C:\Program Files (x86)\JetBrains\PyCharm 5.0.3\helpers\pydev\pydevd_exec.py", line 3, in Exec exec exp in …
Right now I am using below code:
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'to address'
mail.Subject = 'Message subject'
mail.Body = 'Message body'
mail.HTMLBody = '<h2>HTML Message body</h2>'# this field is optional
**mail.Attachments.Add('C:\Users\MA299445\Downloads\screenshot.png')**
mail.Send()
Run Code Online (Sandbox Code Playgroud)
我可以附上图片,但我想将这张图片粘贴到电子邮件正文中.
提前致谢
我正在尝试使用 python 连接到 COM 对象。
更具体地说,我使用 ASCOM 标准驱动程序连接到 MaxDome II,不知道如何引用此驱动程序。
在此链接中,作者使用“Celestron.Telescope”作为 win32com.client.Dispatch 实例化的参数。
我的问题是如何找到这个字符串。我知道这与安装在计算机上的已安装驱动程序有关,但我不知道如何找到特定字符串。有没有办法使用 win32com.client 列出 COM 对象?
顺便说一下,在 Windows 7 pro 上运行,64 位。
谢谢
我正在使用 pywin32 模块中的 win32com.client 来接受 word 文档中的所有跟踪更改(Windows 10 64 位上的 Python 3.6.4)。
具体来说,我使用的代码如下:
import win32com.client as win32
word = win32.gencache.EnsureDispatch("Word.Application")
word.Visible = False
doc = word.Documents.Open(PATH TO WORD FILE)
doc.Activate()
word.ActiveDocument.TrackRevisions = False # Maybe not need this
try:
word.WordBasic.AcceptAllChangesInDoc()
except TypeError:
pass
word.ActiveDocument.Save()
doc.Close(False)
word.Application.Quit()
Run Code Online (Sandbox Code Playgroud)
我有两个问题。
1.) 有没有比使用 try-except 块更好的方法来接受所有更改?使用此方法会产生 TypeError,因此需要一个 try-except 块来完成程序。
2.) 你知道如何删除用户留下的评论吗?