|
91 | 91 | print("安装命令: pip3 install PyQt5") |
92 | 92 | sys.exit(1) |
93 | 93 |
|
94 | | -APP_VERSION = "1.4" |
| 94 | +APP_VERSION = "1.3" |
95 | 95 | APP_TITLE = f"ECH Workers 客户端 v{APP_VERSION}" |
96 | 96 |
|
97 | 97 | # 中国IP列表文件名(离线版本,放在程序目录) |
@@ -407,19 +407,52 @@ def init_ui(self): |
407 | 407 | base_width = 950 |
408 | 408 | base_height = 800 |
409 | 409 |
|
410 | | - if sys.platform == 'win32': |
| 410 | + # 获取可用屏幕区域(排除任务栏) |
| 411 | + try: |
| 412 | + # 方法1: 使用 QApplication.desktop() (PyQt5 推荐方式) |
411 | 413 | try: |
412 | | - from ctypes import windll |
413 | | - # 获取系统 DPI(用于调试信息) |
414 | | - hdc = windll.user32.GetDC(0) |
415 | | - dpi = windll.gdi32.GetDeviceCaps(hdc, 88) # LOGPIXELSX |
416 | | - windll.user32.ReleaseDC(0, hdc) |
417 | | - # PyQt5 会自动处理缩放,这里只是记录 DPI 信息 |
418 | | - # 窗口大小使用逻辑像素,PyQt5 会自动转换 |
| 414 | + desktop = QApplication.desktop() |
| 415 | + available_geometry = desktop.availableGeometry() |
| 416 | + screen_width = available_geometry.width() |
| 417 | + screen_height = available_geometry.height() |
| 418 | + screen_x = available_geometry.x() |
| 419 | + screen_y = available_geometry.y() |
419 | 420 | except: |
420 | | - pass |
421 | | - |
422 | | - self.setGeometry(100, 100, base_width, base_height) |
| 421 | + # 方法2: 使用 QScreen (如果 desktop() 不可用) |
| 422 | + try: |
| 423 | + screen = QApplication.primaryScreen() |
| 424 | + available_geometry = screen.availableGeometry() |
| 425 | + screen_width = available_geometry.width() |
| 426 | + screen_height = available_geometry.height() |
| 427 | + screen_x = available_geometry.x() |
| 428 | + screen_y = available_geometry.y() |
| 429 | + except: |
| 430 | + # 如果都失败,使用默认值 |
| 431 | + screen_width = 1920 |
| 432 | + screen_height = 1080 |
| 433 | + screen_x = 0 |
| 434 | + screen_y = 0 |
| 435 | + |
| 436 | + # 确保窗口大小不超过可用区域 |
| 437 | + if base_width > screen_width: |
| 438 | + base_width = screen_width - 40 # 留出边距 |
| 439 | + if base_height > screen_height: |
| 440 | + base_height = screen_height - 40 # 留出边距,确保不遮挡任务栏 |
| 441 | + |
| 442 | + # 计算居中位置 |
| 443 | + x = screen_x + (screen_width - base_width) // 2 |
| 444 | + y = screen_y + (screen_height - base_height) // 2 |
| 445 | + |
| 446 | + # 确保窗口不会超出屏幕边界 |
| 447 | + if x < screen_x: |
| 448 | + x = screen_x + 20 |
| 449 | + if y < screen_y: |
| 450 | + y = screen_y + 20 |
| 451 | + |
| 452 | + self.setGeometry(x, y, base_width, base_height) |
| 453 | + except: |
| 454 | + # 如果获取屏幕信息失败,使用默认位置 |
| 455 | + self.setGeometry(100, 100, base_width, base_height) |
423 | 456 |
|
424 | 457 | # 设置窗口图标(黑客帝国风格) |
425 | 458 | self.setWindowIcon(self._create_matrix_icon()) |
@@ -1232,13 +1265,13 @@ def get_control_values(self): |
1232 | 1265 | } |
1233 | 1266 |
|
1234 | 1267 | # 创建副本并更新为界面当前值 |
1235 | | - server = server.copy() |
1236 | | - server['server'] = self.server_edit.text() |
1237 | | - server['listen'] = self.listen_edit.text() |
1238 | | - server['token'] = self.token_edit.text() |
1239 | | - server['ip'] = self.ip_edit.text() |
1240 | | - server['dns'] = self.dns_edit.text() |
1241 | | - server['ech'] = self.ech_edit.text() |
| 1268 | + server = server.copy() |
| 1269 | + server['server'] = self.server_edit.text() |
| 1270 | + server['listen'] = self.listen_edit.text() |
| 1271 | + server['token'] = self.token_edit.text() |
| 1272 | + server['ip'] = self.ip_edit.text() |
| 1273 | + server['dns'] = self.dns_edit.text() |
| 1274 | + server['ech'] = self.ech_edit.text() |
1242 | 1275 | # 保存分流模式 |
1243 | 1276 | routing_mode = self.routing_combo.currentData() |
1244 | 1277 | if routing_mode: |
|
0 commit comments