вот написал прогу для создания ярлыка для реестра на диске E. Но почему-то ярлык не создается. Вот код:
| Код | #include <windows.h> #include <windowsx.h> #include <SHLOBJ.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); void OnDestroy(HWND); bool OnCreate(HWND,LPCREATESTRUCT); void CreateLink(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR,int) { //Объявление переменных функции WinMain LPSTR lpszClassName = "MainWindow"; LPSTR lpszTitle = "Программа 6-1"; MSG msg; WNDCLASS wc;
//Инициализация структуры окна wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = GetStockBrush(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = lpszClassName; wc.lpszMenuName = NULL; wc.style = 0;
//Регистрация, создание и показ окна if(!RegisterClass(&wc)) MessageBox(NULL,"Класс не зарегестрирован","Ошибка",MB_OK | MB_ICONSTOP); HWND hwnd = CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,10,20,300,150,HWND_DESKTOP,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL);
while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy); HANDLE_MSG(hwnd,WM_CREATE,OnCreate); default: return DefWindowProc(hwnd,msg,wParam,lParam); } }
void OnDestroy(HWND hwnd) { PostQuitMessage(0); }
bool OnCreate(HWND hwnd, LPCREATESTRUCT) { /* Создание ярлыка для реестра на диске E:\ */ CreateLink("C:\\Windows\\regedit.exe","E:\\1.lnk","Реестр","");
return TRUE; }
//Создание ярлыка на рабрчем столе
// lpszPathObj - путь к объекту // lpszPathLink - путь самого ярлыка // lpszDesc - это то что будет в комментарии написано
void CreateLink(LPCSTR lpszPathObj,LPCSTR lpszPathLink,LPCSTR lpszDesc,LPCSTR lpszArg) { HRESULT hres; IShellLink* psl; hres = CoCreateInstance(CLSID_ShellLink,0,CLSCTX_INPROC_SERVER, IID_IShellLink,(LPVOID*)&psl); if (SUCCEEDED(hres)) // проверка успешности инициализации { IPersistFile* ppf; // устанавливаем путь объекта и комментарий psl->SetPath(lpszPathObj); psl->SetDescription(lpszDesc); if (0 != lpszArg) { psl->SetArguments(lpszArg); psl->SetIconLocation(lpszPathObj,1); } hres = psl->QueryInterface(IID_IPersistFile,(LPVOID*)&ppf); if (SUCCEEDED(hres)) { WCHAR wsz[MAX_PATH]; // переделываем путь нахождение ярлыка в Unicode. MultiByteToWideChar(CP_ACP,0,lpszPathLink,-1,wsz,MAX_PATH);
// все сохраняем hres = ppf->Save(wsz,TRUE); ppf->Release(); } psl->Release(); } }
|
|