BOOL CTalkMasterConsoleDlg::insertMenuItem( CMenu *menu, int row, char *buffer, int ID ) { MENUITEMINFO MenuItem = { sizeof(MENUITEMINFO), MIIM_ID | MIIM_TYPE, MFT_STRING, NULL, ID_VIEW_PREFERENCES, NULL, NULL, NULL, NULL, getResourceString(IDS_STRING_PREFERENCES).GetBuffer(), getResourceString(IDS_STRING_PREFERENCES).GetLength()+1 // NULL }; MenuItem.dwTypeData = (LPSTR)buffer; MenuItem.cch = strlen(buffer)+1; MenuItem.wID = ID; menu->InsertMenuItem(row, &MenuItem, TRUE); return(TRUE); }
bool NEResources::readResourceTable(uint32 offset) { if (!_exe) return false; if (!_exe->seek(offset)) return false; uint32 align = 1 << _exe->readUint16LE(); uint16 typeID = _exe->readUint16LE(); while (typeID != 0) { // High bit of the type means integer type WinResourceID type; if (typeID & 0x8000) type = typeID & 0x7FFF; else type = getResourceString(*_exe, offset + typeID); uint16 resCount = _exe->readUint16LE(); _exe->skip(4); // reserved for (int i = 0; i < resCount; i++) { Resource res; // Resource properties res.offset = _exe->readUint16LE() * align; res.size = _exe->readUint16LE() * align; res.flags = _exe->readUint16LE(); uint16 id = _exe->readUint16LE(); res.handle = _exe->readUint16LE(); res.usage = _exe->readUint16LE(); res.type = type; // High bit means integer type if (id & 0x8000) res.id = id & 0x7FFF; else res.id = getResourceString(*_exe, offset + id); if (typeID & 0x8000 && ((typeID & 0x7FFF) < ARRAYSIZE(s_resTypeNames)) && s_resTypeNames[typeID & 0x7FFF][0] != 0) debug(2, "Found resource %s %s", s_resTypeNames[typeID & 0x7FFF], res.id.toString().c_str()); else debug(2, "Found resource %s %s", type.toString().c_str(), res.id.toString().c_str()); _resources.push_back(res); } typeID = _exe->readUint16LE(); } return true; }
void CTalkMasterConsoleDlg::initSystemTray() { m_nid.cbSize = sizeof(m_nid); m_nid.hWnd = this->m_hWnd; m_nid.uID = WM_USER+0x1000; m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; m_nid.uCallbackMessage = WM_USER+0x1000; #ifdef PRIMEX_BUILD m_nid.hIcon = theApp.LoadIcon(IDR_MAINFRAME); #else m_nid.hIcon = theApp.LoadIcon(IDI_ICON_TASK_BAR); #endif // m_nid.uVersion = 5; #ifdef PRIMEX_BUILD strcpy( m_nid.szTip ,getResourceString(IDS_STRING184)); #else strcpy( m_nid.szTip ,getResourceString(IDS_STRING185)); #endif // Shell_NotifyIcon( NIM_SETVERSION, &m_nid ); }
QString FhoRes::getResourceString(QString &resourceIdentifier) { // e.g. '@%SystemRoot%\system32\SHELL32.dll,-32517' QString resourceString; QStringList split = resourceIdentifier.split(",", QString::SkipEmptyParts); if (split.size() == 2) { QString resourceName = split.at(0); QString resourceIdStr = split.at(1); int resourceId = resourceIdStr.toInt(); resourceString = getResourceString(resourceName, resourceId); } return resourceString; }
QString FhoRes::getResourceString(QString &resourceName, int resourceId) { // e.g. '@%SystemRoot%\system32\SHELL32.dll' ,-32517 QString resourceString; QString libraryName = FhoEnv::expand(resourceName); // remove leading @ if (libraryName.startsWith('@')) { libraryName = libraryName.right(libraryName.length()-1); } // can we do this without loading the library (like for icons via ExtractIcon instead of LoadIcon/LoadImage)? HINSTANCE hLib = LoadLibrary((LPCTSTR) libraryName.utf16()); if (hLib != NULL) { resourceString = getResourceString(hLib, resourceId); FreeLibrary(hLib); } return resourceString; }