在同时有多个 Java 进程时,自定义游戏窗口标题未正确地更改
检查项
- [X] 我已在 Issues 页面 和 常见&难检反馈及问题列表 中搜索,确认了这一建议未被提交过。
- [X] 我已查看 功能投票页面,确认了这一建议未在投票列表中。
描述
如果电脑上开了多个 Java 进程,并且在设置——游戏——启动选项——游戏窗口标题中输入内容,则启动器会错误地更改其他 Java 进程的标题内容,而不是游戏标题。 例如开启一个 IDEA 和一个 MC,则有时 IDEA 会被修改窗口标题,而 MC 进程仍为原名
原因
会影响我边打代码边摸鱼的效率(huaji
标签是不是应改为Bug()
两个进程使用了同一个 java 吧 先把 label 改了,有人能帮忙确认一下吗
无法处理,我没有找到任何可行的方法来区分不同的 java 窗口 :/ 如果大家有啥办法可以提……
无法处理,我没有找到任何可行的方法来区分不同的 java 窗口 :/ 如果大家有啥办法可以提……
识别标题关键词?
有办法从 Minecraft 的 PID 获取窗口 HWND 吗?
有办法从 Minecraft 的 PID 获取窗口 HWND 吗?
这要知道打开游戏时运行了哪个进程吧
这要知道打开游戏时运行了哪个进程吧
PCL2 能直接杀游戏进程,那应该是保存有 PID 信息的?
PCL2 能直接杀游戏进程,那应该是保存有 PID 信息的?
好像会杀掉全部,见 #1223 所以这个问题应该实质上和 #1223 相同?
好像是全部杀掉的,记得有一个 issue 就是关于这个
呃呃呃呃呃呃,那 ……
Forge 的预启动窗口有很多种标题,并且 Mod 也会自定义窗口标题,所以从标题获取并不靠谱…… 启动的 PID 不一定是 MC 进程的 ID,有时候 Java 甚至 Mod 会自动拉起另一个 Java 来启动 MC……
jps -v 然后对参数进行判断,同参数对 PID 大的那个重命名窗口标题(拉起 Java 最晚创建的进程 PID 通常大于其他进程)
根据上述内容,在启动了一个 Minecraft 客户端和别的 Java 程序(下方例子为 IDEA)时 调用一个 jdk 安装目录/bin 中的 jps.exe 得到的反馈(只有 jdk 才有这个工具,应该不会有人一个 jdk 都没安装吧……)
C:\Users\m5604>E:\Java\jdk-17\bin\jps.exe -v
2624 Jps -Dapplication.home=E:\Java\jdk-17 -Xms8m -Djdk.module.main=jdk.jcmd
30052 JavaWrapper.jar -XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Djava.library.path=D:\MC-RIT-Season3\.minecraft\versions\RIT 模组端\RIT 模组端-natives -Djna.tmpdir=D:\MC-RIT-Season3\.minecraft\versions\RIT 模组端\RIT 模组端-natives -Dorg.lwjgl.system.SharedLibraryExtractPath=D:\MC-RIT-Season3\.minecraft\versions\RIT 模组端\RIT 模组端-natives -Dio.netty.native.workdir=D:\MC-RIT-Season3\.minecraft\versions\RIT 模组端\RIT 模组端-natives -Dminecraft.launcher.brand=PCL -Dminecraft.launcher.version=320 -DFabricMcEmu=net.minecraft.client.main.Main -Xmn256m -Xmx10342m -Dlog4j2.formatMsgNoLookups=true --add-exports=cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED -Doolloo.jlw.tmpdir=C:\Users\m5604\AppData\Roaming\PCL
32148 exit -XX:ErrorFile=C:\Users\m5604\\java_error_in_idea64_%p.log -XX:HeapDumpPath=C:\Users\m5604\\java_error_in_idea64.hprof -Xms128m -Xmx2048m -XX:ReservedCodeCacheSize=512m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:CICompilerCount=2 -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -XX:+IgnoreUnrecognizedVMOptions -XX:CompileCommand=exclude,com/intellij/openapi/vfs/impl/FilePartNodeRoot,trieDescend -ea -Dsun.io.useCanonCaches=false -Dsun.java2d.metal=true -Djbr.catch.SIGABRT=true -Djdk.http.auth.tunneling.disabledSchemes="" -Djdk.attach.allowAttachSelf=true -Djdk.module.illegalAccess.silent=true -Dkotlinx.coroutines.debug=off -Xmx4061m -Djb.vmOptionsFile=C:\Users\m5604\AppData\Roaming\\JetBrains\\IdeaIC2023.2\idea64.exe.vmoptions -Djava.system.class.loader=com.intellij.util.lang.PathClassLoader -Didea.vendor.name=JetBrains -Didea.paths.selector=IdeaIC2023.2 -Djna.boot.library.path=E:\IdeaCommunity/lib/jna/amd64 -Dpty4j.preferred.native.folder=E:\IdeaCommunity/lib/pty4j -Djna.nosys=true -Djn
根据启动参数确认是否为 PCL 启动的 Minecraft,然后对应 PID 拿 HWND,貌似就可以了?
需要确认在 有时候 Java 甚至 Mod 会自动拉起另一个 Java 来启动 MC 的情况下是否仍然可用
@LTCatt 研究研究?
这玩意儿我搜的好像 JRE 没有……不过应该可以作为缓解 有空再看看吧 orz
比较复杂,并且适用面很小,暂时不考虑 orz