[转]python使用ctypes模块调用windowsapi获取系统版本

#coding: utf-8

import win32ui
import win32gui
import win32con
import win32api

#https://mail.python.org/pipermail/python-win32/2009-April/009078.html
‘‘‘
ico_x = win32api.GetSystemMetrics(win32con.SM_CXICON)
ico_y = win32api.GetSystemMetrics(win32con.SM_CYICON)
large, small = win32gui.ExtractIconEx("F:\\nginx\\nginx-1.13.0\\nginx.exe",0)
win32gui.DestroyIcon(large[0])

hdc = win32ui.CreateDCFromHandle( win32gui.GetDC(0) )
hbmp = win32ui.CreateBitmap()
hbmp.CreateCompatibleBitmap( hdc, ico_x, ico_x )
hdc = hdc.CreateCompatibleDC()

hdc.SelectObject( hbmp )
hdc.DrawIcon( (0,0), small[0] )
hbmp.SaveBitmapFile( hdc, "save.bmp" )

print(large)
print(small)
‘‘‘

"通过调用Window API判断当前系统版本"
# 演示通过ctypes调用windows api函数.
# 作者已经知道python32能够实现相同功能
# 语句末尾加分号,纯属个人习惯
# 仅作部分版本判断,更详细的版本判断推荐系统OSVERSIONINFOEX结构体

import ctypes;

class OSINFO(ctypes.Structure):
    _fields_ = [
        ("dwOSVersionInfoSize",ctypes.c_long),
        ("dwMajorVersion",ctypes.c_long),
        ("dwMinorVersion",ctypes.c_long),
        ("dwBuildNumber",ctypes.c_long),
        ("dwPlatformId",ctypes.c_long),
        ("szCSDVersion",ctypes.c_char*128)
    ];

def GetSystemVersionString():
    kernel32 = ctypes.windll.LoadLibrary("kernel32.dll");
    os = OSINFO();
    os.dwOSVersionInfoSize = ctypes.sizeof(os);
    if kernel32.GetVersionExA(ctypes.byref(os))==0:
        return "Null Version";
    if os.dwPlatformId==1: #windows 95/98/me
        if os.dwMajorVersion==4 and os.dwMinorVersion==0:
            verStr = "windows 95";
        elif os.dwMajorVersion==4 and os.dwMinorVersion==10:
            verStr = "windows 98";
        elif os.dwMajorVersion==4 and os.dwMinorVersion==90:
            verStr = "windows me";
        else:
            verStr = "unknown version";
    elif os.dwPlatformId==2: #windows vista/server 2008/server 2003/xp/2000/nt
        if os.dwMajorVersion==4 and os.dwMinorVersion==0:
            verStr = "windows nt 4.0";
        elif os.dwMajorVersion==5 and os.dwMinorVersion==0:
            verStr = "windows 2000";
        elif os.dwMajorVersion==5 and os.dwMinorVersion==1:
            verStr = "windows xp";
        elif os.dwMajorVersion==5 and os.dwMinorVersion==2:
            verStr = "windows 2003";
        elif os.dwMajorVersion==6 and os.dwMinorVersion==0:
            verStr = "windows vista"; # or 2008
        elif os.dwMajorVersion>=0:
            verStr = "windows 7";
        else:
            verStr = "unknown version";
    else:
        return "unknown Version";
    return verStr+" build"+str(os.dwBuildNumber)+" "+str(ctypes.string_at(os.szCSDVersion))

if __name__ == "__main__":
    print(GetSystemVersionString())

https://www.oschina.net/code/snippet_157181_13215

时间: 2024-12-30 13:01:21

[转]python使用ctypes模块调用windowsapi获取系统版本的相关文章

IOS 获取系统版本字符串,并且转化成float类型

pcDuino3下支持mmc启动,官方的Uboot是采用SPL框架实现的,因为内部的SRAM空间达到32K,我们完全可以在这32K空间内编写一个完整可用小巧的bootloader来完成引导Linux kernel的目的. 我们首先介绍下SPL框架,可以先看下<GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法>和<GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析>,NAND_SPL也算是SPL框架下的一种模式. 当使用Nand f

获取系统版本信息和处理器信息

// GetSystemInfo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <windows.h> #include <iomanip> using namespace std; int main() { SYSTEM_INFO systemInfo; GetSystemI

c# 获取系统版本,获取net framework 版本(Environment 类)

原文:c# 获取系统版本,获取net framework 版本(Environment 类) 1.获取当前操作系统版本信息 使用Environment.OSVersion 属性 获取包含当前平台标识符和版本号的 OperatingSystem 对象. 命名空间:  System程序集:  mscorlib(在 mscorlib.dll 中) 使用方法: Environment.OSversion.ToString(); 2.获取本机.net framework 版本信息 使用Environmen

获取系统版本,判断是windows还是Linux

package com.foresee.zxpt.common.utils; import java.util.Properties; /** * 获取系统版本 * @author GZ * */ public class OSUtils { /** * 判断是否是Linux * @return */ public static boolean isOSLinux() { Properties prop = System.getProperties(); String os = prop.get

python 标准日志模块loging 及日志系统实例

本文出处:https://www.cnblogs.com/goodhacker/p/3355660.html#undefined python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用: 1 import logging 2 3 # 创建一个logger 4 logger = logging.getLogger('mylogger') 5 logger.s

Python 使用OS模块调用 cmd

在os模块中提供了两种调用 cmd 的方法,os.popen() 和 os.system()os.system(cmd) 是在执行command命令时需要打开一个终端,并且无法保存command命令的执行结果.os.popen(cmd,mode) 打开一个与command进程之间的管道.返回值是一个文件对象,可以读或者写(由mode决定,默认是’r').如果mode为’r',可以使用此函数的返回值调用read()来获取command命令的执行结果. os.system() 定义: def sys

Python 使用timeit模块计算时间复杂度时系统报“invalid syntax”错误

最近在看算法相关的文档 在时间复杂度环节 遇到一个实例: 导入timeit模块后,通过Timer定时器计算两种不同处理方法的时间复杂度 错误代码及报错如下图所示: 仔细查阅 发现from__main__import 不是一个连续的变量 而是由 from+__main__+import 三部分组合而成 将红框中的代码改为绿框中的代码之后 代码可以正确执行 正确结果如下: 原文地址:https://www.cnblogs.com/QianyuQian/p/12084433.html

python实现获取系统版本和mac信息上传到指定接口

import os,platform,uuid,urllib.parse,urllib.request,json def BeforeSystemRequests(): ''' the systeminfo uploads to api of .. ''' def get_system_version(): system_name = platform.system() if system_name == 'Windows' and os.name == 'nt': system_machine

【转】通过js获取系统版本以及浏览器版本

1 function getOsInfo() { 2 var userAgent = navigator.userAgent.toLowerCase(); 3 var name = 'Unknown'; 4 var version = "Unknown"; 5 if(userAgent.indexOf("win") > -1) { 6 name = "Windows"; 7 if(userAgent.indexOf("window