Tôi đã tạo mã khá phức tạp này để tìm các cửa sổ mà tôi muốn chuyển đến một màn hình cụ thể được xác định bởi chiều rộng tính bằng mm của màn hình (nó cũng sẽ thay đổi kích thước thành độ phân giải chính xác và đặt ứng dụng ở chế độ toàn màn hình):
#!/usr/bin/env python3
quy trình con nhập khẩu
thời gian nhập khẩu
def get(cmd): return sub process.check_output(cmd).decode('utf-8')
def điều chỉnh độ phân giải (tên, độ phân giải): # tên = DP-2, độ phân giải: 1920x1080
get(['xrandr', '--output', name, '--mode', res])
def edit_window(màn hình, window_name, chức năng):
in ('di chuyển', window_name, 'đến', màn hình)
get(['wmctrl', '-F', '-r', window_name, '-e', '100,' +
màn hình['x'] + ',' + màn hình['y'] + ',600,600'])
get(['wmctrl', '-F', '-r', window_name, '-b', function])
def get_monitor():
screendata = [l.split() for l in get(['xrandr', '--current']
.replace('chính', '').splitlines() nếu ' được kết nối' trong l]
màn hình = []
cho tôi trong phạm vi (len (screendata)):
màn hình = dict()
[size, x, y] = screendata[i][2].split('+')
màn hình = {
'tên': screendata[i][0],
'chiều rộng': dữ liệu màn hình[i][-3],
'chiều cao': dữ liệu màn hình[i][-1],
'kích thước': kích thước,
'x': x,
'y': y
}
màn hình.append(màn hình)
trả lại màn hình
def find_element_where(phần tử, khóa, giá trị):
trả về tiếp theo ((mục cho mục trong phần tử nếu mục [key] == giá trị), Không có)
def window_info_to_dict(thông tin):
_, _, x, y, chiều rộng, chiều cao, _, *name = info.split()
return {'x': x, 'y': y, 'width': width, 'height': height, 'name': ' '.join(name)}
chắc chắn get_window_info():
danh sách trả về(map(window_info_to_dict, get(['wmctrl', '-l', '-G']).splitlines()))
# Hằng số:
main_monitor_width = '256mm'
controller_app = 'tên_của_ứng dụng'
video_player = 'Trình phát đa phương tiện VLC'
đúng_độ phân giải = '1920x1080'
# Biến:
did_remove_fullscreen = Sai
trong khi Đúng:
cố gắng:
# Nhận màn hình:
màn hình = get_monitor()
main_monitor = tiếp theo (
(giám sát cho màn hình trong màn hình nếu monitor['width'] == main_monitor_width), Không có)
secondary_monitor = tiếp theo(
(giám sát cho màn hình trong màn hình nếu monitor['width'] != main_monitor_width), Không có)
# in(main_monitor)
# in(secondary_monitor)
# Nhận cửa sổ:
window_info = get_window_info()
controller_app_window_info = find_element_where(
window_info, 'tên', controller_app)
video_player_window_info = find_element_where(
window_info, 'tên', video_player)
# Kiểm tra xem màn hình phụ có đúng kích cỡ không:
nếu secondary_monitor và secondary_monitor['size'] != true_resolution:
print('Độ phân giải sai', secondary_monitor)
điều chỉnh_độ phân giải (secondary_monitor ['tên'], độ phân giải chính xác)
# in(controller_app_window_info)
# in(video_player_window_info)
nếu main_monitor:
if controller_app_window_info['x'] != main_monitor['x'] or controller_app_window_info['y'] != main_monitor['y'] or controller_app_window_info['width'] != '1920' or controller_app_window_info['height'] ! = '1080':
print('Ứng dụng điều khiển không được định vị chính xác')
edit_window(main_monitor, controller_app, 'add,fullscreen')
khác:
print('Không có màn hình chính')
nếu secondary_monitor:
if video_player_window_info['x'] != secondary_monitor['x'] or video_player_window_info['y'] != secondary_monitor['y'] or video_player_window_info['width'] != '1920' or video_player_window_info['height'] ! = '1080':
print('Trình phát video không được đặt đúng vị trí')
edit_window(secondary_monitor, video_player, 'add,fullscreen')
did_remove_fullscreen = Sai
khác:
print('Không có màn hình phụ')
nếu main_monitor chứ không phải did_remove_fullscreen:
edit_window(main_monitor, video_player, 'xóa, toàn màn hình')
did_remove_fullscreen = Đúng
ngoại trừ Ngoại lệ như e:
print('Đã xảy ra lỗi', e)
time.sleep(10)