Устранение ошибки в Automati c Отладка сценария Python в коде Visual Studio - PullRequest
0 голосов
/ 21 января 2020

У меня есть рабочий Python сценарий, который фиксирует ширину и высоту рабочей области моего основного монитора с помощью следующего кода.

# First, install library win32api by executing as administrator
# the command "pip install pywin32" in PowerShell. Then,

from win32api import MonitorFromPoint, GetMonitorInfo
handle_for_primary_monitor = MonitorFromPoint((0,0))
monitor_info = GetMonitorInfo(handle_for_primary_monitor)
work_area_info = monitor_info.get("Work")
width_of_work_area = work_area_info[2]
height_of_work_area = work_area_info[3]

Код Visual Studio по ошибке выдает следующие две ошибки:

Error_in_Automatic_Debugging_of_Python_Script_in_VSCode

Как заставить код Visual Studio распознать, что класс MonitorFromPoint и метод GetMonitorInfo действительно находятся в библиотеке win32api?

Ответы [ 2 ]

1 голос
/ 30 января 2020

В качестве обходного пути вы можете использовать ctypes.windll:

import ctypes
from ctypes.wintypes import tagPOINT
from ctypes import *
class RECT(Structure):
    _fields_ = [
        ("left", c_long),
        ("top", c_long),
        ("right", c_long),
        ("bottom", c_long),
    ]
class MONITORINFOEXA(Structure):
    _fields_ = [
        ("cbSize", c_ulong),
        ("rcMonitor", RECT),
        ("rcWork", RECT),
        ("dwFlags", c_ulong),
        ("szDevice", c_char*32),
    ]
class MONITORINFOEXW(Structure):
    _fields_ = [
        ("cbSize", c_ulong),
        ("rcMonitor", RECT),
        ("rcWork", RECT),
        ("dwFlags", c_ulong),
        ("szDevice", c_wchar*32),
    ]
point = tagPOINT(0,0)
handle_for_primary_monitor = ctypes.windll.user32.MonitorFromPoint(point,0)
print(handle_for_primary_monitor)
monitorinfo = MONITORINFOEXW()
#monitorinfo.cbSize = 72 #sizeof(MONITORINFOEXA) = 72 ;sizeof(MONITORINFOEXW) = 104
monitorinfo.cbSize = 104
monitorinfo.dwFlags = 0x01 #MONITORINFOF_PRIMARY
#ctypes.windll.user32.GetMonitorInfoW(handle_for_primary_monitor,byref(monitorinfo))
ctypes.windll.user32.GetMonitorInfoW(handle_for_primary_monitor,byref(monitorinfo))
Monitor_width =  monitorinfo.rcMonitor.right - monitorinfo.rcMonitor.left
Monitor_height =  monitorinfo.rcMonitor.bottom - monitorinfo.rcMonitor.top
Work_width = monitorinfo.rcWork.right - monitorinfo.rcWork.left
Work_height = monitorinfo.rcWork.bottom - monitorinfo.rcWork.top
print(monitorinfo.szDevice)
print(Monitor_width)
print(Monitor_height)
print(Work_width)
print(Work_height)
1 голос
/ 22 января 2020

Эта ошибка возникает из-за Pylint.

На самом деле, Pylint не выполняет код Python во время анализа, поэтому необходимо поддерживать большинство нестандартных (неинформативных) конструкций. написав собственный код.

См .: Почему Pylint не может найти модуль (и) этого пакета?

Есть два способа решения этой проблемы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...