Articles of pywin32

从Windows上的python连接到odbc的常见方法?

我应该使用什么库来连接到Windows上的Python的odbc? 当涉及到odbc的pywin32有没有一个很好的select? 我正在寻找一些logging完备,function强大,积极维护,等等pyodbc看起来不错 – 有没有其他的?

什么是使用win32file.ReadFile从pipe道获取输出的正确方法?

我正在使用pywin32扩展来访问Python下的win32 API。 我是使用Python进行Windows编程的新手 – 我是一个POSIX的人,所以我可能会以一种头脑的方式来做事情。 我正在尝试使用win32file.ReadFile函数,并且在解释可能的结果代码时遇到了一些麻烦。 我打电话这样的function: result, data = win32file.ReadFile(child_stdout_r, 4096, None) 我正在阅读我启动的subprocess的输出。 我得到了很好的数据,但是我担心pipe道中的数据可能会超过4096个字符。 (我宁愿这样做,而不是只是select一个任意大的缓冲区大小。) 在需要读取超过4096个字符的情况下,我需要多次运行win32file.ReadFile,直到耗尽pipe道。 为了找出是否需要多次运行ReadFile,我需要解释结果代码。 ActiveState文档说: 结果是(hr,string / PyOVERLAPPEDReadBuffer)的元组,其中hr可以是0,ERROR_MORE_DATA或ERROR_IO_PENDING。 因为我在函数调用中将重叠值设置为None,所以我认为我不需要担心任何PyOVERLAPPEDReadBuffer的东西。 (因为我得到有效的数据,我想我是对的。) hr结果variables有两个问题: 我无法在任何地方find常量ERROR_MORE_DATA或ERROR_IO_PENDING的值。 ActiveState文档似乎暗示0是成功的,常量(不pipe它们是什么)表示失败。 Microsoft文档状态为0表示失败,非零表示成功,您需要运行GetLastError以了解更多信息。 什么是正确的方法来做到这一点? 编辑添加:我没有使用subprocess,因为我需要将subprocess添加到我创build的作业对象。 目标是如果父进程死亡,让所有subprocess立即死亡。 通过向作业对象添加subprocess,当作业对象的最后一个句柄closures时,subprocess将被终止。 由父母持有的手柄将在父母退出时closures。 所有这一切,据我所知,排除了我使用subprocess。

无法启动用Python编写的Windows服务(win32serviceutil)

我正在尝试启动一个简单的服务示例: someservice.py: import win32serviceutil import win32service import win32event class SmallestPythonService(win32serviceutil.ServiceFramework): _svc_name_ = "SmallestPythonService" _svc_display_name_ = "display service" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) if __name__=='__main__': win32serviceutil.HandleCommandLine(SmallestPythonService) 当我跑步 python someservice.py install 一切正常,服务出现在Windows服务列表中,但 python someservice.py start 错误1053:服务没有及时响应启动或控制请求“,但没有任何延迟。 我pythonservice.exe了一个解决scheme,这表示它发生时, pythonservice.exe无法findpythonservice.exe 。 它实际上不能,所以我将C:\Python27添加到PATH 。 现在pythonservice.exe运行正常,但错误1053仍然存在。 我运行Python […]

如何使用Win32 API获取多个显示器的显示名称?

我有两个显示器连接到我的Windows PC – 一个是正常的显示器,另一个是投影机。 因为Windows不一致地分配一个或另一个作为主监视器(部分原因是它们并不总是在Windows引导时),所以我需要以编程方式检测哪个监视器是哪个。 控制面板将显示器的名称显示为“HP 2159”(普通显示器)和“PROJECTOR”,在您select的主显示器的屏幕上显示。 这是我想要在我的程序中获得的信息。 我找不到这个信息的正确的Win32 API函数。 我已经尝试了EnumDisplayDevices和EnumDisplayMontiors 。 两者都只是将“DISPLAY1”和“DISPLAY2”作为设备名称。 我应该用什么来获得“HP 2159”和“PROJECTOR”信息或类似的东西? 更新:这是我正在使用的Python代码: >>> import win32api >>> monitors = win32api.EnumDisplayMonitors() >>> win32api.GetMonitorInfo(monitors[0][0]) {'Device': '\\\\.\\DISPLAY1', 'Work': (0, 0, 1920, 1080), 'Flags': 1, 'Monitor': (0, 0, 1920, 1080)} >>> win32api.GetMonitorInfo(monitors[1][0]) {'Device': '\\\\.\\DISPLAY2', 'Work': (1920, 0, 3360, 1080), 'Flags': 0, 'Monitor': (1920, 0, 3360, 1080)}

有没有办法解码pywin32中的数字COM错误代码

这里是最近一次用Python编写的不可靠的应用程序运行的堆栈跟踪的一部分,该应用程序控制另一个用Excel编写的应用程序: pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146788248), None) 显然有什么问题…但是什么?[1]这些COM错误代码似乎过于隐晦。 我怎样才能解码这个错误信息? 有没有一个表,让我把这个数字错误代码转换成更有意义的东西? [1]我真的知道在这种情况下出了什么问题,它试图访问没有名称属性的Range对象的名称属性…并非所有的错误都很容易find!

用于Microsoft UI自动化的Python绑定?

任何人都知道Microsoft UI Automation的任何Python绑定? http://msdn.microsoft.com/en-us/library/ms747327.aspx 而不必使用IronPython。 我意识到优秀的pywin32工作,但微软UI自动化应该是我一直在Windows XP上使用的Active Accessibility层的inheritance者。 我需要将“Active Accessibility”function(打开窗口上的事件触发器,焦点控件等)迁移到Windows 7平台。 谢谢!

Python,获取当前login用户的Windows特殊文件夹

我如何从我的Python脚本中获取Windows文件夹,如My Documents,Desktop等? 我需要win32扩展吗? 它必须在Windows 2000到Windows 7上工作。

在Python中接收WM_COPYDATA

我试图从Python读取WM_COPYDATA消息一些应用程序(我试图与Spotify)发送到WindowsLiveMessenger更新“我在听什么…”的短语。 从我所能find的, WM_COPYDATA消息进来COPYDATASTRUCT具有以下结构: 在我们的情况下,dwData 0x547,以便它访问现在正在侦听function cbData与接收的string的长度 带有指向string本身的指针的lpData可能包含Unicode字符 该string应具有以下格式: \0Music\0status\0format\0song\0artist\0album\0由ListeningNowTracker 我们在WM_COPYDATA事件中收到的是一个包含COPYDATASTRUCT lParam指针。 我开始修改pywin32函数,我记得他们不接受过去经验的Unicode字符,然后我切换到ctypes。 尽pipe这对Python来说已经是一个新的世界了,但我用POINTER()试了一下,所有的东西都是未知对象,或者是访问违规。 我认为代码应该创build一个COPYDATASTRUCT : class CopyDataStruct(Structure): _fields_ = [('dwData', c_int), ('cbData', c_int), ('lpData', c_void_p)] 然后使lParam成为指向该结构的指针,从ctypes.string_at(lpData,cbData)获取string指针,最后用ctypes.string_at(lpData,cbData)获取string。 有小费吗? 更新1 为了这个目的, WM_COPYDATA事件被一个用win32gui构build的隐藏窗口接收。 copydata事件连接到一个名为OnCopyData的函数,这是它的头部: def OnCopyData(self, hwnd, msg, wparam, lparam): 与Spy ++消息日志相比,函数提供的值是正确的。 更新2 这应该是接近我想要的,但给出一个空指针错误。 class CopyDataStruct(ctypes.Structure): _fields_ = [('dwData', c_int), ('cbData', c_int), ('lpData', c_wchar_p)] PCOPYDATASTRUCT = ctypes.POINTER(CopyDataStruct) pCDS […]

如何进一步debugging(win7 64bit,py2.7)的SendKeysCtypes?

我试图让SendKeysCtypes工作在py2.7和win7 64bit 。 这是src 问题: 运行SendKeysCtypes.py并没有任何反应。 testing应该打开记事本并写一些文字。 问题代码是这样的: def GetInput(self): "Build the INPUT structure for the action" actions = 1 # if both up and down if self.up and self.down: actions = 2 inputs = (INPUT * actions)() vk, scan, flags = self._get_key_info() for inp in inputs: inp.type = INPUT_KEYBOARD inp._.ki.wVk = vk inp._.ki.wScan = […]

在Windows 7上GetWindowRect太小

我试图解决的实际问题是,我想自动找出窗口边缘的大小。 如果你能find更好的办法,请用一切办法来回答,而不是这个。 为此,我决定截取testing窗口并测量边距。 这很简单,因为我认为没有利润率会是明亮的粉红色,但我承认这是一个黑客。 我使用GetWindowRect ( py )来获取边界框, PIL抓取屏幕截图并剪裁到边界框。 问题是,当作物正常运行时,边界框不准确 。 Windows 7“剪切工具”获得正确的尺寸 。 我怎么能这样做?