Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прописать в ярлык инфу 
V
    Опции темы
yngwie19
Дата 14.1.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Всем привет. Ответьте пожалуйста на такой вопрос. Вообщем, как мне програмно в ярлыке изменить 2 параметра:
"Объект" и "Рабочая папка". СПАСИБО!
PM MAIL   Вверх
jonie
Дата 15.1.2009, 01:17 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



MSDN по слову IShellLink Interface: http://msdn.microsoft.com/en-us/library/bb774950(VS.85).aspx


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
yngwie19
Дата 15.1.2009, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



jonie, спасибо за ссылку, однако у меня не получается, вроде в синтпксисе ошибок нет, но и в ярлыке ничего не меняется.
Не мог бы ты написать малнький примерчик с использованием IShellLink::SetWorkingDirectory?
PM MAIL   Вверх
yngwie19
Дата 18.1.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



 вот написал прогу для создания ярлыка для реестра на диске 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(); 
    } 
}



Это сообщение отредактировал(а) yngwie19 - 18.1.2009, 11:00
PM MAIL   Вверх
yngwie19
Дата 18.1.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Упс все работает забыл CoInitialize(NULL);  и CoUninitialize()
Ребят а подскажите как в ярлыке в поле рабочаа папка прописать путь?

Прошу прощения, разобрался с помощью psl->SetWorkingDirectory

Ребят берите, готовый пример. Всегда пригодится. Все тема закрыта!

Это сообщение отредактировал(а) yngwie19 - 18.1.2009, 11:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.