Articles of ctypes

Python的ctypes从Linux上的libc调用reboot()

我试图通过ctypes从Python中的libc调用rebootfunction,我只是不能得到它的工作。 我一直在引用man 2 reboot页面( http://linux.die.net/man/2/reboot )。 我的内核版本是2.6.35。 下面是来自交互式Python提示符的控制台日志,我试图让我的机器重启 – 我做错了什么? 为什么不是ctypes.get_errno()工作? >>> from ctypes import CDLL, get_errno >>> libc = CDLL('libc.so.6') >>> libc.reboot(0xfee1dead, 537993216, 0x1234567, 0) -1 >>> get_errno() 0 >>> libc.reboot(0xfee1dead, 537993216, 0x1234567) -1 >>> get_errno() 0 >>> from ctypes import c_uint32 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), c_uint32(0x1234567), c_uint32(0)) -1 >>> get_errno() 0 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), […]

Python的ctypes不加载在Mac OS X的dynamic库

我有一个C ++库repeater.so ,我可以在Linux中从Python加载以下方式: import numpy as np repeater = np.ctypeslib.load_library('librepeater.so', '.') 但是,当我在Mac OS X(Snow Leopard,32位)上编译相同的库并获得repeater.dylib ,然后在Python中运行以下代码: import numpy as np repeater = np.ctypeslib.load_library('librepeater.dylib', '.') 我得到以下错误: OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found. Did find: /mydir/librepeater.dylib: mach-o, but wrong architecture 在Mac OS X上,我是否需要做一些不同的工作才能在Python中加载dynamic库?

python ctypes和sysctl

我有以下代码 import sys from ctypes import * from ctypes.util import find_library libc = cdll.LoadLibrary(find_library("c")) CTL_KERN = 1 KERN_SHMMAX = 34 sysctl_names = { 'memory_shared_buffers' : (CTL_KERN, KERN_SHMMAX), } def posix_sysctl_long(name): _mem = c_uint64(0) _arr = c_int * 2 _name = _arr() _name[0] = c_int(sysctl_names[name][0]) _name[1] = c_int(sysctl_names[name][1]) result = libc.sysctl(_name, byref(_mem), c_size_t(sizeof(_mem)), None, c_size_t(0)) if […]

ctypes加载具有依赖关系的ac共享库

在Linux上,我有一个交stream共享库,依赖于其他库。 LD_LIBRARY_PATH已正确设置为允许链接器加载所有库。 当我做: libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) 我得到以下错误: Traceback (most recent call last): File "libwfm_test.py", line 12, in <module> libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) File "/usr/lib/python2.5/ctypes/__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "/usr/lib/python2.5/ctypes/__init__.py", line 348, in __init__ self._handle = _dlopen(self._name, mode) OSError: path-to-my-lib/libwav.so: undefined symbol: ODBCGeneralQuery 看来LD_LIBRARY_PATH在这里没有效果。 有没有办法让这些依赖库“可载入”? 先谢谢您的帮助。

Python | 访问DLL使用ctypes

我试图访问Firefox浏览器附带的DLL( nss3.dll )中的一些function。 为了处理这个任务,我在Python中使用了ctypes。 问题是,它在加载到内存中的DLL的初始点失败。 这是我必须这样做的代码片段。 >>> from ctypes import * >>> windll.LoadLibrary("E:\\nss3.dll") 我得到的例外是 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> windll.LoadLibrary("E:\\nss3.dll") File "C:\Python26\lib\ctypes\__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "C:\Python26\lib\ctypes\__init__.py", line 353, in __init__ self._handle = _dlopen(self._name, mode) WindowsError: [Error 126] The specified module could not be found 我也尝试从Firefox安装path加载它假设可能有依赖关系。 […]

使用CType检测从Windows DLL调用Python脚本

我正在寻求在Windows DLL中添加function来检测调用Python脚本的名称。 我正在通过Python使用ctypes来调用dll,正如我如何从脚本语言调用DLL所描述的那样? 在DLL中,我能够成功地确定调用过程使用WINAPI GetModuleFileName() http://msdn.microsoft.com/en-us/library/windows/desktop/ms683197 (v=vs.85) .aspx 。 但是,由于这是一个Python脚本,因此它正在通过Python可执行文件运行,因此返回的模块文件名是“C:/Python33/Python.exe”。 我需要实际的脚本文件的名字进行呼叫。 这可能吗? 有一点关于为什么:这个DLL用于身份validation的背景。 它使用共享密钥生成一个散列,脚本用于validationHTTP请求。 它embedded在DLL中,以便使用脚本的人不会看到密钥。 我们要确保调用脚本的python文件是经过签名的,所以不是任何人都可以使用这个dll来生成签名,因此获取调用脚本的文件path是第一步。

在Python中隐藏Windows启动轨道(3.2)

我正在创build一个将取代Python中的Windows开始菜单的程序。 我设法find隐藏任务栏的方式,如下所示,但我找不到隐藏起始球(Windowsbutton)的方法。 import ctypes from ctypes import wintypes FindWindow = ctypes.windll.user32.FindWindowA FindWindow.restype = wintypes.HWND FindWindow.argtypes = [ wintypes.LPCSTR, #lpClassName wintypes.LPCSTR, #lpWindowName ] SetWindowPos = ctypes.windll.user32.SetWindowPos SetWindowPos.restype = wintypes.BOOL SetWindowPos.argtypes = [ wintypes.HWND, #hWnd wintypes.HWND, #hWndInsertAfter ctypes.c_int, #X ctypes.c_int, #Y ctypes.c_int, #cx ctypes.c_int, #cy ctypes.c_uint, #uFlags ] TOGGLE_HIDEWINDOW = 0x80 TOGGLE_UNHIDEWINDOW = 0x40 def hide_taskbar(): handleW1 […]

WindowsError:用ctypes加载DLL时出错

这适用于Python 2.7的Windows 7: lib = ctypes.cdll.LoadLibrary('prov_means') provmeans = lib.provmeans 库prov_means.DLL在我的工作目录中。 它导出一个简单的,独立的C函数provmeans()而不需要依赖。 当我在Windows XP和Python 2.7上尝试同样的事情时, Traceback (most recent call last): File "D:\python\Auxil\src\auxil.py", line 130, in <module> lib = ctypes.cdll.LoadLibrary('prov_means') File "C:\Python27\lib\ctypes\__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "C:\Python27\lib\ctypes\__init__.py", line 353, in __init__ self._handle = _dlopen(self._name, mode) WindowsError: [Error 126] The specified module could not be […]

如何使用Python 2.7.3更改Windows背景

我正在使用Windows 8(尚未更新到8.1) 我正在使用的代码是 导入ctypes SPI_SETDESKWALLPAPER = 20 ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,“word.jpg”,0) 打印“嗨” 由于某种原因,无论我给它一个有效的图像(在程序相同的目录中),不pipe图像types(bmp,gif,jpg)如何,代码总是会将我的背景设置为黑屏。 为什么是这样? 如何解决?

Python GetModuleHandleW OSError:无法find指定的模块

以下代码会生成错误: OSError:[WinError 126]无法find指定的模块 windll.kernel32.GetModuleHandleW.restype = wintypes.HMODULE windll.kernel32.GetModuleHandleW.argtypes = [wintypes.LPCWSTR] KERNEL32 = windll.GetModuleHandleW("C:\\Windows\\System32\\kernel32.dll") 但是,如果我使用 KERNEL32 = windll.LoadLibrary("C:\\Windows\\System32\\kernel32.dll") DLLfind了,但是我遇到了下面的代码不同的错误: LoadLibAddy = windll.kernel32.GetProcAddress(KERNEL32, "LoadLibraryA") 产生的错误是: ctypes.ArgumentError:参数1:不知道如何转换参数1 我希望有人会对如何解决这些错误有一个想法。 完整的脚本: from ctypes import * from ctypes import wintypes def dllinjector(processID, DLL_NAME): KERNEL32 = WinDLL('kernel32.dll', use_last_error=True) KERNEL32.GetProcAddress.restype = c_void_p KERNEL32.GetProcAddress.argtypes = (wintypes.HMODULE, wintypes.LPCSTR) PROCESS_CREATE_THREAD = 0x0002 PROCESS_QUERY_INFORMATION = 0x0400 PROCESS_VM_OPERATION = […]