Python - Difference Between Windows SystemParametersInfoW vs SystemParametersInfoA Function

前端 未结 2 651
抹茶落季
抹茶落季 2021-01-16 06:29

I have a quick question that I cannot seem to clarify, despite my research on Stack Overflow and beyond. My questions involves the Windows SystemParametersInfo function with

2条回答
  •  情歌与酒
    2021-01-16 06:52

    Internally, Windows uses Unicode. The SystemParametersInfoA function converts ANSI parameter strings to Unicode and internally calls SystemParametersInfoW. You can call either from Python whether 32- or 64-bit, in Python 2.x or 3.x. Usually you want the W version to pass and retrieve Unicode strings since Windows is internally Unicode. The A version can lose information.

    Example that works in Python 2 or 3, 32- or 64-bit. Note that the W version returns a Unicode string in the buffer, while the A version returns a byte string.

    from __future__ import print_function
    from ctypes import *
    import sys
    
    print(sys.version)
    SPI_GETDESKWALLPAPER = 0x0073
    dll = WinDLL('user32')
    buf = create_string_buffer(200)
    ubuf = create_unicode_buffer(200)
    if dll.SystemParametersInfoA(SPI_GETDESKWALLPAPER,200,buf,0):
        print(buf.value)
    if dll.SystemParametersInfoW(SPI_GETDESKWALLPAPER,200,ubuf,0):
        print(ubuf.value)
    

    Output (Python 2.X 32-bit and Python 3.X 64-bit):

    C:\>py -2 test.py
    2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)]
    c:\windows\web\wallpaper\theme1\img1.jpg
    c:\windows\web\wallpaper\theme1\img1.jpg
    
    C:\>py -3 test.py
    3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
    b'c:\\windows\\web\\wallpaper\\theme1\\img1.jpg'
    c:\windows\web\wallpaper\theme1\img1.jpg
    

提交回复
热议问题