Re[3]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: StDenis Россия  
Дата: 19.03.08 14:11
Оценка: 2 (1)
вот ведь в чем загвоздка-то — можно кучу времени убить на философские рассуждения о бытие сего скринсейвера, а можно навтыкать кучу отладочных сообщений (в лог-файл или OutputDebugString+DebugView) и посмотреть какие коды ошибок возвращаются и к каким файлам обращается программа.
так же весьма полезная функция GetFullPathName

p.s. а если ресурсы должны быть настраиваемы юзером, то, имхо, лучше их положить в район "Application Data" или "Мои документы", иначе система/админы могут быть против
Re[5]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: StDenis Россия  
Дата: 21.03.08 07:29
Оценка: 2 (1)
D>GetFullPathName("image2.jpg",256,FileV,NULL);
вообще-то я не это имел ввиду
хотя этот код может чем-то помочь — нужно сделать OutputDebugString( FileV ) посмотреть дебаггером (или DebugView) какое же там попалось полное имя файла.

я все настаивал на коде в духе (т.е. не для копи-паста, а как пример алгоритма):
    GetModuleFileName( NULL, filename, filename_size );
    strrchr( filename, '\\' )[0] = 0;
    strncat( filename, "имякартинки.jpg", filename_size );
Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 19.03.08 08:25
Оценка:
Делаю скринсейвер (подключаю файл scrnsave.h, библиотеку для загрузки jpg, набор opengl ) все вроде нормально получается нет ошибок, переименовываю exe в scr
запускаю и все работает. В скринсейвере у меня средствами Opengl рисуется прямоугольник и на него накладывается текстура — все. Но когда закидываю скринсейвер с текстуркой в папку винды где лежат скринсейверы и пытаюсь запустить скринсейвер через диалог винды — заставка, то текстура не загружается выводится пустой прямоугольник, а если сам кликаю на фал то все норм и текстура есть.
Может у кого была такая проблема ?
Re: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: StDenis Россия  
Дата: 19.03.08 09:26
Оценка:
а если пути относительно исполняемого модуля задавать? т.е. GetModuleFileName и потом строковыми функциями прикрутить к этому пути имя файла текстуры. просто кто знает какая там текущая директория во время запуска из апплета..

offtopic: я бы не стал ресурсы скринсейвера хранить отдельными файлами
Re: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Tujh Голландия  
Дата: 19.03.08 09:52
Оценка:
Здравствуйте, Devoice, Вы писали:
[skip]
1. Если не подводит память, для сейверов запущеных системой рабочей является папка c:\windows\system32, а значит там графический файл и ищется.
2. Для сейверов есть такое негласное правило, что все свои ресурсы они хранят в самом себе, тогда достаточно скопировать .ехе файл и вся установка.
3) ИМХО, в таком случае самое простое — перегнать графику в .bmp, присоеденить к ресурсам, после сборки релизной версии (в смысле окончательной) исполняемый файл упаковать, например upx`ом. В таком случае по LoadResource() ты сможешь грузить HBITMAP средствами WinAPI, а OpenGL с ним прекрасно работает.
Re[2]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 19.03.08 12:37
Оценка:
Здравствуйте, Tujh


У меня должна быть возможность менять текстуры , которые — jpg, поэтому компилить с ресурсами не подходит и bmp тоже. В c:\windows\system32 закидывал , поэтому и пишу тут вопрос ) если я кликаю на scr сам то все норм а если через диалог — Заставка выбираю , то текстуры нет я просто в потерях почему так происходит. Загрузка файла картинки происходит в case WM_CREATE: и такое ощущение что программа просто игнорирует загрузку файла, причем куда бы я ее не ставил толку нет при запуске через диалог — Заставка.


Здравствуйте, StDenis
Если текущая директория ..... как же тогда текстура загружается если я сам кликаю на scr
Мне кажется что проблема всетаки где-то с функциями загрузки текстуры (( каким-то образом они их проходит мимо...

вот исходники, посмотрите может чего и увидете что не так.
image2.jpg — текстура
папка — data , там lib и заголовки для загрузки jpg, с такими путями как есть и собирайте.

здесь
Re[3]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Аноним  
Дата: 19.03.08 12:57
Оценка:
а юзер system имеет права на файлы нужные?
Re[4]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 19.03.08 14:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а юзер system имеет права на файлы нужные?


тоесть вы хотите сказать что нужно попробовать кинуть картинку в другой каталог, а scr в system, прописать путь к картинке в scr и должно работать ?
Не могу проверить сейчас , нет машинки под рукой, поэтому только размышлизмы и поиски путей )
Re[4]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 19.03.08 20:43
Оценка:
Здравствуйте, StDenis, Вы писали:

SD>вот ведь в чем загвоздка-то — можно кучу времени убить на философские рассуждения о бытие сего скринсейвера, а можно навтыкать кучу отладочных сообщений (в лог-файл или OutputDebugString+DebugView) и посмотреть какие коды ошибок возвращаются и к каким файлам обращается программа.

SD>так же весьма полезная функция GetFullPathName

SD>p.s. а если ресурсы должны быть настраиваемы юзером, то, имхо, лучше их положить в район "Application Data" или "Мои документы", иначе система/админы могут быть против


вставил в код:

static char FilуV[256];

GetFullPathName("image2.jpg",256,FilуV,NULL);
Load_Texture(TextureArray[1], FilуV);


помогло , спасибо )
Re[5]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 19.03.08 20:48
Оценка:
выше очипятка в одной букве FilуV — нужно FileV
ато вдруг кто скопирует ))
Re[6]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 19.03.08 20:56
Оценка:
сорри за офф ... нифига не получилось, это я на радостях и от усталости уже, картинка то грузится но в прежнем режиме.
Re[4]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 20.03.08 11:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а юзер system имеет права на файлы нужные?



После просмотра некоторой инфы делаю вывод что скринсейвер запускается от имени активного пользователя в данный момент а не от SYSTEM. тоесть нет необходимости ковырять права на доступ к файлу SID и т.п. Или у вас есть другая инфа по этому поводу ?

Может есть у кого еще мысли в какую сторону крутить мозг ) ?
Re[5]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 20.03.08 20:39
Оценка:
обнаружена очередная странность в работе скринсейвера , если в диалоговом окне жать кнопку просмотр то картинки как я и говорил прежде — не грузятся , а если дождаться автозапуска через установленный промежуток времени то картинки нормально подгружаются и отображаются. совсем непонимаю что происходит.
Re[6]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Tujh Голландия  
Дата: 21.03.08 06:31
Оценка:
Здравствуйте, Devoice, Вы писали:

D>обнаружена очередная странность в работе скринсейвера , если в диалоговом окне жать кнопку просмотр то картинки как я и говорил прежде — не грузятся , а если дождаться автозапуска через установленный промежуток времени то картинки нормально подгружаются и отображаются. совсем непонимаю что происходит.


Советую еще раз прочитать
http://rsdn.ru/forum/message/2881324.1.aspx
Автор: StDenis
Дата: 19.03.08

и поступить так, как там советуют
Re[6]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 21.03.08 12:11
Оценка:
Здравствуйте, StDenis, Вы писали:

D>>GetFullPathName("image2.jpg",256,FileV,NULL);

SD>вообще-то я не это имел ввиду
SD>хотя этот код может чем-то помочь — нужно сделать OutputDebugString( FileV ) посмотреть дебаггером (или DebugView) какое же там попалось полное имя файла.

SD>я все настаивал на коде в духе (т.е. не для копи-паста, а как пример алгоритма):

SD>
    GetModuleFileName( NULL, filename, filename_size );
SD>    strrchr( filename, '\\' )[0] = 0;
SD>    strncat( filename, "имякартинки.jpg", filename_size );
SD>


я понял что ты имел ввиду конкатенацию пути. просто для проверки я сделал так
if (GetFullPathName("image2.jpg",256,FileV,NULL)==GetFullPathName("scrin1.jpg",256,FileV,NULL))
if(не правда ( грузим картинку по пути FileV))
закрыть приложение
else
закрыть приложение

и вот на моменте где грузим картинку когда жму Просмотр вылетает, жду по времени что запуск был все норм.
вечероком попробую дебаггером (или DebugView) глянуть .
Re[7]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 21.03.08 12:27
Оценка:
if (GetFullPathName("image2.jpg",256,FileV,NULL)==GetFullPathName("scrin1.scr",256,FileV,NULL))

первый раз неправильно указал scrin1.jpg
Re[6]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: Devoice  
Дата: 21.03.08 17:52
Оценка:
Здравствуйте, StDenis, Вы писали:

вобщем все получилось СПАСИБО что не бросили в моем нелегком понимании проблемы ), дебагом все увидел , классная утилитка
на самом деле проблема была еще меньше, как оказалось я просто при проверках в самом начале путь неправильно прописывал , писал так C:\WINDOWS\system32 а нуна было C:\\WINDOWS\\system32 а потом полез куда ненужно и т.д. а вот когда увидел что мне выдал дебаг чуть со стула не упал )))
Итак вобщем остался один маленький вопрос , который хотелось бы уточнить почему при запуске диалога -Заставка, функция получения пути к файлу выдает вот такой адрес C:\Documents and Settings\ээээ\scrin1.scr а не тот где лежат файлы ?
Re[7]: Проблема со скринсейвером. (WinApi/C++/Opengl)
От: said222  
Дата: 08.04.08 14:32
Оценка:
Здравствуйте, Devoice, Вы писали:

D>Здравствуйте, StDenis, Вы писали:


D>Итак вобщем остался один маленький вопрос , который хотелось бы уточнить почему при запуске диалога -Заставка, функция получения пути к файлу выдает вот такой адрес C:\Documents and Settings\ээээ\scrin1.scr а не тот где лежат файлы ?


Очень советую делать так:

TCHAR buf[MAX_PATH+1];
UINT size = MAX_PATH+1;
GetWindowsDirectory(buf, size);
SetCurrentDirectory(buf);


Если сейвер с ресурсами лежит в папке Windows

или заменить
GetWindowsDirectory(buf, size);
на
GetSystemDirectory(buf, size);

если все добро лежит в System32.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.