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