Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

IZArc 與 SciTE 空白檔名處理問題
post by tommy @ 11 五月, 2007 13:56

我習慣用的壓縮軟體是 IZArc (因為免費, 且... 似乎是目前這類免費的軟體中少數還在開發的), 而我習慣用的編輯器是 SciTE. 平時這兩個軟體的運作都十分正常. 不過... 當我要把 IZArc 預設的 Viewer 改成 SciTE 時, 常常發現如果壓縮檔裡頭有出現空白檔名, 會造成 SciTE 無法正常開啟這個檔案. 通常碰到這樣的情形時, 如果選擇使用 Notepad 來看這類的檔案時, 就可以正確的開啟檔案. 不過如果仍使用 SciTE 為預設的 viewer, 則每次有這樣的檔案就要多幾個步驟去選擇使用 notepad 來開啟. 而如果把預設的 viewer 改成 notepad, 是可以正常運作... 不過... 我又用不慣 notepad.

所以... 就寫個小程式, 查了一下看看這是那兒出了問題. 發現...  IZArc 在呼叫指定的 viewer 時, 並不會把檔名參數用 " 給包起來. 而 SciTE 在讀取參數時, 是使用 argv 去抓參數, 會把空白分開的字串當成不同的參數處理, 自然無法正確的開啟檔案. 猜測 notepad 是使用 WinMain() 中的 lpCmdLine 這個參數來讀取, 所以不會有這樣的問題.

所以我寫了下頭這個小程式:

#include <windows.h>
#include <stdarg.h>
#include <time.h>
#include <stdio.h>
#include <tchar.h>
#include <assert.h>
#include <lm.h>
 
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "user32.lib")
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
char szCommand[1024];
PROCESS_INFORMATION pi;
STARTUPINFO si;
DWORD dwExitCode;
int i;
 
_splitpath(__argv[0], drive, dir, fname, ext);
 
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW;
ZeroMemory(&pi, sizeof(pi));
 
sprintf(szCommand, "\"%s%sscite.exe\" \"%s\"", drive, dir, lpCmdLine);
if (CreateProcess(NULL, szCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
Sleep(5000);
// Wait until child process exits.
//WaitForSingleObject(pi.hProcess, INFINITE);
 
GetExitCodeProcess(pi.hProcess, &dwExitCode);
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;
}

在作者還沒修改這個問題之前, 自己加上 " 來處理. 這樣子就不會有問題了.

所產生的執行檔案可以由這兒抓取:  http://www.teatime.com.tw/~tommy/files/scite_.7z

這個問題已經回報給 IZArc 的作者, 希望下一個版本會修正這個問題.


2007/05/11:

作者表示, 這個問題已經修正了, 等新的版本出來就不會有這問題了.

 

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 150 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS