>?GetProgID([{002D2B10-C1FA-4193-B134-D86EAECC5250}]) > >******************************************************** >FUNCTION GetProgID(tcCLSID) > > LOCAL lqCLSID, lcProgID, lhMem > > DO CASE > CASE LEN(tcCLSID) = 16 > lqCLSID = tcCLSID > CASE LIKE([{????????-????-????-????-????????????}],tcCLSID) > lqCLSID = REPLICATE(0h00,16) > > IF CLSIDFromString(STRCONV(tcCLSID+CHR(0),5),@lqCLSID) <> 0 > ERROR "Invalid CLSID" > ENDIF > OTHERWISE > ERROR "Invalid CLSID" > ENDCASE > > lhMem = 0 > lcProgID = "" > IF ProgIDFromCLSID(lqCLSID, @lhMem) = 0 > lcProgID = STRCONV(SYS(2600, lhMem, 80),6) > lcProgID = LEFT(lcProgID, AT(CHR(0),lcProgID)-1) > LocalFree(lhMem) > ENDIF > > RETURN lcProgID > >ENDFUNC > >******************************************************** >FUNCTION ProgIDFromCLSID(tcCLSID, tnProgID) > DECLARE Long ProgIDFromCLSID IN ole32 String, Long@ > RETURN ProgIDFromCLSID(tcCLSID, @tnProgID) >ENDFUNC > >******************************************************** >FUNCTION CLSIDFromString(tcString, tcCLSID) > DECLARE Long CLSIDFromString IN ole32 String, String@ > RETURN CLSIDFromString(tcString, @tcCLSID) >ENDFUNC > >******************************************************** >FUNCTION LocalFree(nHandle) > DECLARE Long LocalFree IN WIN32API Long > RETURN LocalFree(nHandle) >ENDFUNC >