求Python调用Window API函数GetComputerName(LPTSTR,LPDWORD)方法

0xAB 发布于 2012/07/11 14:56
阅读 1K+
收藏 0

求Python调用Window API函数GetComputerNameA(LPTSTR,LPDWORD)方法

MSDN中对GetComputerName定义如下

BOOL WINAPI GetComputerNameA(
  __out         LPTSTR lpBuffer,
  __in_out      LPDWORD lpnSize );
想通过CTYPES库调用Kernel32.dll文件访问GetComputerNameA方法

请注意: 不要使用python32,仅用ctypes库实现

在此之前已经做了一些尝试,但是总是报如下错误:

import ctypes;
pcName = '';
pcSize = 16;

pcName = ctypes.cast(pcName,ctypes.c_char_p);

ctypes.windll.kernel32.GetComputerNameA(pcName,pcSize);


print(pcName);

错误:
Traceback (most recent call last):
  File "C:\python\lockpc.py", line 35, in <module>
    ctypes.windll.kernel32.GetComputerNameA(pcName,pcSize);
WindowsError: exception: access violation reading 0x00000010


加载中
0
河边洗澡
河边洗澡
#! /usr/bin/env python
#coding=utf-8
from ctypes import *
pcName = c_char_p('')
pcSize = 25
windll.kernel32.GetComputerNameA(pcName,byref(c_int(pcSize)))
print(pcName)


> "C:\Python27\pythonw.exe" -u "G:\P\Untitled 3.py" 
c_char_p('CHEN-PC')

0
0xAB
0xAB
求高手啊
河边洗澡
河边洗澡
LPDWORD nSize也是一个指针
0
0xAB
0xAB

引用来自“河边洗澡”的答案

#! /usr/bin/env python
#coding=utf-8
from ctypes import *
pcName = c_char_p('')
pcSize = 25
windll.kernel32.GetComputerNameA(pcName,byref(c_int(pcSize)))
print(pcName)


> "C:\Python27\pythonw.exe" -u "G:\P\Untitled 3.py" 
c_char_p('CHEN-PC')

正解。感谢解惑。终于明白问什么调用出错了。
返回顶部
顶部