AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.10.2005, 13:07   #1  
MAcroS is offline
MAcroS
Участник
 
8 / 10 (1) +
Регистрация: 26.10.2004
Адрес: Москва
? Как посмотреть через WinAPI информацию о файле?
Имеется задача - посмотреть версию файла.

Вот обнаружил функцию
WinAPI::getFileVersionInfoEx
очень похоже, что именно она за это дело отвечает
пишу простенький джоб, чтобы проверить как оно работает

PHP код:
static void Job65(Args _args)
{
    
str     i 'параметр';
    ;
    
info(WinAPI::getFileVersionInfoEx('C:\\Program Files\\Navision\\Client\\Bin\\ax32.exe',i));

Насколько я понимаю, 'параметр' - это что-то из функции VerQueryValue
смотрел в MSDN и так и не понял что-ж мне в итоге задавать в качестве параметра, чтобы получить информацию о файле?

Подскажите, как проделать требуемое?
Старый 05.10.2005, 13:46   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
"ProductVersion" или "FileVersion"

Кроме того, для просмотра версии для русифицированных файлов необходимо изменить в WinAPI::getFileVersionInfoEx()

PHP код:
    int numOfCodePages 6;
    
str codePage[numOfCodePages];
        
codePage[1] = '040904E4';
        
codePage[2] = '040904B0';
        
codePage[3] = '000004E4';
        
codePage[4] = '000004B0';
        
codePage[5] = '041904B0'// добавлено для CP1251
        
codePage[6] = '041904E4'// добавлено для CP1251 
__________________
Axapta v.3.0 sp5 kr2
Старый 05.10.2005, 14:37   #3  
MAcroS is offline
MAcroS
Участник
 
8 / 10 (1) +
Регистрация: 26.10.2004
Адрес: Москва
Цитата:
Изначально опубликовано AndyD
"ProductVersion" или "FileVersion"


Вставляю, всё равно на выходе - ноль.

вот такой код получается:
PHP код:
static void Job65(Args _args)
{
    
#winAPI
    
str     i 'FileVersion';
    ;
    
info(WinAPI::getFileVersionInfoEx('C:\\Program Files\\Navision\\Client\\Bin\\ax32.exe',i));

Попробуйте у себя кто-нибудь, отработается он?
Может всё-ж как-то по другому надо?


Цитата:
Кроме того, для просмотра версии для русифицированных файлов необходимо изменить в WinAPI::getFileVersionInfoEx()

PHP код:
    int numOfCodePages 6;
    
str codePage[numOfCodePages];
        
codePage[1] = '040904E4';
        
codePage[2] = '040904B0';
        
codePage[3] = '000004E4';
        
codePage[4] = '000004B0';
        
codePage[5] = '041904B0'// добавлено для CP1251
        
codePage[6] = '041904E4'// добавлено для CP1251 
А ничего, что у нас тут не 6, а 4 вот здесь?
int numOfCodePages = 6;
Старый 05.10.2005, 15:25   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Проверил у себя - Ok. Версия возвращается правильно.
Вы неправильно указываете путь к файлу. Необходимо так (или это форум? Тогда сори)
"C:\\Program Files\\Navision\\Client\\Bin\\ax32.exe"

Может быть у вас язык для файла указан другой? Посмотрите в свойствах файла язык или language

PHP код:
А ничегочто у нас тут не 6а 4 вот здесь?
int numOfCodePages 6
Я указал что необходимо поменять (исправить 4 на 6).
__________________
Axapta v.3.0 sp5 kr2
Старый 05.10.2005, 15:34   #5  
MAcroS is offline
MAcroS
Участник
 
8 / 10 (1) +
Регистрация: 26.10.2004
Адрес: Москва
Да! Это я, слепой болван, совсем забыл и не заметил, и не вспомнил (давно уже внешние файлы не подключал так) что два слэша надо писать! Простите меня! )

Всё работает, спасибо огромное!
Старый 17.06.2013, 13:45   #6  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
А с закладки "Сводка", как-то можно взять информацию?
Старый 17.06.2013, 14:12   #7  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Можно, но у разных типов файлов эта закладка разная.
Вот ссылка для офисных программ.
И вот посложнее вариант.
Старый 18.06.2013, 21:03   #8  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Хотелось бы конечно API функциями
Старый 20.06.2013, 19:06   #9  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
API (чисто из аксы) функциями можно конечно, но не за чем. Я считаю акса не для этого сделана, для этого есть .net.
Вот тебе dll Interop.Dsofile.rar (dll от Microsoft, скачал по ссылке выше), ее подключаешь к аксе. И вот тебе код
X++:
static void Job129(Args _args)
{
    
    FilePath    filePath = "C:\\1.xls";
    
    DSOFile.OleDocumentPropertiesClass  oleDocument = new DSOFile.OleDocumentPropertiesClass();
    DSOFile.SummaryProperties           summaryProperties;

    ;
    oleDocument.Open(filePath,
                     true,
                     DSOFile.dsoFileOpenOptions::dsoOptionOpenReadOnlyIfNoWriteAccess);

        // Extract the properties
    summaryProperties = oleDocument.get_SummaryProperties();
    info(summaryProperties.get_Title());
    info(summaryProperties.get_Author());
    info(summaryProperties.get_Company());


    // Close the DSOFile.OleDocumentPropertiesClass
    oleDocument.Close(false);

}

Последний раз редактировалось Kainix; 20.06.2013 в 19:11.
За это сообщение автора поблагодарили: Player1 (1).
Старый 20.06.2013, 20:45   #10  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Цитата:
Сообщение от Kainix Посмотреть сообщение
API (чисто из аксы) функциями можно конечно, но не за чем. Я считаю акса не для этого сделана, для этого есть .net.
Если версия Ах3, то какбэ .net нет (каламбур))
Старый 21.06.2013, 07:31   #11  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Цитата:
версия Ах3
Юзаем ком. dll для кома dsofile.rar
Регистрируем DLL, копируй win\system32
в командной строке regsvr32 dsofile.dll.
Либо в любое место на компе тогда regsvr32 [путь]dsofile.dll.

Пишем код

X++:
static void Job130(Args _args)
{
    Com                 oleDocument = new Com('{58968145-CF05-4341-995F-2EE093F6ABA3}');
    Com                 summaryProperties;
    FilePath            filePath = "C:\\1.xls";
    ;
    oleDocument.Open(filePath,
                     true,
                     1);

        // Extract the properties
    summaryProperties = oleDocument.SummaryProperties();
    info(summaryProperties.Title());
    info(summaryProperties.Author());
    info(summaryProperties.Company());


    // Close the DSOFile.OleDocumentPropertiesClass
    oleDocument.Close(false);
    info("");
}
Придется значения енума DSOFile.dsoFileOpenOptions в студии посмотреть чтобы верные свойства задавать
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta WinAPI::SewWindow... кто знает как? UNRW DAX: Программирование 2 26.09.2008 15:28
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 0 28.10.2006 16:40
WinAPI. Ссылка (POINT) третьего уровня вложенности Владимир Максимов DAX: Программирование 2 06.02.2006 16:28
WinAPI::getLastError() DreamCreator DAX: Программирование 4 20.06.2005 10:03
WinApi. Удаление файлов глючит. NJD DAX: Программирование 10 05.12.2003 13:31

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:24.