File: fhores.cpp

package info (click to toggle)
launchy 2.5-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 4,536 kB
  • ctags: 1,561
  • sloc: cpp: 11,735; sh: 162; makefile: 45
file content (63 lines) | stat: -rw-r--r-- 1,595 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Copyright 2009 Fabian Hofsaess

#include "precompiled.h"
#include "fhores.h"
#include "fhoenv.h"


const DWORD maxSize = 256;

QString FhoRes::getResourceString(HINSTANCE hLib, int resourceId) {
	QString resourceString;

	if (hLib != NULL) {
		TCHAR buffer[maxSize];

		int res = LoadString(hLib, abs(resourceId), buffer, maxSize);
		if (res != 0) {
			resourceString = QString::fromUtf16(buffer);
		}
	}

	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;
}

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;
}