2012-08-15 34 views
0

使用ChangeWindowMessageFilter从user32.dll中我尝试调用函数ChangeWindowMessageFilter在DLL(user32.dll中不能在Python

dlluser32 = ctypes.cdll.LoadLibrary('user32.dll') 
dlluser32.ChangeWindowMessageFilter(0x0233, 1) 
dlluser32.ChangeWindowMessageFilter(0x0048, 1) 
dlluser32.ChangeWindowMessageFilter(0x0049, 1) 

结果:

ValueError: Procedure called with not enough arguments (16 bytes missing) or wrong calling convention 

我如何接听电话? 我想用这个函数在窗口中运行时为我的应用程序启用拖放功能,如果它不起作用,有另一种方法可以做到这一点?

回答

1

你必须设置呼叫转换:

from ctypes.wintypes import BOOL, DWORD, UINT 

dlluser32 = ctypes.cdll.LoadLibrary('user32.dll') 
ChangeWindowMessageFilter = dlluser32.ChangeWindowMessageFilter 

# BOOL WINAPI ChangeWindowMessageFilter(_In_ UINT message, _In_ DWORD dwFlag); 
ChangeWindowMessageFilter.restype = BOOL 
ChangeWindowMessageFilter.argtypes = (UINT, DWORD) 

# Now you can call it there...