묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
바탕화면에 바로가기 아이콘 (바콘) 생성하는 소스입니다. 이거에 대해 질문좀 드립니다.
2003.04.17 12:13
바콘을 제 홈페에지에 달고자 삼천리 금수강산 방방곡곡을 헤메어 드디어 소스를 득했건만
이몸이 초보라서 어찌해야 이를 붙일수 있을지 전혀 모르겠나이다.
이 소스를 초보가 알수 있고 활용할수 있도록~ 친절한 설명을 해주실순 없나요?
부탁좀 드리겟습니다.
int CCreateIconCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
#define KEY HKEY_CURRENT_USER
#define SUB_KEY "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" //현재 사용자 계정의 desktop 경로
#define SELECT "Desktop"
#define KEY1 HKEY_LOCAL_MACHINE
#define SUB_KEY1 "SOFTWARE\Classes\CLSID\{37CEA45E-1A77-48BE-A1D3-E3373799AF36}\InprocServer32" // 설치될 ocx의 경로
#define SELECT1 ""
HKEY hKey;
HANDLE hFile; // File handle
DWORD dwDisp, Size, dwWritten;
char URLShortCut[128]; // shortcut 만들 경로
char IconPath[128]; // 아이콘 경로[ocx의 경로]
char FileContent[256]; // shortcut의 내용
// 바탕화면 path
Size = sizeof(URLShortCut);
RegCreateKeyEx (KEY, SUB_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp);
RegQueryValueEx (hKey, SELECT, 0, NULL, (LPBYTE)&URLShortCut, &Size);
RegCloseKey (hKey);
strcat (URLShortCut, "\인터넷 시작 포털스.url");
// Icon path
Size = sizeof(IconPath);
RegCreateKeyEx (KEY1, SUB_KEY1, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp);
RegQueryValueEx (hKey, SELECT1, 0, NULL, (LPBYTE)&IconPath, &Size);
RegCloseKey (hKey);
// shortcut의 내용
wsprintf(FileContent, "[InternetShortcut]rnURL=http://www.potals.com/index.htmrnIconIndex=0rnIconFile=%s", IconPath);
// Create shortcut
hFile = CreateFile (URLShortCut, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile (hFile, FileContent, strlen(FileContent), &dwWritten, NULL);
CloseHandle(hFile);
return 0;
}
이몸이 초보라서 어찌해야 이를 붙일수 있을지 전혀 모르겠나이다.
이 소스를 초보가 알수 있고 활용할수 있도록~ 친절한 설명을 해주실순 없나요?
부탁좀 드리겟습니다.
int CCreateIconCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
#define KEY HKEY_CURRENT_USER
#define SUB_KEY "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" //현재 사용자 계정의 desktop 경로
#define SELECT "Desktop"
#define KEY1 HKEY_LOCAL_MACHINE
#define SUB_KEY1 "SOFTWARE\Classes\CLSID\{37CEA45E-1A77-48BE-A1D3-E3373799AF36}\InprocServer32" // 설치될 ocx의 경로
#define SELECT1 ""
HKEY hKey;
HANDLE hFile; // File handle
DWORD dwDisp, Size, dwWritten;
char URLShortCut[128]; // shortcut 만들 경로
char IconPath[128]; // 아이콘 경로[ocx의 경로]
char FileContent[256]; // shortcut의 내용
// 바탕화면 path
Size = sizeof(URLShortCut);
RegCreateKeyEx (KEY, SUB_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp);
RegQueryValueEx (hKey, SELECT, 0, NULL, (LPBYTE)&URLShortCut, &Size);
RegCloseKey (hKey);
strcat (URLShortCut, "\인터넷 시작 포털스.url");
// Icon path
Size = sizeof(IconPath);
RegCreateKeyEx (KEY1, SUB_KEY1, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp);
RegQueryValueEx (hKey, SELECT1, 0, NULL, (LPBYTE)&IconPath, &Size);
RegCloseKey (hKey);
// shortcut의 내용
wsprintf(FileContent, "[InternetShortcut]rnURL=http://www.potals.com/index.htmrnIconIndex=0rnIconFile=%s", IconPath);
// Create shortcut
hFile = CreateFile (URLShortCut, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile (hFile, FileContent, strlen(FileContent), &dwWritten, NULL);
CloseHandle(hFile);
return 0;
}
실제로 원하시는대로 작동하게 하려면 그밖에도 몇가지 더 처리해야 주셔야 됩니다.
이 소스를 가지고 추가 소스를 작성하신 후 Visual Studio에서 ActiveX DLL 등의 형태로
컴파일하고 웹에 올리시면 일단 원하시는 대로 하실 수는 있겠지만, C++에 대한 이해가 없거나
프로그래밍 경험이 없는 초보자인 경우에는 그렇게 쉽게 접근할 수 있는 성격은 아닌 것 같네요.
주위에 VC 조금이라도 할 줄 아는 분이 있다면 그다지 어렵지 않게 소화할 수 있는 소스니
한번 부탁해 보시던가 조금 시간을 가지고 VC++ 책을 뒤져보시는게 좋지 않을까 하네요.
그런데... 물론 필요해서 그러시겠지만... 바탕화면에 아이콘을 굳이 만들어야만 하는
이유가 있는지 궁금합니다. 그런거 싫어하는 사람이 대부분일텐데... -_-;;;
기분나쁘게는 듣지 마시고, 별 필요없는 기능을 넣어서 방문객 수를 오히려 줄이는 것보다는
차라리 홈페이지 내용에 좀 더 신경을 쓰는게 어떨까 하네요.