//**************************************************************************** // $Module type: Package // $Module name: cEnumRscInfo // $Author : Vincent Oorsprong // Created : 2002-11-22 @ 19:10 // // Description : // // $Rev History: // 2002-11-22 Module header created //**************************************************************************** Use Fole_Api.pkg #IFDEF Get_WinAPI_EnumResourceTypes #ELSE External_Function WinAPI_EnumResourceTypes "EnumResourceTypesA" Kernel32.Dll Handle hModule Pointer lpEnumFunc Pointer lParam Returns Integer #ENDIF #IFDEF Get_WinAPI_EnumResourceNames #ELSE External_Function WinAPI_EnumResourceNames "EnumResourceNamesA" Kernel32.Dll Handle hModule Pointer lpszType Pointer lpEnumFunc Pointer lParam Returns Integer #ENDIF #IFDEF Get_RegisterVDFEnumResourcesWindow #ELSE External_Function RegisterVDFEnumResourcesWindow "RegisterVDFEnumResourcesWindow" EnumResourceInformation.Dll Handle hWindow Returns Integer #ENDIF //#IFDEF Get_WinAPI_RegisterWindowMessage //#ELSE // External_Function WinAPI_RegisterWindowMessage "RegisterWindowMessageA" User32.Dll String lpString Returns Integer //#ENDIF #IFDEF Get_WinAPI_GetProcAddress #ELSE External_Function WinAPI_GetProcAddress "GetProcAddress" Kernel32.Dll Handle hModule String lpProcName Returns Pointer #ENDIF // // Predefined Resource Types // Define RT_CURSOR For |CI1 Define RT_BITMAP For |CI2 Define RT_ICON For |CI3 Define RT_MENU For |CI4 Define RT_DIALOG For |CI5 Define RT_STRING For |CI6 Define RT_FONTDIR For |CI7 Define RT_FONT For |CI8 Define RT_ACCELERATOR For |CI9 Define RT_RCDATA For |CI10 Define RT_MESSAGETABLE For |CI11 Define RT_GROUP_CURSOR For (RT_CURSOR + 11) Define RT_GROUP_ICON For (RT_ICON + 11) Define RT_VERSION For |CI16 Define RT_DLGINCLUDE For |CI17 Define RT_PLUGPLAY For |CI19 Define RT_VXD For |CI20 Define RT_ANICURSOR For |CI21 Define RT_ANIICON For |CI22 Define RT_HTML For |CI23 Type EnumResourceNames Field EnumResourceNames.hModule As Handle // module handle Field EnumResourceNames.lpszType As Pointer // resource type Field EnumResourceNames.lpszName As Pointer // resource name Field EnumResourceNames.lParam As Integer // application-defined parameter End_Type Type EnumResourceTypes Field EnumResourceTypes.hModule As Handle // module handle Field EnumResourceTypes.lpszType As Pointer // resource type Field EnumResourceTypes.lParam As Integer // application-defined parameter End_Type Class cEnumRscInfo Is a cWinControl Procedure Construct_Object Integer iResourceTypesMsg iResourceNamesMsg Set External_Class_Name "cVDFEnumRscInfo" To "static" Forward Send Construct_Object // 2003-07-23 ------------------------------------ Start Nils G. Svedmyr Move (RegisterWindowMessage ("WM_ENUMRESOURCENAMES")) To iResourceNamesMsg Move (RegisterWindowMessage ("WM_ENUMRESOURCETYPES")) To iResourceTypesMsg // Move (WinAPI_RegisterWindowMessage ("WM_ENUMRESOURCENAMES")) To iResourceNamesMsg // Move (WinAPI_RegisterWindowMessage ("WM_ENUMRESOURCETYPES")) To iResourceTypesMsg // 2003-07-23 ------------------------------------ Stop Nils G. Svedmyr Set External_Message iResourceTypesMsg To Msg_OnResourceTypesCallBack Set External_Message iResourceNamesMsg To Msg_OnResourceNamesCallBack Property Integer phoResourceTypes (Create (Self, U_Array)) Property Integer phoResourceNames (Create (Self, U_Array)) End_Procedure// Construct_Object Function CopyPointerToDfString Pointer lpsDataPointer Returns String String sResult sCharacter Integer iVoid Pointer pCharacter If (lpsDataPointer <> 0) Begin ZeroString 1 To sCharacter GetAddress Of sCharacter To pCharacter Move (CopyMemory (pCharacter, lpsDataPointer, 1)) To iVoid While (Ascii (sCharacter) <> 0) Move (sResult + sCharacter) To sResult Increment lpsDataPointer Move (CopyMemory (pCharacter, lpsDataPointer, 1)) To iVoid End End Function_Return sResult End_Function // CopyPointerToDfString Procedure OnResourceTypesCallBack Integer wParam Integer lParam String sEnumResourceTypes szType Pointer lpszType Integer iVoid ZeroType EnumResourceTypes To sEnumResourceTypes Move (CopyMemory (AddressOf (sEnumResourceTypes), wParam, EnumResourceTypes_Size)) To iVoid GetBuff From sEnumResourceTypes At EnumResourceTypes.lpszType To lpszType If (lpszType > 65536) Begin Get CopyPointerToDfString lpszType To szType End Else Begin Move lpszType To szType End Send DoAddResourceType szType End_Procedure // OnResourceTypesCallBack Procedure OnResourceNamesCallBack Integer wParam Integer lParam String sEnumResourceNames szName Pointer lpszName Integer iVoid ZeroType EnumResourceNames To sEnumResourceNames Move (CopyMemory (AddressOf (sEnumResourceNames), wParam, EnumResourceNames_Size)) To iVoid GetBuff From sEnumResourceNames At EnumResourceNames.lpszName To lpszName If (lpszName > 65536) Begin Get CopyPointerToDfString lpszName To szName End Else Begin Move lpszName To szName End Send DoAddResourceName szName End_Procedure // OnResourceNamesCallBack Procedure DoAddResourceType String sResourceType Integer hoResourceTypes Get phoResourceTypes To hoResourceTypes If (hoResourceTypes <> 0) Begin Set Array_Value Of hoResourceTypes Item (Item_Count (hoResourceTypes)) To sResourceType End End_Procedure // DoAddResourceType Procedure DoAddResourceName String sResourceName Integer hoResourceNames Get phoResourceNames To hoResourceNames If (hoResourceNames <> 0) Begin Set Array_Value Of hoResourceNames Item (Item_Count (hoResourceNames)) To sResourceName End End_Procedure // DoAddResourceName Procedure Page Integer iState Integer iVoid Handle hWnd Forward Send Page iState If (iState) Begin Get Window_Handle To hWnd If (hWnd) Begin Move (RegisterVDFEnumResourcesWindow (hWnd)) To iVoid End End End_Procedure // Page Procedure DoEnumResourceTypes Pointer pFunction Boolean bOk Handle hDll hModule Integer iVoid hoResourceTypes Move (LoadLibrary ("EnumResourceInformation.Dll")) To hDll If (hDll = 0) Begin Error DFERR_PROGRAM "Unable to load EnumResourceInformation.Dll" Procedure_Return End Move (WinAPI_GetProcAddress (hDll, "EnumResTypeProc")) To pFunction If (pFunction = 0) Begin Get ShowLastError To iVoid Procedure_Return End Move (GetModuleHandle (0)) To hModule If (hModule = 0) Begin Error DFERR_PROGRAM "Retrieving Module Handle failed" Procedure_Return End Get phoResourceTypes To hoResourceTypes If (hoResourceTypes <> 0) Begin Send Delete_Data Of hoResourceTypes End Move (WinAPI_EnumResourceTypes (hModule, pFunction, 0)) To bOk If (Not (bOk)) Begin Get ShowLastError To iVoid Procedure_Return End End_Procedure // DoEnumResourceTypes Procedure DoEnumResourceNames String sResourceType Pointer pFunction Boolean bOk Handle hDll hModule Integer iVoid hoResourceNames If (sResourceType = "") Begin Procedure_Return End Move (LoadLibrary ("EnumResourceInformation.Dll")) To hDll If (hDll = 0) Begin Error DFERR_PROGRAM "Unable to load EnumResourceInformation.Dll" Procedure_Return End Move (WinAPI_GetProcAddress (hDll, "EnumResNameProc")) To pFunction If (pFunction = 0) Begin Get ShowLastError To iVoid Procedure_Return End Move (GetModuleHandle (0)) To hModule If (hModule = 0) Begin Error DFERR_PROGRAM "Retrieving Module Handle failed" Procedure_Return End Get phoResourceNames To hoResourceNames If (hoResourceNames <> 0) Begin Send Delete_Data Of hoResourceNames End Move (WinAPI_EnumResourceNames (hModule, sResourceType, pFunction, 0)) To bOk If (Not (bOk)) Begin Get ShowLastError To iVoid Procedure_Return End End_Procedure // DoEnumResourceNames End_Class // cEnumRscInfo