修正TaskManagerEx2 0的乙個BUG

2021-04-02 03:01:12 字數 2253 閱讀 7715

摘要:簡要介紹乙個windows 任務管理器(task manager)功能擴充套件工具taskmanagerex,同時指出了taskmanagerex 2.0的乙個與中文檔名有關的bug並修正了這個bug。

關鍵字:任務管理器 task manager 擴充套件

從windows nt開始,microsoft給windows提供了乙個功能強大的任務管理器(task manager),任務管理器功能強大,不僅能夠檢視程式執行過程中的資源、控制代碼、記憶體以及cpu占有率等計量資訊,還能夠中止正在執行的程式,任務管理器成為windows最受歡迎的元件之一。雖然任務管理器功能多多,但還是有人覺得應該再多一些功能,zoltan csizmadia就是這些人中的乙個。此君於2023年愚人節那天在codeguru**上發表了一篇名為「task manager extension」的文章,發布了乙個他為任務管理器定製的擴充套件外掛程式:taskmanagerex。說taskmanagerex是乙個任務管理器外掛程式其實有些牽強,因為windows的任務管理器並沒有提供擴充套件外掛程式的介面,這個taskmanagerex是用鉤子強行「塞」任務管理器的,用黑客們的話說就是任務管理器被「hacking」了。這個所謂的外掛程式給windows任務管理器新增了乙個「extension」選單,新增了程序模組檢視、控制代碼資訊檢視、視窗資訊檢視以及檔案資訊檢視等功能,在2023年5月,sergey kolomenkin(可能是個**人?)在taskmanagerex的基礎上發布了2.0版本,新增了包括「memory map」在內的很多功能,大家可以通過以下鏈結檢視sergey kolomenkin在codeproject上發表的原文:http://.codeproject.com/system/task_manager_extension.asp。這片文章和zoltan csizmadia發表在codeguru上的那篇文章一樣短小精悍,言簡意賅,畢竟說得再多也沒有,看**才是硬道理,看看下面你就知道為什麼taskmanagerex如此受歡迎了:

不過sergey kolomenkin發布的這個2.0版本存在乙個嚴重的bug,使得taskmanagerex在處理含有中文、韓文以及日文這樣的unicode字串時丟失資料,最終的結果就是無法正常顯示包含中文、韓文以及日文的檔名。出現這個錯誤的原因是sergey kolomenkin修改了systeminfoutils::lpcwstr2cstring()的實現**(使用widechartomultibyte轉換字串),sergey kolomenkin的**是這樣的:

// from wide char string to cstring

void systeminfoutils::lpcwstr2cstring( lpcwstr strw, cstring& str )

int res = widechartomultibyte( cp_acp, 0, strw, len, pbuffer, len, null, null );

if( res == 0 )

str = pbuffer;

delete pbuffer;

#endif }

當程式採用非unicode方式編譯時,sergey kolomenkin採用wcslen(strw) + 1計算出轉換後的字串長度,並根據此值動態分配了儲存控制項,然後使用widechartomultibyte進行轉換。**處理英文本串時可以正常工作,但是當字串中含有中、日、韓這樣的雙字元文字時就會出錯,主要原因是wcslen(strw) + 1計算出的長度不足以存放轉換後的字串,於是widechartomultibyte函式返回0,導致pbuffer[0] = _t('/0');被執行,於是pbuffer就成了空字串。以下是出現bug時的效果圖:

圖中加亮的一行是乙個檔案控制代碼(0x3d8),是acrobat reader開啟了乙個含有中文名的檔案d:/100 個智力小遊戲.pdf,由於上面提到的bug導致檔名無法正常顯示。現在將這個bug fix,修改後的lpcwstr2cstring函式如下:

void systeminfoutils::lpcwstr2cstring( lpcwstr strw, cstring& str )

int res = widechartomultibyte( cp_acp, 0, strw, -1, pbuffer, len, null, null );

pbuffer[res] = _t('/0');

str = pbuffer;

delete pbuffer;

#endif }

修改後再載入taskmanagerex,就可以看到這個檔名了:

我已經在codeproject上報告了這個bug,呵呵,應該快有新版本出來了。

修正TaskManagerEx2 0的乙個BUG

摘要 簡要介紹乙個windows 任務管理器 task manager 功能擴充套件工具taskmanagerex,同時指出了taskmanagerex 2.0的乙個與中文檔名有關的bug並修正了這個bug。關鍵字 任務管理器 task manager 擴充套件 從windows nt開始,micr...

Ruby rcov問題修正

前兩天在我本機上用rcov測試覆蓋率,出錯,出錯提示為 rexml formatters pretty.rb 131 in implicit conversion from nil to integer 現已查明原因,是rcov 0.8.1.2.0和 ruby1.8.7的rexml庫不相容所致。修改...

MYSQL OUTPUT 指令碼 修正

這個重新寫的乙個mysql資料匯出指令碼,匯出格式為csv,這種格式更加的輕便,不會過份影響資料檔案體積,適合匯入到本地資料庫!大家通過修改 裡面標註的一些配置變數就可以了。如果匯出資料有篩選要求可以直接修改sql語句滿足你的要求!如果資料是百萬級別,這個指令碼並不適合通過瀏覽器訪問來脫褲,所以要用...