?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