'RegFlushKey'에 해당되는 글 1건
- 2008.08.19 Windows 프로그램을 시작 프로그램으로 등록하기
2008. 8. 19. 16:56
Windows 프로그램을 시작 프로그램으로 등록하기
2008. 8. 19. 16:56 in Programmings/Windows Programming
MS Windows를 부팅할 때 자동으로 시작하는 프로그램을 볼 수 있다.
그리고 실제 자신이 작성한 프로그램도 그런 프로그램들 처럼 Windows가 시작할 때 자동으로 실행시킬 수 있다.
방법은 여러가지가 있다.
첫번 째는 가장 쉬운 방법으로 "시작 프로그램에 바로가기 복사"를 하는 방법이다.
"C:\Documents and Settings\사용자 폴더\시작 메뉴\프로그램\시작프로그램"에 자동으로 시작하기를 원하는 프로그램의 바로가기를 복사하면 된다.
두번 째는 "win.ini 파일에 등록"하는 방법이다.
"시작 -> 실행 -> sysedit" 를 실행 하여, 자동으로 실행하고자 하는 프로그램을 등록하면 된다.
load - Windows가 부팅할 때 자동으로 시작하는 프로그램을 등록한다.
run - load와 같이 자동 시작 프로그램을 등록한다.
세번 째는 "registry에 등록"하는 방법이다.
"HKEY_LOCAL_MACHINE의 Software\Microsoft\Windows\CurrentVersion\run"가 시작프로그램들이 위치하는 레지스트리의 위치이다. 이곳에 자동으로 시작하는 프로그램을 등록하면 된다.
아래와 같이 하면 자신이 작성하는 프로그램에 직접 소스코드를 넣어서 레지스트리에 등록하여 Windows가 실행 시 자동으로 실행하게 할 수도 있다.
#include <windows.h>
#include <assert.H>
bool cs_util_register_start_Prog (const char* sValue, const char* sPath)
{
HKEY hKey;
DWORD dwDisp;
DWORD dwSize;
if( sValue == NULL || sPath == NULL)
{
return false;
}
assert(sValue != NULL);
assert(sPath != NULL);
if( RegCreateKeyEx (HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\run",
0, NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDisp) != ERROR_SUCCESS)
{
if(hKey != NULL)RegCloseKey(hKey);
return false;
}
dwSize = strlen(sPath);
if( RegSetValueEx (hKey, sValue, 0, REG_SZ ,(LPBYTE)sPath, dwSize ) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return false;
}
RegCloseKey(hKey);
RegFlushKey(hKey);
return true;
}
....
void main()
{
cs_util_register_start_Prog("레지스트리에 등록할 이름","등록할 프로그램의 경로");
// ex) cs_util_register_start_Prog("test_program","c:\\test_program.exe");
....
}
#include <assert.H>
bool cs_util_register_start_Prog (const char* sValue, const char* sPath)
{
HKEY hKey;
DWORD dwDisp;
DWORD dwSize;
if( sValue == NULL || sPath == NULL)
{
return false;
}
assert(sValue != NULL);
assert(sPath != NULL);
if( RegCreateKeyEx (HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\run",
0, NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDisp) != ERROR_SUCCESS)
{
if(hKey != NULL)RegCloseKey(hKey);
return false;
}
dwSize = strlen(sPath);
if( RegSetValueEx (hKey, sValue, 0, REG_SZ ,(LPBYTE)sPath, dwSize ) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return false;
}
RegCloseKey(hKey);
RegFlushKey(hKey);
return true;
}
....
void main()
{
cs_util_register_start_Prog("레지스트리에 등록할 이름","등록할 프로그램의 경로");
// ex) cs_util_register_start_Prog("test_program","c:\\test_program.exe");
....
}
대충 이렇게 해서 테스트 해보니.. 위의 루틴을 삽입한 프로그램을 한 번 실행 시키게 되면, 레지스트리에 위의 프로그램이 등록이 되더군...
대략 설치 파일에 이런 부분을 넣으면 편할 듯 하지만, 단순히 실행파일을 시작과 동시에 실행시키기엔 첫번 째 방법이 가장 쉽고 편할듯... ^^;
참고 : http://blog.naver.com/tija98?Redirect=Log&logNo=120037882771
'Programmings > Windows Programming' 카테고리의 다른 글
Windows Power management API - PBT_APMPOWERSTATUSCHANGE Event (1) | 2008.09.05 |
---|---|
GetCurrentDirectory()를 이용한 Windows에서 현재경로 받아오기.. (1) | 2008.08.20 |
GetMessage() 와 PeekMessage() (1) | 2008.08.11 |
Windows Device Driver 관련 용어들.. (0) | 2008.07.31 |
MSDN 키보드 입력 작동 방식 스크랩 (0) | 2008.07.28 |