日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]C++ (MFC)開機(jī)自啟動(dòng)源碼(修改注冊表) 分類: 2010-01-14 10:28 287人閱讀 評論(0) 收藏 舉報(bào) CString?? str; //添加注冊表路徑 //WCHAR*???

C++ (MFC)開機(jī)自啟動(dòng)源碼(修改注冊表)
分類: 2010-01-14 10:28 287人閱讀 評論(0) 收藏 舉報(bào)
CString?? str; //添加注冊表路徑
//WCHAR*???? CurrentPath=(WCHAR*)malloc(sizeof(char)*100);//程序當(dāng)前路徑
WCHAR*???? CurrentPath= new WCHAR[sizeof(WCHAR)*100];//程序當(dāng)前路徑
HKEY?? hRegKey;?? //注冊key
BOOL?? bResult;?? //打開注冊表返回值
str=_T("Software//Microsoft//Windows//CurrentVersion//Run");//注冊表??
GetModuleFileName(NULL,CurrentPath,MAX_PATH); //獲得運(yùn)用程序路徑
if(bResult=RegOpenKey(HKEY_LOCAL_MACHINE,?? str,?? &hRegKey)?? !=?? ERROR_SUCCESS)//打開注冊表????
{??
?? //free(CurrentPath); //打開不成功就釋放內(nèi)存并返回
?? delete[] CurrentPath;
?? return;??
}??
if(bResult=::RegSetValueEx(hRegKey,_T("StarBySelf"),0,REG_SZ,??
?? (const?? unsigned?? char?? *)CurrentPath,??
?? MAX_PATH)!=?? ERROR_SUCCESS)?? //打開成功寫信息到注冊表
{?? //寫入失敗
?? RegCloseKey(hRegKey);?? //關(guān)閉注冊表key
//?? free(CurrentPath);?? //釋放內(nèi)存資源
?? delete[] CurrentPath;
?? return;?? //返回
}??
//成功后執(zhí)行釋放內(nèi)存
RegCloseKey(hRegKey);??
// free(CurrentPath);
delete[] CurrentPath;

?

?

?

?

?

?

(轉(zhuǎn)載) MFC 實(shí)現(xiàn)開機(jī)運(yùn)行程序 以及 運(yùn)行時(shí)隱藏
分類: C/C++ 程序開發(fā) 2010-08-01 17:52 346人閱讀 評論(0) 收藏 舉報(bào)
MFC怎樣編寫后臺(tái)運(yùn)行的程序

---------------------------------------------------------------

http://www.codeproject.com/system/xservice.asp
---------------------------------------------------------------

以下為轉(zhuǎn)載---------
1、實(shí)現(xiàn)開機(jī)自運(yùn)行

???? 我在csdn網(wǎng)站上經(jīng)??吹接腥藛栠@樣的問題,其實(shí)要實(shí)現(xiàn)開機(jī)時(shí)就自動(dòng)運(yùn)行自己的程序并不難。在注冊表的HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run鍵下可以看到有一系列鍵值,它們都是開機(jī)自動(dòng)運(yùn)行的軟件的路徑。那么我們要做的就是編程實(shí)現(xiàn)將我們的程序的路徑也添加到這個(gè)鍵值下,就搞定了。著名的“windows優(yōu)化大師”也就是用去掉不必要的開機(jī)運(yùn)行軟件這個(gè)方法來實(shí)現(xiàn)開機(jī)速度優(yōu)化的。
???? 既然要讀寫注冊表,就要用到兩個(gè)重要的操作注冊表的函數(shù):RegOpenKey()和RegSetValueEx()。前者用于打開注冊表的鍵,后者則為打開的鍵設(shè)置鍵值,至于這兩個(gè)API函數(shù)的具體參數(shù),請參見MSDN。為了代碼重用的要求,我為此封裝了一個(gè)專門的函數(shù),如下所示:

BOOL SetAutoRun(CString strPath)//開機(jī)自動(dòng)運(yùn)行
{
??? CString str;
??? HKEY hRegKey;
??? BOOL bResult;
??? str=_T("Software//Microsoft//Windows//CurrentVersion//Run");
??? if(RegOpenKey(HKEY_LOCAL_MACHINE, str, &hRegKey) != ERROR_SUCCESS)
??????? bResult=FALSE;
??? else
??? {
??????? _splitpath(strPath.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL);
??????? strPath.ReleaseBuffer();
??????? str.ReleaseBuffer();
??????? if(::RegSetValueEx( hRegKey,
??????????????????????????? str,
??????????????????????????? 0,
??????????????????????????? REG_SZ,
??????????????????????????? (CONST BYTE *)strPath.GetBuffer(0),
??????????????????????????? strPath.GetLength() ) != ERROR_SUCCESS)
?????????? bResult=FALSE;
??????? else
?????????? bResult=TRUE;
??????? strPath.ReleaseBuffer();
??? }
??? return bResult;
}

???? 其中strPath參數(shù)表示要設(shè)置為自運(yùn)行的程序的絕對路徑。當(dāng)設(shè)置成功時(shí)返回true,否則返回false。
這里又帶來一個(gè)問題:既然需要本程序的絕對路徑,那么怎么得到它呢?總不能指定一個(gè)值吧,那么當(dāng)本程序的路徑改變時(shí)就又要修改程序,太麻煩了??梢杂眠@個(gè)封裝的函數(shù)來實(shí)現(xiàn):
//得到程序文件本身的路徑(包括文件名)

CString GetMyPath()
{
??? CString strPath;
??? GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
??? strPath.ReleaseBuffer();
??? return strPath;
}


2、實(shí)現(xiàn)運(yùn)行時(shí)自動(dòng)隱藏

??? 這是一個(gè)很有趣很古老的話題,csdn上經(jīng)常有人為此討論不休,提出不少方案,比如在對話框的OnInitDialog()中添加一句:ShowWindow(SW_HIDE);,或者在對話框?qū)傩钥蛑腥サ魧υ捒虻腣isible屬性;或者將對話框移到桌面以外的地方去;或者首先將對話框最小化,然后實(shí)現(xiàn)最小化時(shí)隱藏……有趣的是這些很容易想到的常規(guī)方法都不能解決這個(gè)問題,或者說解決的不夠好。我通過查找相關(guān)文章和多次修改代碼,找出了真正解決這個(gè)問題的辦法。
??? 之所以用ShowWindow()函數(shù)失效,我認(rèn)為可能是對話框的DoModal()在作怪,這么一來就只能繞開DoModal(),那么就自然想到可以把對話框變成一個(gè)無模式對話框。無模式對話框平時(shí)我們用到的不多,它與模式對話框不同,是用Create方法Create出來的,而不是DoModal()創(chuàng)建的。
??? 假設(shè)建立一個(gè)VC.NET工程GetTime,首先在CGetTimeApp類中添加一個(gè)成員變量:CGetTimeDlg *dlg;然后在InitInstance()中將原來的:

???? int nResponse = dlg.DoModal();
???? if (nResponse == IDOK)
???? {
??????? // TODO: Place code here to handle when the dialog is
??????? //?? dismissed with OK
???? }
???? else if (nResponse == IDCANCEL)
???? {
??????? // TODO: Place code here to handle when the dialog is
??????? //?? dismissed with Cancel
???? }
以及return FALSE;全部刪除掉,改為:????? dlg=new CGetTimeDlg;
???? m_pMainWnd = dlg;
???? return dlg->Create(IDD_GETTIME_DIALOG);
??? 最后別忘了在ExitInstance()中加上一句:delete dlg;好了,這下把本程序的對話框變成了一個(gè)無模式對話框。不過既然是無模式對話框,就不能再用OnOK(),OnCancel()來退出了,要用DestroyWindow()。
??? 由于在上面的代碼中沒有將對話框設(shè)為可見,所以運(yùn)行時(shí)就實(shí)現(xiàn)了隱藏,而且在Windows任務(wù)欄上也沒有顯示。至此,第二個(gè)問題得到完美解決。

?

?

?

?

?

?

?


一、當(dāng)前用戶專有的啟動(dòng)文件夾  
這是許多應(yīng)用軟件自動(dòng)啟動(dòng)的常用位置,Windows自動(dòng)啟動(dòng)放入該文件夾的所有快捷方式。用戶啟動(dòng)文件夾一般在:/Documents and Settings/

二、對所有用戶有效的啟動(dòng)文件夾   
這是尋找自動(dòng)啟動(dòng)程序的第二個(gè)重要位置,不管用戶用什么身份登錄系統(tǒng),放入該文件夾的快捷方式總是自動(dòng)啟動(dòng)——這是它與用戶專有的啟動(dòng)文件夾的區(qū)別所在。該文件夾一般在:/Documents and Settings/All Users/「開始」菜單/程序/啟動(dòng)。   

三、Load注冊鍵   
介紹該注冊鍵的資料不多,實(shí)際上它也能夠自動(dòng)啟動(dòng)程序。位置:HKEY_CURRENT_USER/Software/Microsoft/WindowsNT/CurrentVersion/Windows/load。

四、Userinit注冊鍵   
位置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Winlogon/Userinit。這里也能夠使系統(tǒng)啟動(dòng)時(shí)自動(dòng)初始化程序。通常該注冊鍵下面有一個(gè)userinit.exe,如圖一,但這個(gè)鍵允許指定用逗號(hào)分隔的多個(gè)程序,例如“userinit.exe,OSA.exe”(不含引號(hào))。

五、Explorer/Run注冊鍵   
和load、Userinit不同,Explorer/Run鍵在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具體位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run。   

六、RunServicesOnce注冊鍵   
RunServicesOnce注冊鍵用來啟動(dòng)服務(wù)程序,啟動(dòng)時(shí)間在用戶登錄之前,而且先于其他通過注冊鍵啟動(dòng)的程序。RunServicesOnce注冊鍵的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunServicesOnce,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServicesOnce。

七、RunServices注冊鍵   
RunServices注冊鍵指定的程序緊接RunServicesOnce指定的程序之后運(yùn)行,但兩者都在用戶登錄之前。RunServices的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunServices,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices。

八、RunOnce/Setup注冊鍵   
RunOnce/Setup指定了用戶登錄之后運(yùn)行的程序,它的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunOnce/Setup,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce/Setup。

九、RunOnce注冊鍵   
安裝程序通常用RunOnce鍵自動(dòng)運(yùn)行程序,它的位置在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce和HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce鍵會(huì)在用戶登錄之后立即運(yùn)行程序,運(yùn)行時(shí)機(jī)在其他Run鍵指定的程序之前。HKEY_CURRENT_USER下面的RunOnce鍵在操作系統(tǒng)處理其他Run鍵以及“啟動(dòng)”文件夾的內(nèi)容之后運(yùn)行。如果是XP,你還需要檢查一下HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnceEx。

十、Run注冊鍵   
Run是自動(dòng)運(yùn)行程序最常用的注冊鍵,位置在:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run。HKEY_CURRENT_USER下面的Run鍵緊接HKEY_LOCAL_MACHINE下面的Run鍵運(yùn)行,但兩者都在處理“啟動(dòng)”文件夾之前。

下面使用的是第十方法,在Run下注冊鍵,在Run下寫入和刪除鍵值
1.如想在開機(jī)自動(dòng)行C盤下的"測試.txt",可在注冊表中Run位置寫入鍵值
[c-sharp] view plaincopyprint?DWORD dwDisposition;?
??? HKEY hKey;?
??? LONG result = RegCreateKeyEx(?
??? HKEY_LOCAL_MACHINE, "SOFTWARE//Microsoft//Windows//CurrentVersion//Run",?
??? 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,?
??? NULL, &hKey, &dwDisposition);?
??? if(result != ERROR_SUCCESS)?
??? {?
??????? RegCloseKey(hKey);?
??? }?
??? char *path="c://測試.txt";?
??? char *key="test";?
??? result = RegSetValueEx(hKey, key, NULL, REG_SZ, (const unsigned char *)path, strlen(path)+1);?
??? if(result != ERROR_SUCCESS)?
??? {?
??????? RegCloseKey(hKey);?
??? }?
??? RegCloseKey(hKey);?
DWORD dwDisposition;
??? HKEY hKey;
??? LONG result = RegCreateKeyEx(
??? HKEY_LOCAL_MACHINE, "SOFTWARE//Microsoft//Windows//CurrentVersion//Run",
??? 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
??? NULL, &hKey, &dwDisposition);
??? if(result != ERROR_SUCCESS)
??? {
??RegCloseKey(hKey);
??? }
??? char *path="c://測試.txt";
??? char *key="test";
??? result = RegSetValueEx(hKey, key, NULL, REG_SZ, (const unsigned char *)path, strlen(path)+1);
??? if(result != ERROR_SUCCESS)
??? {
??RegCloseKey(hKey);
??? }
??? RegCloseKey(hKey);
2.在注冊表中Run位置刪除鍵值
[c-sharp] view plaincopyprint?HKEY hkResult;?
HKEY hKey=NULL;?
TCHAR lpFilename[MAX_PATH];?
int a=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software//Microsoft//Windows//CurrentVersion//Run",0,KEY_ENUMERATE_SUB_KEYS|KEY_QUERY_VALUE|KEY_SET_VALUE,&hKey);?
if(a==ERROR_SUCCESS)?
{?
??? int g=RegDeleteValue(hKey,"連接助手");//刪除一個(gè)鍵值項(xiàng),切不可用其他函數(shù)??
//如RegDeleteKey或RegDeleteTree 及SHDeleteKey 函數(shù)??
??? RegCloseKey(hKey); //刪除后釋放??
??? if(g!=ERROR_SUCCESS) //執(zhí)行失敗獲取錯(cuò)誤信息??
??? {?
?????? TCHAR* buffer;?
?????? ::FormatMessage(?
?????? FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,?
?????? NULL,?
?????? g,?
?????? 0,?
????? ( LPTSTR )&buffer,?
????? 0,?
????? NULL );?
????? ::MessageBox( NULL, buffer, NULL, 0 );//輸出錯(cuò)誤信息??
????? LocalFree( buffer );?
??? }?
??? else?
??? {?
????? MessageBox(NULL,TEXT("成功關(guān)閉"),TEXT("警告!"),MB_OK);?
??? }?
}???
else?
{?
?? MessageBox(NULL,TEXT("無法解除自啟,嘗試關(guān)閉殺毒軟件以降低注冊表操作權(quán)限"),?
?? TEXT("警告!"),MB_OK);?
?? RegCloseKey(hKey);?

?

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

閱讀源碼是一項(xiàng)復(fù)雜且耗時(shí)的任務(wù),但通過一些有效的方法和技巧,可以提高效率和理解度

關(guān)鍵字: 源碼 Spring

讀源碼的目的是讓我們學(xué)習(xí)大佬的想法和技巧,通過大量的閱讀進(jìn)行積累,將有用的代碼放在自己的常用代碼中,把一些零碎的知識(shí)點(diǎn)結(jié)合起來。其次就是讓我們積累經(jīng)驗(yàn),因?yàn)楹芏嚅_源組件會(huì)出現(xiàn)各種各樣的問題,我們沒遇到但是可以參考前輩的經(jīng)...

關(guān)鍵字: 源碼 調(diào)試器

其實(shí)在 c++語言里面const修飾的才算是一個(gè)真正的常量,在 c 語言中 const 可以說是個(gè)“冒牌貨”。為什么會(huì)這樣?其實(shí)是 c++ 編譯器對 const 進(jìn)行了加強(qiáng),當(dāng) c++ 編譯器遇到常量聲明時(shí),不會(huì)像 c...

關(guān)鍵字: c++ C語言 const

返回函數(shù)的引用去初始化一個(gè)新的引用這個(gè)和前面一樣,都是不會(huì)產(chǎn)生副本,但是現(xiàn)在是用返回值去初始化一個(gè)引用聲明c,也就是說這時(shí)候變成了變量temp的別名,在c的生命周期內(nèi)temp是一直有效的,這樣做完全可以。

關(guān)鍵字: c++ 返回值 引用聲明

日前Intel的12代酷睿處理器BIOS源碼泄露引發(fā)網(wǎng)絡(luò)熱議,網(wǎng)上信息顯示文件容量高達(dá)6GB,主要用于創(chuàng)建及優(yōu)化12代酷睿的UEFI BIOS??紤]到BIOS的重要性,這次泄露引發(fā)了很多人擔(dān)心,不過Intel官方已經(jīng)出來...

關(guān)鍵字: Intel 源碼 酷睿 BIOS

在我看來最不值得一提的BUG是那種可以重復(fù)復(fù)現(xiàn)的,他的穩(wěn)定復(fù)現(xiàn)通常排查起來沒啥技術(shù)含量, 早些年我處理一個(gè)不值得一提的BUG,BUG也很好復(fù)現(xiàn),難點(diǎn)是復(fù)現(xiàn)時(shí)間固定在4小時(shí)左右,BUG由于文件資源未釋放引起進(jìn)程訪問文件數(shù)目...

關(guān)鍵字: 低級BUG 源碼

C++是一種面向?qū)ο蟮母呒壋绦蛟O(shè)計(jì)語言,是C語言的超集。

關(guān)鍵字: c++ C語言

作者:vivo互聯(lián)網(wǎng)服務(wù)器團(tuán)隊(duì)-ZhangZhenglin一、簡介RocketMQ是阿里巴巴開源的分布式消息中間件,它借鑒了Kafka實(shí)現(xiàn),支持消息訂閱與發(fā)布、順序消息、事務(wù)消息、定時(shí)消息、消息回溯、死信隊(duì)列等功能。Ro...

關(guān)鍵字: 源碼 存儲(chǔ)模塊 ck

來源:https://www.cnblogs.com/deng-cc/p/6927447.html最近正好也沒什么可忙的,就回過頭來鼓搗過去的知識(shí)點(diǎn),到Servlet部分時(shí),以前學(xué)習(xí)的時(shí)候硬是把從上到下的繼承關(guān)系和接口實(shí)...

關(guān)鍵字: IDE 源碼 Diagram

一、前言老周這里編譯Kafka的版本是2.7,為啥采用這個(gè)版本來搭建源碼的閱讀環(huán)境呢?因?yàn)樵摪姹鞠鄬碚f比較新。而我為啥不用2.7后的版本呢?比如2.8,這是因?yàn)槿サ袅薢ooKeeper,還不太穩(wěn)定,生產(chǎn)環(huán)境也不太建議使...

關(guān)鍵字: 源碼 編譯
關(guān)閉