Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Восстановление системных курсоров  (Прочитано 15778 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Deke
Гость
« : 11-09-2003 12:21 » 

Здравствуйте, люди добрые!

Я имею задать такой вопрос. В своей проге я по желанию пользователя изменяю системные курсоры при помощи  SetSystemCursor(). Через определенное время эти системные курсоры нужно восстановить. И вот тут возникает проблема, поскольку это определенное время на самом деле вовсе даже не определенное и может наступить и через несколько перезагрузок. Суть проблемы в том, что при таких условиях мне негде взять эти системные курсоры. Попытка загрузить их через LoadCurcor() / LoadImage() ни к чему не приводит, т.к. после перезагрузки новые курсоры считаются системными. Использовать SystemParametersInfo() тоже не получается, т.к. она восстанавливает все курсоры за раз, а мне нужно делать это выборочно. Решением проблемы могла бы быть явная загрузка нужных курсоров из системной dll, но я что-то не могу их найти. Если кто знает, как делу помочь, буду весьма благодарен.
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #1 : 11-09-2003 12:33 » 

все курсоры системы стандартные и нестандартные в Win сидят в директории
%SystemRoot\Cursors - бери и возвращай когда понадобится
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 11-09-2003 12:38 » new

Если я правильно понял ты передаёшь SetSystemCursor номер курсора? В MSDN они все описаны.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Deke
Гость
« Ответ #3 : 11-09-2003 14:36 » 

Цитата: Pu
все курсоры системы стандартные и нестандартные в Win сидят в директории
%SystemRoot\Cursors - бери и возвращай когда понадобится


Увы, это не так, в противном случае все было бы очень просто. В указанной директории хранятся дополнительные курсоры, устанавливаемые вместе с Виндой по желанию пользователя. Т.е. в теории могут существовать работоспособные системы, где эта директория вообще отсутствует.

Цитата
Если я правильно понял ты передаёшь SetSystemCursor номер курсора? В MSDN они все описаны.


Все верно, но я говорю не об идентификаторе курсора, а о "контенте", который за этим идентификатором скрывается, т.е. о первом параметре SetSystemCursor(). После первого вызова этой функции системный курсор меняется. Проблема в том, как получить в любой момент времени курсор, который был там до замены.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 12-09-2003 09:19 » 

"Решением проблемы могла бы быть явная загрузка нужных курсоров из системной dll, но я что-то не могу их найти"
и
"Проблема в том, как получить в любой момент времени курсор, который был там ДО замены."

немного разные вещи. А у тебя какая система?

Под w2k ты найдёшь "изменённые" курсоры в

HKEY_CURRENT_USER\Control Panel\Cursors

имя поля - имя курсора, параметр - из какого файла взят. Думаю разберёшся
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 12-09-2003 09:24 » 

Есть в Win - кнопочка, которая восстонавливает системный набор.

Как и в любом случае - можно сделать перед изменением запоминание структуры системных курсоров в буфер, или в файл. Это не много места займет. И восстанавливать оттуда...
Записан

А птичку нашу прошу не обижать!!!
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 12-09-2003 11:48 » 

Так ему не все зараз надо, а выборочно. Поэтому в регестри записываешь какой файл какому курсору соответствует, а потом восстанавливаешь. Кстати отсутствие ключа в регестри (или у него пустое значение)указывает на то, что используется стандартный курсор. Т.е. если никаких данных в регестри не нашёл то смело запускай SystemParametersInfo()
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Deke
Гость
« Ответ #7 : 12-09-2003 14:29 » 

Цитата: Джон
"Решением проблемы могла бы быть явная загрузка нужных курсоров из системной dll, но я что-то не могу их найти"
и
"Проблема в том, как получить в любой момент времени курсор, который был там ДО замены."

немного разные вещи. А у тебя какая система?


ОК, переформулирую. Требуется в любой момент времени восстановить без перезагрузки курсоры, отображаемые сразу после инсталляции ОС. Сделать это нужно выборочно для одного или нескольких курсоров, не затрагивая остальные.
У меня W2k, но работать должно везде, начиная с Windows 95.

Цитата
Под w2k ты найдёшь "изменённые" курсоры в

HKEY_CURRENT_USER\Control Panel\Cursors

имя поля - имя курсора, параметр - из какого файла взят. Думаю разберёшся


Вот если бы изменения, вносимые в эту часть реестра, отображались мгновенно, тогда и проблем бы не было. А так требуется перезагрузка, а это неприемлемо.

Цитата
Есть в Win - кнопочка, которая восстонавливает системный набор.


Это именно то, что нужно. У кого-нибудь есть исходник обработчика этой кнопочки? Улыбаюсь В асме я, к сожалению, не силен, поэтому дизассемблирование пока не для меня.
Цитата
Как и в любом случае - можно сделать перед изменением запоминание структуры системных курсоров в буфер, или в файл.


Насчет файла мысль интересная. Кто знает, как сохранить в файл курсор, имея только HCURSOR для него?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 12-09-2003 14:46 » 

А зачем перезагрузка, неее нам перезагрузка не нужна, что мы ...

Держи код:

больше ничего не надо!!!!

1.  В регестри записываешь какие файлы (с путями) для какого курсора будут установлены. Или удаляешь всё для стандартной установки

2. SystemParametersInfo(SPI_SETCURSORS,0,NULL,SPIF_SENDCHANGE);

и всё!!!
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Deke
Гость
« Ответ #9 : 12-09-2003 15:54 » 

Джон,

Ай, молодца!

Действительно, всех-то делов только, что сначала поправить реестр, а потом SystemParametersInfo(), а не наоборот, как это пытался делать я.

Спасибочки.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 13-09-2003 13:29 » 

Пожалуйстачки Улыбаюсь. И HCURSORы в файлы записывать не надо! Сразу бери курсорный файл и готово.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines