/// <summary> /// Enumerate resource languages within a resource by name /// </summary> private bool EnumResourceLanguages(IntPtr hModule, IntPtr lpszType, IntPtr lpszName, ushort wIDLanguage, IntPtr lParam) { string type = ResourceUtil.GetResourceName(lpszType); List <Resource> resources = null; if (!_resources.TryGetValue(type, out resources)) { resources = new List <Resource>(); _resources[type] = resources; } IntPtr hResource = Kernel32.FindResourceEx(hModule, lpszType, lpszName, wIDLanguage); IntPtr hResourceGlobal = Kernel32.LoadResource(hModule, hResource); int size = Kernel32.SizeofResource(hModule, hResource); Resource rc = null; switch (ResourceUtil.GetResourceName(lpszType)) { case "16": // Kernel32.RT_VERSION: rc = new VersionResource(hModule, hResourceGlobal, lpszType, lpszName, wIDLanguage, size); break; case "14": // Kernel32.RT_GROUP_ICON rc = new GroupIconResource(hModule, hResourceGlobal, lpszType, lpszName, wIDLanguage, size); break; // \todo: specialize other resource types default: rc = new Resource(hModule, hResourceGlobal, lpszType, lpszName, wIDLanguage, size); break; } resources.Add(rc); return(true); }