要實作一個當 Windows 執行後能夠自動執行的功能 , 可以在 Windows Registry  中

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

這個地方加入自己想要執行的物件。

 

基本上利用 RegSetValueEx 這個 API 來完成 , 所以...沒啥技巧 , 唯一要注意的就是

在VC2005 中Character set  (Not set  or UNICode) 時的處理。其實這是觀念問題了。

Not set :

charcFileName[256] = {0};

if (RegSetValueEx(hKey, sValueName, NULL, REG_SZ, (LPBYTE) sValue.GetBuffer(sValue.GetLength()), sValue.GetLength()) == ERROR_SUCCESS)

這樣寫沒問題

 

但若轉成 Unicode....

TCHARcFileName[256] = {0};

if (RegSetValueEx(hKey, sValueName, NULL, REG_SZ, (LPBYTE) sValue.GetBuffer(sValue.GetLength()), sValue.GetLength()*sizeof(TCHAR)) == ERROR_SUCCESS)

就要這樣寫 , 不然...寫到Registry 中 , 只會寫入一半

相關問題解答可以參考 : http://blog.yam.com/csylvia/trackback/18495463

 

 

底下是實作的程式碼 :


void xxxxxxxxx::CheckStartupSeting(void)
{
HKEY hKey;
LONG lRet;
HKEY hBaseKey = HKEY_LOCAL_MACHINE;
CString sValueName;
CString sKeyName;
CString sValue;
BOOL bError = TRUE;


TCHARcFileName[256] = {0};
TCHAR*pLast=0; 
TCHAR*pCurrent=cFileName;


INT_PTR nTest;


nTest = m_auto_yes.GetCheck();




GetModuleFileName(NULL, cFileName, sizeof(cFileName));
sValue.Format(_T("%s"),pCurrent);




hBaseKey = HKEY_LOCAL_MACHINE;


sKeyName.Format(_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"));


sValueName.Format(_T("ABCDEFGHIJK"));




lRet = RegOpenKeyEx(hBaseKey, sKeyName, 0, KEY_SET_VALUE, &hKey);


if (lRet != ERROR_SUCCESS)
lRet = RegCreateKeyEx(hBaseKey, sKeyName, 0, _T(""), 0, KEY_READ KEY_WRITE, NULL, &hKey, NULL); 




if (m_auto_yes.GetCheck())
{
// create
if (lRet == ERROR_SUCCESS)
{
if (RegSetValueEx(hKey, sValueName, NULL, REG_SZ, (LPBYTE) sValue.GetBuffer(sValue.GetLength()), sValue.GetLength()*sizeof(TCHAR)) == ERROR_SUCCESS)
bError = FALSE;
}
}
else if (m_auto_no.GetCheck())
{
if (lRet == ERROR_SUCCESS)
{
//if (SHDeleteKey(hKey, cstrValueName) == ERROR_SUCCESS)//need include Shlwapi.lib
//{
//bError = FALSE;
//}


if (RegDeleteValue(hKey, sValueName) == ERROR_SUCCESS)
{
bError = FALSE;
}


}
}


RegCloseKey(hKey);


}

 

 

文章標籤
全站熱搜
創作者介紹
創作者 echo 的頭像
echo

程式筆記本

echo 發表在 痞客邦 留言(0) 人氣(2,767)