Re: [问题] "应用程式G"到底是什么? 每次关机都出现

楼主: LPH66 (-6.2598534e+18f)   2020-06-09 06:38:55
※ 引述《HIAWIE (鲁歪妹)》之铭言:
: 每次关机的时候
: 都会出现目前正在使用的程式
: 系统会问我确定要关机吗
: 而那个出现的应用程式名称就一个字"G"
: 那到底是什么东西啊
: 病毒吗?
: 请问有没有人知道?
: → Ricestone: 昨天还前天我关机的时候也看到这莫名其妙的名字 06/08 14:18
: → Ricestone: 找到解释了 https://zd.net/2XELFhv 06/08 14:21
来简单翻译重述一下这篇文章
首先, 会显示出 G 一个字是一个年代久远(!)的程式码 bug
它其实应该要显示“GDI+ 视窗 (<程式 exe 名>)”的
(文中有说这个 bug 在 20H1 (即 2004) 版本会修掉, 修掉之后就会显示全名了)
之所以这个视窗的名字会这样是因为, GDI+ 这东西最早最早是 Win98 的东西
最初在写的时候虽然有考虑到当时还没有广为使用的 Unicode
但其中注册某视窗时却直接使用了给 ANSI 字串时要用的系统呼叫
(文中有提到是 DefWindowProcA, 这个 A 字即是 ANSI 版之意)
后来团队在把程式码转编译为 Unicode 版本时
这个系统呼叫由于是直写“我要 ANSI 版”而不是“我要程式其他地方用的那版”
(通常这会是在程式中不写那个 A 字, 然后用其他方式指定整支程式要用哪一版)
而这两版的这个呼叫的参数是一样的, 所以没有在转编译时被编译器抓到就留下来了
因此这表示系统会把一个要做为视窗标题的 Unicode 字串当成 ANSI 字串来看
其结果就是这个标题字串就会只剩下第一个字
(这一点其实只有当开头是英文才成立, 不过这里这个字串就是这样)
那个显示谁无法关闭的画面其实是会去抓那支程式的其中一个视窗标题来显示
而当没有可见视窗时就会随便抓一个隐藏的视窗的标题显示
那如果抓到这种 GDI+ 的视窗的话就会发生只显示 G 字的问题了
作者: seoiotoshi (泉鬪)   2020-06-09 07:52:00
谢谢翻译
作者: ZoMBieAH   2020-06-09 09:45:00
最近升2004后好像可以正常显示了
作者: abram (科科)   2020-06-12 15:30:00
还在用 MacType
作者: cattgirl (小喵超爱合购)   2020-06-16 17:39:00
专业

Links booklink

Contact Us: admin [ a t ] ucptt.com