' ' ============================================================================= ' QFileAssociation April 2004 by Jacques PHILIPPE ' ' Association of an Executable to a File Extension ' with Possibility to restore the Old one ' Documentation Version 0.0.1 Beta ' ============================================================================= ' ***** WITH NO WARRANTY. USE AT YOUR OWN RISK. I USE IT ***** ' ============================================================================= ' For All Examples : ' ---------------- ' $Include "QFileAssociaton.Inc" ' Dim myFA As QFileAssociation ' ' Example 1 : simple setting of a new file association WITHOUT the possiblilty to ' --------- restore the one that was set before. ' ' myFA.SetFileAssociation (".Bas", "C:\RapidQ\RapidQ.Exe") ' ' Example 2 : setting of a new file assiociation WITH the possibility to restore ' --------- the one that was set before. ' ' myFA.NewDefaultDescriptorValue = "BAS_JFE" ' Any name for the new descriptor ' myFA.BU_Prefix = "YOUR_MARK" ' Any mark : used to create back up of old FA ' myFA.SetFileAssociationAndSaveOld (".bas", "C:\\RapidQ\\JFE\\JFE.EXE %1") ' ' Example 3 : restoring the previous file association ' --------- ' ' myFA.BU_Prefix = "YOUR_MARK" ' This is a Mark used to create back up of old FA ' myFA.Restore (".bas") ' ' Example 4 : reading all the keys and values relative to a file association. ' --------- This method helps to debug your FA. ' ' Print myFa.ShowRelatedKeysAndValues (".Bas") ' ' Example 5 : Methods SetFileAssociation, SetFileAssociationAndSaveOld and Restore return an ' --------- error number (if <16 then all is OK). That error number is transformed into a ' error text by the method GetFileAssociationErrorAsString ' ' Print GetFileAssociationErrorAsString(myFA.SetFileAssociation (".Bas", "C:\RapidQ\RapidQ.Exe")) ' ' NOTE : you should set up once and for ever QFileAssociation.BU_Prefix in the QFileAssociation ' Code. So you will never have to bother about it anymore. But it's not mandatory. ' ============================================================================= ' PROPERTIES ' ============================================================================= ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' X ALL PROPERTIES, TO THE EXCEPTION OF BU_Prefix, ARE RESET TO DEFAULT X ' X X ' X VALUES AFTER METHODS SetFileAssociation, SetFileAssociationAndSaveOld X ' X X ' X AND Restore HAVE BEEN CALLED. X ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' ----------------------------------------------------------------------------- ' NewDefaultDescriptorValue String Used when FA set with restore possibility, it like ' a 'name' for the new file assciation. Will be used ' in Registry Key to identify the FA. ' Default value is "" and will result in a Descriptor ' like this "BAS_File" for extension ".Bas" ' ----------------------------------------------------------------------------- ' DefaultIcon String A path to an Icon that will be associated with the ' file Extension. ' Default value is "", the result will be that the ' icon of the application associated with the ' extension will be used. ' ----------------------------------------------------------------------------- ' OpenType String "Open", "Print" or "Explore" see API ShellExecute ' documentation. ' Default value is "Open" ' ----------------------------------------------------------------------------- ' Open String ??? dont know ??? Let it unset ! ' Default Value is "" ' ----------------------------------------------------------------------------- ' BU_Prefix String A string used to identify your file associations ' Back Up in the Registry. Set it once for all in ' the code of your QFileAssociation.Inc file : ' - in the PRIVATE PROPERTIES AREA, uncomment ' BU_Prefix As String ' - in the PUBLIC PROPERTIES AREA, comment ' BU_Prefix As String ' - in the CONSTRUCTOR, replace "YOUR_MARK" by IE ' "JDOE" if you're called JAMES DOE ! ' ----------------------------------------------------------------------------- ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' X ALL PROPERTIES, TO THE EXCEPTION OF BU_Prefix, ARE RESET TO DEFAULT X ' X X ' X VALUES AFTER METHODS SetFileAssociation, SetFileAssociationAndSaveOld X ' X X ' X AND Restore HAVE BEEN CALLED. X ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' ============================================================================= ' METHODS ' ============================================================================= ' ----------------------------------------------------------------------------- ' Function SetFileAssociation (FileExtension As String, Command As String) As Long ' - FileExtension : the file extension with its dot to be associated with the ' command : IE ".Bas". Maximum 4 characters + the dot (IE : ".JPEG") ' - Command : the path of the application to execute for that file extension ' add " %1" if the file must be passed to the application as a command line ' argument (always add %1). ' - returned values (more than one error is possible) : ' SFA_SIMPLE_SET_ALL_OK = 2 ' SFA_ERROR_FILE_ASSOCIATION_BUSY = 256 ' SFA_ERROR_EXTENSION_IS_AN_NULLTRING = 512 ' SFA_ERROR_EXTENSION_MORE_THAN_FOUR_CHARACTERS = 16384 ' ' Simply set a new file assiciation. The old one is overwritten. ' ' Example : iError = myFA.SetFileAssociation (".Bas", "c:\Windows\Notepad.Exe %1") ' ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' X ALL PROPERTIES, TO THE EXCEPTION OF BU_Prefix, ARE RESET TO DEFAULT X ' X X ' X VALUES AFTER METHODS SetFileAssociation, SetFileAssociationAndSaveOld X ' X X ' X AND Restore HAVE BEEN CALLED. X ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' ----------------------------------------------------------------------------- ' Function SetFileAssociationAndSaveOld (FileExtension As String, Command As String) As Long ' - FileExtension : the file extension with its dot to be associated with the ' command : IE ".Bas". Maximum 4 characters + the dot (IE : ".JPEG") ' - Command : the path of the new application to execute for that file extension. ' Add " %1" if the file must be passed to the application as a command line ' argument (always add %1 :). ' - returned values (more than one error is possible) : ' SFA_SET_RESTORABLE_ALL_OK = 1 ' SFA_ERROR_FILE_ASSOCIATION_BUSY = 256 ' SFA_ERROR_EXTENSION_IS_AN_NULLTRING = 512 ' SFA_ERROR_BACK_UP_OLD_ALREADY_EXISTS = 64 ' SFA_ERROR_NO_EXTENSION_DESCRIPTOR_DEFINED = 32 ' SFA_ERROR_EXTENSION_NOT_YET_DEFINED_CANT_SAVE_OLD_DESCRIPTOR = 128 ' SFA_ERROR_INVALID_OPENTYPE_OPEN_SET = 16 ' SFA_ERROR_EXTENSION_MORE_THAN_FOUR_CHARACTERS = 16384 ' Descriptors named YOUR_MARK_OLD, YOUR_MARK_NEW are created so that the OLD file ' association can be restored and the new deleted. This function can only be used once ' even if NewDefaultDescriptorValue is change (to avoid multiple new keys and values ' to be add to the Registry). After calling Restore, it's possible to call this ' function anew. ' ' note : Properties NewDefaultDescriptorValue, DefaultIcon, OpenType, Open, BU_Prefix ' will be used to set file association with this function. ' ' example : iReturn = myFA.SetFileAssociationAndSaveOld (".bas", "C:\RapidQ\JFE\JFE.EXE %1") ' ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' X ALL PROPERTIES, TO THE EXCEPTION OF BU_Prefix, ARE RESET TO DEFAULT X ' X X ' X VALUES AFTER METHODS SetFileAssociation, SetFileAssociationAndSaveOld X ' X X ' X AND Restore HAVE BEEN CALLED. X ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' ----------------------------------------------------------------------------- ' Function Restore (FileExtension) As Long ' - FileExtension : the file extension to be restored : IE ".Bas". ' Maximum 4 characters + the dot (IE : ".JPEG") ' - returned values (more than one error is possible) : ' SFA_RESTORE_ALL_OK = 4 ' SFA_ERROR_FILE_ASSOCIATION_BUSY = 256 ' SFA_ERROR_EXTENSION_IS_AN_NULLTRING = 512 ' SFA_ERROR_RESTORE_FA_KEY_MISSING_CANT_RESTORE = 4096 ' SFA_ERROR_RESTORE_NEW_AND_OR_OLD_DESCRIPTOR_MISSING_CANT_RESTORE = 1024 ' SFA_ERROR_RESTORE_EXTENSION_KEY_DONT_EXIST = 2048 ' SFA_ERROR_EXTENSION_MORE_THAN_FOUR_CHARACTERS = 16384 ' Restores the 'old' file association and delete the 'new' ! Nothing from the 'new' ' file association is left in the Registry. ' ' note : BU_Prefix is used to look for descriptors named YOUR_MARK_OLD, YOUR_MARK_NEW ' so BU_Prefix used here must be the same than the one used when setting the 'new' ' file association. ' ' Example : iReturn = myFA.Restore (".Bas") ' ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' X ALL PROPERTIES, TO THE EXCEPTION OF BU_Prefix, ARE RESET TO DEFAULT X ' X X ' X VALUES AFTER METHODS SetFileAssociation, SetFileAssociationAndSaveOld X ' X X ' X AND Restore HAVE BEEN CALLED. X ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' ----------------------------------------------------------------------------- ' Function ShowRelatedKeysAndValues (FileExtension As string) As string ' - FileExtension : the file extension with its dot you want to see the Registry datas ' relative to that file extension : IE ".Bas" ' - returned value is a formatted string showing all Registry Keys and values relative ' to that file association. ' ' Returns a formatted string showing all the Registry Keys and values relative to this file ' association. ' It helps to debug file association (easier than editing the Registry). ' ' Example : Print ShowRelatedKeysAndValues (".Bas") ' ----------------------------------------------------------------------------- ' Function GetFileAssociationErrorAsString (Error As Long) As String ' - Error : is the integer value returned by the methods SetFileAssociation, ' SetFileAssociationAndSaveOld and Restore. ' - returned value is a formatted string containing text about the error(s). More than ' one error is possible. ' Example : Print (GetFileAssociationErrorAsString(myFA.Restore (".Bas"))) ' ----------------------------------------------------------------------------- ' ============================================================================= ' BASIC FILE ASSOCIATION REGISTRY STRUCTURE ' ============================================================================= ' There are something like 100.000 keys and values in your Registry. So adding five or ten ' more is not a problem. ' ---------------------------------------------------------------------------------------------------------------------------------------- ' Path Keys | ValueName | ValueData | Note ' ---------------------------------------------------------------------------------------------------------------------------------------- ' HKEY_CLASSES_ROOT ' |___________ '.Bas' __________________________ "" (default value) "BAS_File" "BAS_File" is the Default Descriptor ' . |_______________ "YOUR_MARK_OLD" "BAS_JFE" "BAS_JFE" is a new Descriptor (not used) ' . ' |___________ 'BAS_File' _______________________ (no defined value) ' . |__ 'Shell' ___________________ "" (default value) "Open" BTW maybe "Open", "Print", "Explore" ' . |__ 'Open' _____________ (no defined value) ' . |__ 'Command' ___ "" (default value) "C:\path\BasIde.exe %1 %2 %3" ' . ' |___________ 'BAS_JFE' ________________________ (no defined value) ' . |__ 'Shell' ___________________ "" (default value) "Open" BTW maybe "Open", "Print", "Explore" ' . |__ 'Open' _____________ (no defined value) ' . |__ 'Command' ___ "" (default valur) "C:\JFE\JFE.EXE %1 %2" ' ---------------------------------------------------------------------------------------------------------------------------------------- ' ' Registry is composed of Keys (like directories), ValueNames (like files) and ValueDatas for that ' ValueName. For FileAssociation ValueDatas are all Strings (but elsewhere, integer, binary, ... are ' possible) ' As Directories, Keys are organised hierachically. A Key can contain many ValueNames (Variables) ' and the ValueName may have a single ValueData. A special ValueName is "" the default value, it's ' the one that most often contains the used ValueData. ' ' regedit.exe or regedt32.exe allows to edit the Registry. ' ' The RapidQ QRegitry.Html is the most flawed RapidQ documentation file I ever read :) ' ------------------------------------------------------------------------------------------------------------------ '
|
|