Стиль Xp в асм, Не кто не задумывался... |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Стиль Xp в асм, Не кто не задумывался... |
gMan |
30.07.2004 10:44
Сообщение
#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 - 30.07.2004 13:24 -------------------- Стабильность - признак мастерства
|
gMan |
30.07.2004 17:58
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Вы куда все подевались?
Кто нибудь мой труд оценит? :p2: -------------------- Стабильность - признак мастерства
|
BlackShadow |
30.07.2004 23:04
Сообщение
#3
|
Гость |
:p9:
|
gMan |
31.07.2004 8:50
Сообщение
#4
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Хоть один, но зато какой! :D
Спасибо. :p2: Сообщение отредактировано: TheLizard - 31.07.2004 8:51 -------------------- Стабильность - признак мастерства
|
APAL |
31.07.2004 10:09
Сообщение
#5
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Молодец! :p4:
-------------------- |
gMan |
31.07.2004 10:17
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Shadow советует мне писать про программирование на асме под Win32.
А надо? P.S. Если надо, то может что и напишу хорошего. Сообщение отредактировано: TheLizard - 31.07.2004 10:19 -------------------- Стабильность - признак мастерства
|
BlackShadow |
1.08.2004 13:04
Сообщение
#7
|
Гость |
Если хочешь писать про асм под вину, то пиши, может кто чего полезного оттуда и почерпнёт. Только банальности типа "как выглядит минимальное приложение под вину" можно опустить. Если писать, то что-нибудь интересное... Хотя, можешь и свои "АЗЫ" завести
|
Текстовая версия | 28.04.2024 23:55 |