作者LPH66 ( )
看板Windows
标题Re: [问题] "应用程式G"到底是甚麽? 每次关机都出现
时间Tue Jun 9 06:38:55 2020
※ 引述《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 字的问题了
--
01010011 01101110 01010110 01111010 01100100 01000011 01000010 01001110 011000
10 00110010 00110101 01110000 01100001 00110010 01000101 01110101 01001001 010
00101 01001110 01101000 01100010 01101001 01000010 00110101 01100010 00110011
01010101 01100111 01100001 01000111 01010110 01101000 01100011 01101001 010000
10 01110100 01011010 01010100 00111000 01100111 01010010 01000111 00111001 011
10010 01100001 01010011 01000010 01000101 01100010 00110010 01110100 01110000
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.194.100 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Windows/M.1591655937.A.4AB.html
1F:推 seoiotoshi: 谢谢翻译 06/09 07:52
2F:推 ZoMBieAH: 最近升2004後好像可以正常显示了 06/09 09:45
3F:推 wq: 06/09 12:34
4F:推 abram: 还在用 MacType 06/12 15:30
5F:推 cattgirl: 专业 06/16 17:39