Форум » [x]Harbour » Проверка наличия в системе ОФИСА ! » Ответить

Проверка наличия в системе ОФИСА !

Andrey: Всем привет ! Подскажите, как можно проверить наличие ОФИСОВ под различные версии Windows ? Для Ms Word можно попытаться открыть через OLE свой файл. Если не открылся, значит нет его на компе ! Для Ms Excel тоже пройдет данный вариант. А как быть с OpenOffice: Write & Calc ??? Подскажите пожалуйста надежное решение.

Ответов - 39, стр: 1 2 All

Haz: Andrey пишет: и WinRar тоже нет. аналогичная фигня винрар есть в панели а в списке вимиай нет

Andrey: Haz пишет: аналогичная фигня И как тогда узнать путь к WinMerge ?

Haz: перебором по путям из переменной %PATH% или читай ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ и все что в нем


Andrey: Haz пишет: перебором по путям из переменной %PATH% Нет в путях, не устанавливается там путь. А как перебрать все нужные ключи ? У меня почему то вот такой ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinMerge_is1

PSP: Проверь, к примеру, Win32_InstalledWin32Program

Haz: Andrey пишет: А как перебрать все нужные ключи ? смотреть в примерах UNINSTALL_EDITOR

Haz: PSP пишет: Win32_InstalledWin32Program

Andrey: Win32_InstalledWin32Program - классная штука, но мне не подойдёт. Оказалось нужно получить полный путь к WinMergeU.exe для вызова этой утилиты из командной строки. Для Win32-bit искать путь можно через наличие файла по пути C:\Program Files\WinMerge\WinMergeU.exe А как для Win64-bit проверять ?

Haz: Andrey пишет: А как для Win64-bit проверять ? проверяй через Uninstall , там есть и путь откуда установили и куда установили

Andrey: Haz пишет: проверяй через Uninstall , там есть и путь откуда установили и куда установили Вот здесь ключ ....\WinMerge_is1 А вдруг на другом компе будет \WinMerge_is5 ! Как тогда сделать ?

ММК: Вот так "нахожу" путь для ворда. Работает на всех системах( хр, семерка, восьмерка, десятка, 32,64) Puti:=MSWORD_PATH() **************************** Function MSWORD_PATH() **************************** Local nHandle, cValue := "" if RegOpenKey( HKEY_LOCAL_MACHINE,; "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths", @nHandle ) == 0 RegQueryValue( nHandle, "WINWORD.EXE", @cValue ) cValue := lfn2sfn(cValue) RegCloseKey( nHandle ) endif Return (cValue)

Haz: Andrey пишет: Вот здесь ключ ....\WinMerge_is1 А вдруг на другом компе будет \WinMerge_is5 ! Как тогда сделать ? Пример из Minigui получает ВСЕ ключи. Найти в массиве элемент содержащий "WinMerge" - решается одной строкой и по барабану какое _ISxxx там приписано или как MMK написал - тоже должно работать

Andrey: Haz пишет: Пример из Minigui получает ВСЕ ключи. Ткни в название, если есть. А то их много.... Один нашел, вроде работает. Но ключ ищет дурацкий: oKey:Get("DisplayIcon")

Haz: Andrey пишет: Ткни в название, если есть. А то их много.... вчера же только тыкал смотреть в примерах UNINSTALL_EDITOR сами названия из RegEdit видно

Andrey: Haz пишет: вчера же только тыкал Да не посмотрел сразу... Упустил... На другое переключился. Спасибо !

Andrey: Сделал ! Кому интересно, вот исходник. //////////////////////////////////////////////////////////////////////// // Формируем полное имя установленного WinMerge через запись в реестре Function GetInstallWinMerge(hKey) Local aInst := {}, oReg, cReg := "", oKey, cFile Local cName := "", nId:= 0, cPathRes := '', cFind, nJ := 0 cReg := "WinMerge" hKey := IF(hKey == NIL, HKEY_LOCAL_MACHINE, hKey) oReg := TReg32():New( hKey, "Software\Microsoft\Windows\CurrentVersion\Uninstall" ) While RegEnumKey( oReg:nHandle, nId++, @cReg ) == 0 oKey := TReg32():New( hKey, "Software\Microsoft\Windows\CurrentVersion\Uninstall\" + cReg ) cName := oKey:Get("DisplayIcon") //MsgLog(nJ++,cName) if !empty(cname) .and. AT("WINMERGE",upper(cname)) > 0 //MsgLog("=============",cname) cPathRes := cname endif oKey:Close() End IF !empty(cPathRes) // Вторая попытка cPathRes := win_regRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinMerge_is1\Inno Setup: App Path") ENDIF Return cPathRes #pragma BEGINDUMP #define _WIN32_WINNT 0x0400 #include <shlobj.h> #include <windows.h> #include <commctrl.h> #include "hbapi.h" HB_FUNC ( REGENUMKEY ) { BYTE buffer[ 128 ]; hb_retnl( RegEnumKey( ( HKEY ) hb_parnl( 1 ), hb_parnl( 2 ), buffer, 128 ) ); hb_storc( buffer, 3 ); } #pragma ENDDUMP

Haz: Andrey пишет: Сделал ! Кому интересно, вот исходник.

Dima: Andrey Я не чекал тест , просто интересно , при таком подходе и путь к Winrar поймает (под вынь 32 или 64) ?

Andrey: Dima пишет: Я не чекал тест , просто интересно , при таком подходе и путь к Winrar поймает (под вынь 32 или 64) ? Вроде должен. Пробуй заменить cReg := "WinMerge" на WinRar и строку поменяй ещё: if !empty(cname) .and. AT("WINMERGE",upper(cname)) > 0 на if !empty(cname) .and. AT(upper(cReg),upper(cname)) > 0



полная версия страницы