WEB_13 » 13.08.2003 (Ср) 6:35
Вот есть статейка на ту же тему, только не на Basic'е...
Далее, существуют два способа, как указать ОС, что данный файл манифеста должен быть отнесен именно к данной программе. Первый способ предельно прост. Вы копируете файл манифеста в тот же каталог, где расположена Ваша программа и переименовываете его так, чтобы его имя представляло собой следующее: "имя exe-файла программы.manifest". Т.е. если Ваша программа называется "FooBar.exe", то манифест необходимо будет переименовать в "FooBar.exe.manifest". Больше никаких изменений в программе не потребуется! Вы можете создавать все компоненты обычным образом (CreateWindow(Ex)), но они все будут выглядеть в соответствии с новым стилем Windows XP. Если же Вы запустите эту программу на более ранней версии Windows, то она просто не обратит внимание на файл манифеста и будет работать как раньше.
У приведенного способа есть очевидный недостаток - добавление лишнего файла к Вашей программе. Если кто-либо в процессе эксплуатации программы удалит этот файл (или даже просто переименует запускаемый файл программы, но не переименует файл манифеста), то программа снова начнет использовать старый стиль компонентов. Более того, ведь ни в одной программе, которая использует новый стиль OC Windows XP, нет никаких файлов манифестов! Значит это можно сделать и другим способом...
В связи с этим существует еще один способ, как связать файл манифеста с программой. Его необходимо поместить в ресурсы вашей программы. Для этого необходимо на начальном этапе сохранить манифест в какой-либо файл. Пусть он будет называться "manifest.xml". Теперь в скрипт ресурсов Вашей программы (это файл с расширением RC) необходимо добавить следующую строчку:
1 24 DISCARDABLE "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 добавить строку