Я работаю над проектом, в котором мне нужно обнаружить все мониторы, подключенные к системе, и отобразить некоторый текст или изображение на конкретном выбранном мониторе. Даже монитор/дисплей находится в режиме дублированного экрана.
Итак, сначала я попытался пройти через библиотеки winapi и cpanel на Python и подготовьте следующий код для обнаружения отображения как в дублирующем, так и в расширенном режиме экрана.
Я использую ОС Windows 11.
import ctypes
class RECT(ctypes.Structure):
_fields_ = [
('left', ctypes.c_ulong),
('top', ctypes.c_ulong),
('right', ctypes.c_ulong),
('bottom', ctypes.c_ulong)
]
def dump(self):
return map(int, (self.left, self.top, self.right, self.bottom))
# Define POINTL structure
class POINTL(ctypes.Structure):
_fields_ = [
("x", ctypes.c_long),
("y", ctypes.c_long),
]
# Enumerate monitors
def enumerate_monitors():
user32 = ctypes.windll.user32
# Get number of display settings
num_settings = 0
while True:
dev_mode = DEVMODEW()
dev_mode.dmSize = ctypes.sizeof(dev_mode)
if not user32.EnumDisplaySettingsW(ctypes.c_void_p(), num_settings, ctypes.byref(dev_mode)):
break
num_settings += 1
# Get monitor handle
h_monitor = user32.MonitorFromHandle(ctypes.c_void_p())
# Get monitor rectangle
rect = ctypes.POINTER(RECT)
user32.GetMonitorInfoA(h_monitor, ctypes.byref(rect))
yield h_monitor, rect
# Define DEVMODEW structure
class DEVMODEW(ctypes.Structure):
_fields_ = [
("dmDeviceName", ctypes.c_wchar * 32),
("dmSpecVersion", ctypes.c_ushort),
("dmDriverVersion", ctypes.c_ushort),
("dmSize", ctypes.c_ushort),
("dmDriverExtra", ctypes.c_ushort),
("dmFields", ctypes.c_dword),
("dmPosition", POINTL),
("dmDisplayOrientation", ctypes.c_int),
("dmDisplayFixedOutput", ctypes.c_int),
("dmColor", ctypes.c_int),
("dmDuplex", ctypes.c_int),
("dmYResolution", ctypes.c_int),
("dmTTOption", ctypes.c_int),
("dmCollate", ctypes.c_int),
("dmFormName", ctypes.c_wchar * 32),
("dmLogPixels", ctypes.c_int),
("dmBitsPerPel", ctypes.c_int),
("dmPelsWidth", ctypes.c_int),
("dmPelsHeight", ctypes.c_int),
("dmDisplayFlags", ctypes.c_int),
("dmNup", ctypes.c_int),
("dmDisplayFrequency", ctypes.c_int),
("dmICMMethod", ctypes.c_int),
("dmICMIntent", ctypes.c_int),
("dmMediaType", ctypes.c_int),
("dmDitherType", ctypes.c_int),
("dmReserved1", ctypes.c_int),
("dmReserved2", ctypes.c_int),
("dmPannableWidth", ctypes.c_int),
("dmPannableHeight", ctypes.c_int),
("dmReserved3", ctypes.c_int),
("dmReserved4", ctypes.c_int),
]
# Display text on a specific monitor
def display_text_on_monitor(h_monitor, text):
user32 = ctypes.windll.user32
# Create a window on the specified monitor
hwnd = user32.CreateWindowExW(
0,
"STATIC",
text,
0,
0,
0,
0,
0,
h_monitor,
ctypes.c_void_p(),
ctypes.c_void_p(),
ctypes.c_void_p(),
)
# Show window
user32.ShowWindow(hwnd, 5)
# Handle duplicate monitors
def handle_duplicate_monitors():
i = 1
for h_monitor, rect in enumerate_monitors():
print(f"Monitor {i}:")
print(f" Handle: {h_monitor}")
print(f" Rectangle: {rect}")
display_text_on_monitor(h_monitor, f"Hello, Monitor {i}!")
i += 1
# Usage
handle_duplicate_monitors()
Я могу отключить монитор с помощью winapi или cpanel, но он отключит только один монитор, если настройка нескольких мониторов находится в режиме дублированного отображения .
Итак, я попробовал другой метод, но безуспешно.
Я работаю над проектом, в котором мне нужно обнаружить все мониторы, подключенные к системе, и отобразить некоторый текст или изображение на конкретном выбранном мониторе. Даже монитор/дисплей находится в режиме дублированного экрана. Итак, сначала я попытался пройти через библиотеки winapi и cpanel на Python и подготовьте следующий код для обнаружения отображения как в дублирующем, так и в расширенном режиме экрана. Я использую ОС Windows 11. [code]import ctypes
# Get number of display settings num_settings = 0 while True: dev_mode = DEVMODEW() dev_mode.dmSize = ctypes.sizeof(dev_mode) if not user32.EnumDisplaySettingsW(ctypes.c_void_p(), num_settings, ctypes.byref(dev_mode)): break num_settings += 1
# Get monitor handle h_monitor = user32.MonitorFromHandle(ctypes.c_void_p())
# Get monitor rectangle rect = ctypes.POINTER(RECT) user32.GetMonitorInfoA(h_monitor, ctypes.byref(rect))
# Display text on a specific monitor def display_text_on_monitor(h_monitor, text): user32 = ctypes.windll.user32
# Create a window on the specified monitor hwnd = user32.CreateWindowExW( 0, "STATIC", text, 0, 0, 0, 0, 0, h_monitor, ctypes.c_void_p(), ctypes.c_void_p(), ctypes.c_void_p(), )
# Show window user32.ShowWindow(hwnd, 5)
# Handle duplicate monitors def handle_duplicate_monitors(): i = 1 for h_monitor, rect in enumerate_monitors(): print(f"Monitor {i}:") print(f" Handle: {h_monitor}") print(f" Rectangle: {rect}") display_text_on_monitor(h_monitor, f"Hello, Monitor {i}!") i += 1
# Usage handle_duplicate_monitors() [/code] Я могу отключить монитор с помощью winapi или cpanel, но он отключит только один монитор, если настройка нескольких мониторов находится в режиме дублированного отображения . Итак, я попробовал другой метод, но безуспешно.
Я работаю над проектом, в котором мне нужно обнаружить все мониторы, подключенные к системе, и отобразить некоторый текст или изображение на конкретном выбранном мониторе. Даже монитор/дисплей находится в режиме дублированного экрана.
Итак, сначала...
Я использую Codeigniter и html,css. Я хочу получить вставленное изображение из MySQL и отобразить его на своем веб-сайте. но каждое изображение отображается в разном размере
function do_upload(){
$url = ../images ;
$image = basename($_FILES );...
У меня есть установка, в которой несколько мониторов с разным разрешением подключены вертикально, я хочу создать одно окно WPF, которое будет развернуто на всех экранах.
Я попробовал приведенное ниже решение. и не сработало и создало результат, как...
Моя машина — это Dell Latitude 7650 под управлением Ubuntu 22.04 с док-станцией Dell D6000 на базе DisplayLink для подключения внешних мониторов. Я не могу заставить работать внешние мониторы, хотя система обнаруживает док-станцию и драйвер...
Я работаю над настольным приложением Win32 в C ++ и проверяю то, что происходит, когда я получаю информацию о дисплее, используя display_device после отключения всех физических дисплеев. Удивительно, но API по-прежнему сообщает об активном дисплее,...