Re: [問題] "應用程式G"到底是甚麼? 每次關機都出現

看板Windows作者 ( )時間3年前 (2020/06/09 06:38), 編輯推噓5(500)
留言5則, 5人參與, 3年前最新討論串2/2 (看更多)
※ 引述《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://www.ptt.cc/bbs/Windows/M.1591655937.A.4AB.html

06/09 07:52, 3年前 , 1F
謝謝翻譯
06/09 07:52, 1F

06/09 09:45, 3年前 , 2F
最近升2004後好像可以正常顯示了
06/09 09:45, 2F

06/09 12:34, 3年前 , 3F
06/09 12:34, 3F

06/12 15:30, 3年前 , 4F
還在用 MacType
06/12 15:30, 4F

06/16 17:39, 3年前 , 5F
專業
06/16 17:39, 5F
文章代碼(AID): #1Uthu1Ih (Windows)
文章代碼(AID): #1Uthu1Ih (Windows)