вот ведь в чем загвоздка-то — можно кучу времени убить на философские рассуждения о бытие сего скринсейвера, а можно навтыкать кучу отладочных сообщений (в лог-файл или OutputDebugString+DebugView) и посмотреть какие коды ошибок возвращаются и к каким файлам обращается программа.
так же весьма полезная функция GetFullPathName
p.s. а если ресурсы должны быть настраиваемы юзером, то, имхо, лучше их положить в район "Application Data" или "Мои документы", иначе система/админы могут быть против
Re[5]: Проблема со скринсейвером. (WinApi/C++/Opengl)
D>GetFullPathName("image2.jpg",256,FileV,NULL);
вообще-то я не это имел ввиду
хотя этот код может чем-то помочь — нужно сделать OutputDebugString( FileV ) посмотреть дебаггером (или DebugView) какое же там попалось полное имя файла.
я все настаивал на коде в духе (т.е. не для копи-паста, а как пример алгоритма):
Делаю скринсейвер (подключаю файл scrnsave.h, библиотеку для загрузки jpg, набор opengl ) все вроде нормально получается нет ошибок, переименовываю exe в scr
запускаю и все работает. В скринсейвере у меня средствами Opengl рисуется прямоугольник и на него накладывается текстура — все. Но когда закидываю скринсейвер с текстуркой в папку винды где лежат скринсейверы и пытаюсь запустить скринсейвер через диалог винды — заставка, то текстура не загружается выводится пустой прямоугольник, а если сам кликаю на фал то все норм и текстура есть.
Может у кого была такая проблема ?
Re: Проблема со скринсейвером. (WinApi/C++/Opengl)
а если пути относительно исполняемого модуля задавать? т.е. GetModuleFileName и потом строковыми функциями прикрутить к этому пути имя файла текстуры. просто кто знает какая там текущая директория во время запуска из апплета..
offtopic: я бы не стал ресурсы скринсейвера хранить отдельными файлами
Re: Проблема со скринсейвером. (WinApi/C++/Opengl)
Здравствуйте, Devoice, Вы писали:
[skip]
1. Если не подводит память, для сейверов запущеных системой рабочей является папка c:\windows\system32, а значит там графический файл и ищется.
2. Для сейверов есть такое негласное правило, что все свои ресурсы они хранят в самом себе, тогда достаточно скопировать .ехе файл и вся установка.
3) ИМХО, в таком случае самое простое — перегнать графику в .bmp, присоеденить к ресурсам, после сборки релизной версии (в смысле окончательной) исполняемый файл упаковать, например upx`ом. В таком случае по LoadResource() ты сможешь грузить HBITMAP средствами WinAPI, а OpenGL с ним прекрасно работает.
Re[2]: Проблема со скринсейвером. (WinApi/C++/Opengl)
У меня должна быть возможность менять текстуры , которые — jpg, поэтому компилить с ресурсами не подходит и bmp тоже. В c:\windows\system32 закидывал , поэтому и пишу тут вопрос ) если я кликаю на scr сам то все норм а если через диалог — Заставка выбираю , то текстуры нет я просто в потерях почему так происходит. Загрузка файла картинки происходит в case WM_CREATE: и такое ощущение что программа просто игнорирует загрузку файла, причем куда бы я ее не ставил толку нет при запуске через диалог — Заставка.
Здравствуйте, StDenis
Если текущая директория ..... как же тогда текстура загружается если я сам кликаю на scr
Мне кажется что проблема всетаки где-то с функциями загрузки текстуры (( каким-то образом они их проходит мимо...
вот исходники, посмотрите может чего и увидете что не так.
image2.jpg — текстура
папка — data , там lib и заголовки для загрузки jpg, с такими путями как есть и собирайте.
Здравствуйте, Аноним, Вы писали:
А>а юзер system имеет права на файлы нужные?
тоесть вы хотите сказать что нужно попробовать кинуть картинку в другой каталог, а scr в system, прописать путь к картинке в scr и должно работать ?
Не могу проверить сейчас , нет машинки под рукой, поэтому только размышлизмы и поиски путей )
Re[4]: Проблема со скринсейвером. (WinApi/C++/Opengl)
Здравствуйте, StDenis, Вы писали:
SD>вот ведь в чем загвоздка-то — можно кучу времени убить на философские рассуждения о бытие сего скринсейвера, а можно навтыкать кучу отладочных сообщений (в лог-файл или OutputDebugString+DebugView) и посмотреть какие коды ошибок возвращаются и к каким файлам обращается программа. SD>так же весьма полезная функция GetFullPathName
SD>p.s. а если ресурсы должны быть настраиваемы юзером, то, имхо, лучше их положить в район "Application Data" или "Мои документы", иначе система/админы могут быть против
Здравствуйте, Аноним, Вы писали:
А>а юзер system имеет права на файлы нужные?
После просмотра некоторой инфы делаю вывод что скринсейвер запускается от имени активного пользователя в данный момент а не от SYSTEM. тоесть нет необходимости ковырять права на доступ к файлу SID и т.п. Или у вас есть другая инфа по этому поводу ?
Может есть у кого еще мысли в какую сторону крутить мозг ) ?
Re[5]: Проблема со скринсейвером. (WinApi/C++/Opengl)
обнаружена очередная странность в работе скринсейвера , если в диалоговом окне жать кнопку просмотр то картинки как я и говорил прежде — не грузятся , а если дождаться автозапуска через установленный промежуток времени то картинки нормально подгружаются и отображаются. совсем непонимаю что происходит.
Re[6]: Проблема со скринсейвером. (WinApi/C++/Opengl)
Здравствуйте, Devoice, Вы писали:
D>обнаружена очередная странность в работе скринсейвера , если в диалоговом окне жать кнопку просмотр то картинки как я и говорил прежде — не грузятся , а если дождаться автозапуска через установленный промежуток времени то картинки нормально подгружаются и отображаются. совсем непонимаю что происходит.
Здравствуйте, StDenis, Вы писали:
D>>GetFullPathName("image2.jpg",256,FileV,NULL); SD>вообще-то я не это имел ввиду SD>хотя этот код может чем-то помочь — нужно сделать OutputDebugString( FileV ) посмотреть дебаггером (или DebugView) какое же там попалось полное имя файла.
SD>я все настаивал на коде в духе (т.е. не для копи-паста, а как пример алгоритма): SD>
я понял что ты имел ввиду конкатенацию пути. просто для проверки я сделал так
if (GetFullPathName("image2.jpg",256,FileV,NULL)==GetFullPathName("scrin1.jpg",256,FileV,NULL))
if(не правда ( грузим картинку по пути FileV))
закрыть приложение
else
закрыть приложение
и вот на моменте где грузим картинку когда жму Просмотр вылетает, жду по времени что запуск был все норм.
вечероком попробую дебаггером (или DebugView) глянуть .
Re[7]: Проблема со скринсейвером. (WinApi/C++/Opengl)
вобщем все получилось СПАСИБО что не бросили в моем нелегком понимании проблемы ), дебагом все увидел , классная утилитка
на самом деле проблема была еще меньше, как оказалось я просто при проверках в самом начале путь неправильно прописывал , писал так C:\WINDOWS\system32 а нуна было C:\\WINDOWS\\system32 а потом полез куда ненужно и т.д. а вот когда увидел что мне выдал дебаг чуть со стула не упал )))
Итак вобщем остался один маленький вопрос , который хотелось бы уточнить почему при запуске диалога -Заставка, функция получения пути к файлу выдает вот такой адрес C:\Documents and Settings\ээээ\scrin1.scr а не тот где лежат файлы ?
Re[7]: Проблема со скринсейвером. (WinApi/C++/Opengl)
Здравствуйте, Devoice, Вы писали:
D>Здравствуйте, StDenis, Вы писали:
D>Итак вобщем остался один маленький вопрос , который хотелось бы уточнить почему при запуске диалога -Заставка, функция получения пути к файлу выдает вот такой адрес C:\Documents and Settings\ээээ\scrin1.scr а не тот где лежат файлы ?