Russian Qt Forum
Ноябрь 26, 2024, 02:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [Qt 4.2.2] Асооциации файлов  (Прочитано 11398 раз)
crossly
Гость
« : Июль 04, 2007, 20:42 »

Всем привет.... Вопрос таков... Как определить иконку ассоциированную с определённым файлом?... Пробовал функцию win api... Примерно вот так.....
Код:
 HINSTANCE hi; WORD pi=0; HICON ic=ExtractAssociatedIcon(hi,path.utf16(),&pi);
В этом месте моё творение выполняет "Недопустимую операцию"..... Подскажите плиз как сделать правильно.... Или иной вариант решения проблемы... За ранее благодарен.....
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Июль 04, 2007, 21:18 »

HICON ic=ExtractAssociatedIconA(hi,path.toAscii().data(),&pi);

попробуй
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
crossly
Гость
« Ответ #2 : Июль 06, 2007, 19:12 »

не катит.....   таже хрень.....
Записан
Tonal
Гость
« Ответ #3 : Июль 06, 2007, 22:10 »

Не пробывал так:
HINSTANCE hi = 0;
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Июль 06, 2007, 23:59 »

Первый параметр (HINSTANCE hi) должен быть валиндый handle на приложение, которое вызвало эту функцию. имхо, в этом вся проблема.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
vaprele07
Гость
« Ответ #5 : Июль 07, 2007, 02:35 »

аналогичная функция не требующая HINSTANCE: ExtractIconEx
строка должна быть закрыта '\0' что обычно не делает toAscii().data() по крайней мере у меня.
Записан
crossly
Гость
« Ответ #6 : Июль 07, 2007, 07:28 »

я уже понял что проблема в HINSTANCE... и как я понимаю ExtractIconEx извлекает иконку только если она есть в файле, а иконку ассоциированного приложения не сможет... или я не прав..??

добавлено спустя 2 минуты:

 и ещё мот кто нибудь знает как получить валидный Handle()  в Qt....?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Июль 07, 2007, 17:34 »

Цитата: "crossly"

 и ещё мот кто нибудь знает как получить валидный Handle()  в Qt....?


Могу ошибаться, но помоему никак. Юзай WinAPI
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
crossly
Гость
« Ответ #8 : Июль 07, 2007, 18:23 »

дико извиняюсь.... но с winAPI знаком плохо (никогда не любил vc++, а тут нашлась такая замечательная вещь как Qt Улыбающийся ).... мот на примерчике... плиз...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Июль 07, 2007, 18:48 »

С радостью бы подсказал, но не помню этой функции. Почитай в MSDN или погугли
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
crossly
Гость
« Ответ #10 : Июль 07, 2007, 20:11 »

Цитата: "pastor"
Цитата: "crossly"

 и ещё мот кто нибудь знает как получить валидный Handle()  в Qt....?


Могу ошибаться, но помоему никак. Юзай WinAPI

читал..... там то и нашол ExtractAssociatedIcon...
вот только где взять HINSTANCE в QT не знаю.... Другие функции не катят (пробовал).....
Записан
Tonal
Гость
« Ответ #11 : Июль 07, 2007, 22:54 »

А причём здесь Qt, если ты напрямую WinAPI-шную функцию используешь?
Инициализируй 0 и посмотри чё получится - большинство WinAPI-шных функций ожидающих HINSTANCE воспримут 0 как HINSTANCE приложения.
Если не помогёт, то смотри в доке компилера.
Обычно есть системная переменная где лежит HINSTANCE модуля.
Ну и для dll-ки ещё можно написать свою DllMain - оно туба виндой передоётся.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Июль 07, 2007, 23:09 »

я юзал функцию, которая выглядела так:

Код:

QPixmap* MainDialog::getFileSystemObjectIcon(const QString& fsObjectName, int sizeRead, int sizeReturn)
{
WORD w;
HICON hi = ExtractAssociatedIconA(0, (LPSTR)fsObjectName.ascii(), &w);
QPixmap *p = new QPixmap(sizeRead, sizeRead);

if ((int)hi != -1) {

QPainter pnt(p);
HDC hdc = pnt.handle();
DrawIconEx(hdc, 0, 0, hi, sizeRead, sizeRead, 0, NULL, DI_IMAGE);
pnt.end();

QBitmap bmp(sizeRead, sizeRead);
pnt.begin(&bmp);
hdc = pnt.handle();
DrawIconEx(hdc, 0, 0, hi, sizeRead, sizeRead, 0, NULL, DI_MASK);
pnt.end();

p->setMask(bmp);
DestroyIcon(hi);
}

if (sizeRead == sizeReturn || sizeReturn <= 0) return p;
QImage im = p->convertToImage().smoothScale(sizeReturn, sizeReturn);
p->convertFromImage(im);
return p;
}



и работала нормально, во взяком случае под ХР и 2000.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
vaprele07
Гость
« Ответ #13 : Июль 08, 2007, 02:32 »

GetModuleHandle возвращает HINSTANCE
Записан
crossly
Гость
« Ответ #14 : Июль 13, 2007, 19:03 »

перебои со связью...Улыбающийся
кому интересно....
Код:

WORD w;
HICON ic=ExtractAssociatedIcon(0,(WCHAR*)path.unicode(),&w);
ICONINFO info;
GetIconInfo(ic,&info);
QPixmap pix=QPixmap::fromWinHBITMAP(info.hbmColor,QPixmap::NoAlpha);


Ну если завел тему.... Мот кто подскажет как реализовать под линукс(к примеру KDE)?? .... так на будущее....Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 23.