zxc117 发表于 2023-10-19 02:59:23

在Visual Studio Cod终端运行与打包出来运行的结果不一致

移动游戏窗口或者从最小化恢复显示,
在Visual Studio Cod终端运行的时候没有问题,打包出来运行的时候窗口就会多出来一圈(大概是把不可见边框给包裹进去了)
if __name__ == "__main__":
    hwnd = win32gui.FindWindow("UnityWndClass", None)
    win32gui.ShowWindow(hwnd, win32con.SW_SHOWNOACTIVATE)
    win32gui.SetForegroundWindow(hwnd)
    win32gui.MoveWindow(hwnd, 1371, 48, 556, 999, True)

https://z1.ax1x.com/2023/10/19/piiF55t.jpg

isdkz 发表于 2023-10-19 02:59:59

这个问题可能是由于打包出来的应用程序使用了不同的窗口样式或者边框设置导致的。你可以尝试在打包时指定窗口样式和边框设置,以保持与在Visual Studio Code终端运行时一致。

你可以使用win32gui模块中的SetWindowLong函数来设置窗口样式和边框设置。下面是一个示例代码:

import win32gui
import win32con

if __name__ == "__main__":
    hwnd = win32gui.FindWindow("UnityWndClass", None)
    win32gui.ShowWindow(hwnd, win32con.SW_SHOWNOACTIVATE)
    win32gui.SetForegroundWindow(hwnd)
    win32gui.MoveWindow(hwnd, 1371, 48, 556, 999, True)

    # 设置窗口样式和边框设置
    style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)
    style &= ~win32con.WS_THICKFRAME# 移除边框
    style &= ~win32con.WS_SYSMENU# 移除系统菜单
    win32gui.SetWindowLong(hwnd, win32con.GWL_STYLE, style)

    # 重新调整窗口大小
    win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, 1371, 48, 556, 999, win32con.SWP_SHOWWINDOW)



这段代码会在设置窗口位置和大小之后,使用SetWindowLong函数移除边框和系统菜单,以保持与在Visual Studio Code终端运行时一致的外观。

请注意,这只是一个示例代码,你可能需要根据你的具体情况进行适当的调整。

陶远航 发表于 2023-10-19 03:00:04

你的问题似乎是在使用Visual Studio Code的终端运行你的Python脚本时,和打包后运行的结果不一致。你的脚本似乎是在尝试找到一个名为\"UnityWndClass\"的窗口,并将其移动到特定的位置。

这个问题可能是由于打包过程中的环境差异导致的。在Visual Studio Code的终端中运行脚本时,你的脚本可能有访问到某些环境变量或者其他资源,而这些在打包后的应用程序中可能无法访问。

以下是一些可能的解决方案:

1. 检查你的打包工具或者打包脚本:确保它包含了所有需要的库和资源。例如,如果你使用的是PyInstaller,你可能需要在.spec文件中添加一些隐藏的导入或者数据文件。

2. 在打包之前,尝试在一个独立的Python环境中运行你的脚本,例如在命令行中,而不是在Visual Studio Code的终端中。这样可以帮助你确定问题是否是由于环境差异导致的。

3. 如果可能,尝试在打包后的应用程序中添加一些调试信息,例如打印出窗口的位置和大小,或者捕获并打印出任何可能的异常。这样可以帮助你更好地理解问题的原因。

4. 确保你的应用程序有足够的权限来移动窗口。在某些情况下,打包后的应用程序可能没有足够的权限来执行某些操作。

希望这些信息能帮助你解决问题。如果你需要更多的帮助,欢迎提供更多的信息,例如你使用的打包工具,你的操作系统,以及任何可能的错误消息。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-19 03:00:40

回答:

这个问题可能与你打包的方式有关。在新的窗口中启动应用程序时,可能会使用不同的窗口风格和主题或需要执行设置才能使其符合期望的外观和行为。

这里提供两种解决方法:

1. 设置窗口边框样式:可以尝试添加以下代码,将应用程序窗口的边框样式设置为无边框。

   
   style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)
   style &= ~win32con.WS_OVERLAPPEDWINDOW
   win32gui.SetWindowLong(hwnd, win32con.GWL_STYLE, style)
   

2. 直接调整窗口大小:可以使用 GetClientRect 函数来获取客户端大小,并根据此大小调整窗口大小,以确保边框正确对齐。

   
   _, _, width, height = win32gui.GetClientRect(hwnd)
   border_width = (556 - width) // 2
   border_height = 999 - height - border_width
   win32gui.MoveWindow(hwnd, 1371 - border_width, 48 - border_height, 556, 999, True)
   

注:这些解决方法可能需要适当调整坐标偏移量以使窗口正确对齐。

希望能帮助到你!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 在Visual Studio Cod终端运行与打包出来运行的结果不一致