IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Стиль Xp в асм, Не кто не задумывался...
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Вася Пупкин

Репутация: -  1  +


Думаю, что практически все из Вас, у кого уже установлен Windows XP, заметили, что в нем изменился стиль практически всех стандартных компонентов (кнопки, поля ввода, полосы прокрутки и т.д.), но тем не менее, старые программы, написанные раньше выхода этой операционной системы продолжают сохранять прежний вид. Да и если написать какую-либо свою программу на любом языке программирования (кроме Visual Studio .Net), то все компоненты будут иметь обычный стиль, идентичный предыдущим версиям операционной системы.
Причина здесь кроется в том, что теперь за эти компоненты отвечают библиотеки Common Controls (а не User32, как раньше) и чтобы Windows XP знала, что программа готова к использованию этих компонентов, она должна сообщить операционной системе об этом определенным образом.
Итак, что же нужно сделать для того, чтобы Ваша программа могла использовать новые компоненты Windows XP? Во-первых, необходимо инициализировать библиотеки Common Controls - для этого в начало программы вставляется вызов функции InitCommonControls () или InitCommonControlsEx (...) (для этого нужно подключить к проекту файл commctrl.h и библиотеку comctl32.lib). И во-вторых, необходимо сообщить ОС, что программа должна использовать новые компоненты. А вот для этого необходимо будет написать так называемый манифест (т.е. список требований), который представляет собой xml файл определенного вида. Пример такого файла приведен ниже:
Код

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<description>Program Description</description>
<assemblyIdentity
   version="1.0.0.0"
   processorArchitecture="X86"
   name="Program Name"
   type="win32"
/>
<dependency>
   <dependentAssembly>
       <assemblyIdentity
           type="win32"
           name="Microsoft.Windows.Common-Controls"
           version="6.0.0.0"
           processorArchitecture="X86"
           publicKeyToken="6595b64144ccf1df"
           language="*"
       />
   </dependentAssembly>
</dependency>
</assembly>

Вы можете просто скопировать приведенный выше пример в файл, заменив только "Program Description" на описание Вашей программы и "Program Name" на название Вашей программы (хотя, в принципе, это не обязательно). И не исползуйте в файле манифеста русских букв, иначе программа не будет запускаться!
Далее, существуют два способа, как указать ОС, что данный файл манифеста должен быть отнесен именно к данной программе. Первый способ предельно прост. Вы копируете файл манифеста в тот же каталог, где расположена Ваша программа и переименовываете его так, чтобы его имя представляло собой следующее: "имя exe-файла программы.manifest". Т.е. если Ваша программа называется "FooBar.exe", то манифест необходимо будет переименовать в "FooBar.exe.manifest". Больше никаких изменений в программе не потребуется! Вы можете создавать все компоненты обычным образом (CreateWindow(Ex)), но они все будут выглядеть в соответствии с новым стилем Windows XP. Если же Вы запустите эту программу на более ранней версии Windows, то она просто не обратит внимание на файл манифеста и будет работать как раньше.
У приведенного способа есть очевидный недостаток - добавление лишнего файла к Вашей программе. Если кто-либо в процессе эксплуатации программы удалит этот файл (или даже просто переименует запускаемый файл программы, но не переименует файл манифеста), то программа снова начнет использовать старый стиль компонентов. Более того, ведь ни в одной программе, которая использует новый стиль OC Windows XP, нет никаких файлов манифестов! Значит это можно сделать и другим способом...
В связи с этим существует еще один способ, как связать файл манифеста с программой. Его необходимо поместить в ресурсы вашей программы. Для этого необходимо на начальном этапе сохранить манифест в какой-либо файл. Пусть он будет называться "manifest.xml". Теперь в скрипт ресурсов Вашей программы (это файл с расширением RC) необходимо добавить следующую строчку:

124DISCARDABLE"manifest.xml"

Где 1 - это идентификатор ресурса (манифест обязательно должен быть под идентификатором 1) и 24 - это тип ресурса, а заканчивается строка именем файла, в котором находится информация, помещаемая в ресурсы - в данном случае это файл "manifest.xml".
В данный момент времени в файле winuser.h от VC 6 не описан тип ресурса 24 - там описание заканчивается типом 23, который называется RT_HTML, но если посмотреть в других местах, то можно найти, что 24 - это RT_MANIFEST, а 1 (идентификатор ресурса) определен как CREATEPROCESS_MANIFEST_RESOURCE_ID. Поэтому, если Вы пишите на VC++, то можете добавить в файл winuser.h после строки
Код

#define RT_HTML         MAKEINTRESOURCE(23)

следующий текст:

#define RT_MANIFEST                        MAKEINTRESOURCE(24)
#define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1)
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(2)
#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)
#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1 /*inclusive*/)
#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(16 /*inclusive*/)

Но, в принципе, вполне можно запомнить, что для того, чтобы добавить в Вашу программу манифест просто достаточно в имеющийся (или специально для этого созданный и подключенный к проекту) файл .rc добавить строку

124DISCARDABLE"manifest.xml"

Это будет работать в VC 6, Borland C++ Builder, Delphi и программах, написанных на ассемблере (а может быть и еще где-либо).
Следует также отметить, что если Ваша программа будет запущена на более ранних версиях Windows, то операционная система просто не будет обращать внимание на манифест, расположенный в ресурсах, и программа будет нормально работать со старыми версиями компонентов.

Сообщение отредактировано: TheLizard -


--------------------
Стабильность - признак мастерства
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Вася Пупкин

Репутация: -  1  +


Вы куда все подевались? sad.gif
Кто нибудь мой труд оценит? :p2:


--------------------
Стабильность - признак мастерства
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






:p9:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Вася Пупкин

Репутация: -  1  +


Хоть один, но зато какой! :D
Спасибо. :p2:

Сообщение отредактировано: TheLizard -


--------------------
Стабильность - признак мастерства
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Молодец! :p4:


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Вася Пупкин

Репутация: -  1  +


Shadow советует мне писать про программирование на асме под Win32.
А надо?

P.S. Если надо, то может что и напишу хорошего. smile.gif

Сообщение отредактировано: TheLizard -


--------------------
Стабильность - признак мастерства
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Если хочешь писать про асм под вину, то пиши, может кто чего полезного оттуда и почерпнёт. Только банальности типа "как выглядит минимальное приложение под вину" можно опустить. Если писать, то что-нибудь интересное... Хотя, можешь и свои "АЗЫ" завести smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 7:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name