У меня есть функция Windows
python3.7
, которая успешно вызывает функцию kernel32.dll
GetSystemPowerStatus
, используя ctypes
, чтобы запросить состояние питания и проверить, работает ли мой ноутбук от сети или от батареи.Это чистое решение Python.
Я хочу перенести эту функцию на cygwin
python3.7
.Из коробки python3
для cygwin
ctypes
, похоже, не позволяет вызывать Windows DLL.Я бы предпочел чисто Python решение, но я могу использовать C / C ++, если это необходимо.У кого-нибудь есть пример, как это сделать?
Отредактировано, чтобы добавить код (строки 63-67) и сообщения об ошибках:
elif _os.name == 'posix' and _sys.platform == 'cygwin':
# c:\Windows\System32\kernel32.dll
kernel32_name = '/proc/cygdrive/c/Windows/System32/kernel32.dll'
kernel32 = CDLL(kernel32_name)
_GetSystemPowerStatus = kernel32.GetSystemPowerStatus
$ python3.7 GetSystemPowerStatus.py
Traceback (most recent call last):
File "GetSystemPowerStatus.py", line 82, in <module>
result, systemPowerStatus = GetSystemPowerStatus()
File "GetSystemPowerStatus.py", line 66, in GetSystemPowerStatus
kernel32 = CDLL(kernel32_name)
File "/usr/lib/python3.7/ctypes/__init__.py", line 356, in __init__
self._handle = _dlopen(self._name, mode)
OSError: Invalid argument
python2.7 выдает ту же ошибку, нона линии 366.
Решено.Смотрите мой собственный ответ ниже.