2010年2月24日 星期三

char array與CString直接帶入,不須轉換

char mg[256];
CString a(msg);
MessageBox((LPCTSTR)a, L"message", MB_OK);

顯示出系統錯誤訊息

// 若有任何的錯誤, 你可以呼叫下面這個 functin
// 幫你組合出錯誤訊息
void ShowError()
{
LPVOID lpMsgBuf;
/* 中文訊息
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
FORMAT_MESSAGE_FROM_SYSTEM
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //Default language
(LPTSTR) &lpMsgBuf,0,NULL );
*/

// 英文訊息 (比較方便到 Yahoo 查別人如何解決)
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
FORMAT_MESSAGE_FROM_SYSTEM
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,0,NULL );

MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK
MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
}

2010年2月23日 星期二

[轉載]VC/ Vista / Run as administrator 權限

引用 http://www.codeproject.com/KB/vista-security/VistaElevator.aspx?df=100&forumid=368223&exp=0&select=1909847

擷取 Starting an elevated process段 使用ShellExecuteinfo 中的run as 讓系統判斷目前是否需要出現Run as administrator 提示dialog.

BOOLRunElevated( HWND hwnd,
LPCTSTR pszPath,
LPCTSTR pszParameters = NULL,
LPCTSTR pszDirectory = NULL )
{
SHELLEXECUTEINFO shex;
memset( &shex, 0, sizeof( shex) );
shex.cbSize = sizeof( SHELLEXECUTEINFO );
shex.fMask = 0;
shex.hwnd = hwnd;
shex.lpVerb = _T("runas");
shex.lpFile = pszPath;
shex.lpParameters = pszParameters;
shex.lpDirectory = pszDirectory;
shex.nShow = SW_NORMAL;

return ::ShellExecuteEx( &shex );
}

[Search keywords]
[Vista 權限 執行]
[安裝 install regsvr32 COM]
[registry 存取]
[Administrator system account privilege]

[轉載]Run Delphi Program Elevated under Win Vista & Win 7

最近因為工作上的需要開始接觸 Delphi,這個跟 BCB 很像,但是使用 Pascal 為語言的 IDE,不過這不是重點。
重點是,相較於 XP 在 Vista 和 7 底下多了一個新的系統安全機制 UAC ( User Account Control )。
雖然他的立足點是為了系統的安全性的考量,但是這對於程式設計上卻也是個困擾 :(

假設,你寫了一隻程式,做了一些只有 Administrator 權限才能進行的動作,例如: 修改 Registry、安裝 Driver;
在沒有點右鍵,點選 "Run as Administrator" 的情況下,你的程式可能就莫名其妙的 FAIL 了
而這個原因就在於 UAC 這個機制,他封鎖了所有一般 User 權限外所能進行的動作

那就點右鍵就好啦! 但是如果不能點右鍵呢? 總不能要求使用者每次都去點右鍵選 "Run as Administrator" 吧

很不巧...我要寫的程式連點右鍵的機會都沒有,所以要想辦法讓 UAC 自動提示 User 切換到 Administrator 的權限做事
在網路上找到了下面這個方法 - 嵌入 Manifest

1. 建立 Manifest - Autorun.exe.manifest
基本上照著附圖打就行了,但是記得把 name="Autorun" 中的 Autorun 換成你程式的名字


2. 建立 RC 檔 - Autorun.exe.rc
內容照抄下面的,檔名換成你剛剛建的 manifest
1 24 Autorun.exe.manifest

#ps 1 資源編號

  24 資源類型為RTMAINIFEST

3. Compile RES
在 command line 下進行 compile,指令如下:

brcc32 Autorun.exe.rc -foAutorun.res

4. Include RES file
在你的 pas 檔中把 RES 檔 include 進來
{$R Autorun.res}

5. Rebuild Program
最後重新 build 一下你的程式

如果你的程式在 Vista 跟 7 中有出現一個盾牌的符號,這樣就算大功告成了。

2010年2月7日 星期日

如何在本機使用apt-get install xxx

1.建立一個資料夾並將xxx軟體的*.deb放入該資料夾
#mkdir –p /root/deb/xxx/
#cp –a *.deb /root/deb/xxx/
2./root#dpkg-scanpackages deb /dev/null | gzip > deb/Packages.gz
3.vim /.etc/apt/source.list只加上deb file:/root/ deb/
4.apt-get update
5.apt-get install xxx

你可以使用同樣的方法產生一個源碼庫,但請記住你需要將.orig.tar.gz檔案、.dsc檔案和.diff.gz檔案包含在目錄中,同時必須產生Source.gz檔案而不是Packages.gz檔案。
所使用的命令也不相同,要使用dpkg-scansources,命令如下所示:
/root#dpkg-scansources deb | gzip > deb/Sources.gz