void MyGetWindowModuleFileName(ScriptValue &s, ScriptValue *args) {
	wchar_t temp[MAX_PATH*2];
	unsigned char *name;
	DWORD id;
	if (GetWindowThreadProcessId((HWND)args[0].intVal, &id)) {
		HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, id);
		if (h == 0) {
			getDebugPriv();
			h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, id);
		}
		if (!h) return;
		int len = GetModuleFileNameEx(h, 0, temp, MAX_PATH*2);
		CloseHandle(h);

		if (len > 0 && len < MAX_PATH*2 && (name = UTF16toUTF8Alloc(temp))) {
			unsigned char *name2 = name;
			if (args[1].intVal == 0) {
				unsigned char * temp = name;
				while (*temp) {
					if (*temp == '\\') name2 = temp+1;
					temp++;
				}
			}
			CreateStringValue(s, name2);
			free(name);
		}
	}
}
void MyGetWindowText(ScriptValue &s, ScriptValue *args) {
	int len = GetWindowTextLengthW((HWND)args[0].intVal);
	if (len > 0) {
		len += 200;
		wchar_t *temp = (wchar_t*) malloc(sizeof(wchar_t) * len);
		int len2 = GetWindowTextW((HWND)args[0].intVal, temp, len);
		CreateStringValue(s, temp, len2);
		free(temp);
	}
}
Example #3
0
 void DictionaryValue::SetString(const std::string& path,
     const string16& in_value)
 {
     Set(path, CreateStringValue(in_value));
 }
Example #4
0
int BeDecode(ScriptValue &sv, StringValue *s, int *pos) {
	if (s->len < pos[0]) return 0;
	if (s->value[pos[0]] == 'i') {
		pos[0] ++;
		unsigned char *end = strchr(s->value + pos[0], 'e');
		__int64 val;
		if (!ReadInt(s->value + pos[0], end, val)) return 0;
		CreateIntValue(sv, val);
		pos[0] = 1+(int)(end-s->value);
	}
	else if (s->value[pos[0]] == 'l') {
		pos[0] ++;
		CreateListValue(sv, 3);
		while (s->len > pos[0]) {
			if (s->value[pos[0]] == 'e') {
				pos[0] ++;
				return 1;
			}
			ScriptValue sv2;
			if (!BeDecode(sv2, s, pos) || !sv.listVal->PushBack(sv2)) {
				sv.Release();
				return 0;
			}
		}
		sv.Release();
		return 0;
	}
	else if (s->value[pos[0]] == 'd') {
		pos[0] ++;
		CreateDictValue(sv, 3);
		while (s->len > pos[0]) {
			if (s->value[pos[0]] == 'e') {
				pos[0] ++;
				return 1;
			}
			ScriptValue sv2, sv3;
			if (!BeDecode(sv2, s, pos)) {
				sv.Release();
				return 0;
			}
			if (sv2.type != SCRIPT_STRING || !BeDecode(sv3, s, pos)) {
				sv2.Release();
				sv.Release();
				return 0;
			}
			if (!sv.dictVal->Add(sv, sv2)) {
				sv.Release();
				return 0;
			}
		}
		sv.Release();
		return 0;
	}
	else if (s->value[pos[0]] == 'n') {
		CreateNullValue(sv);
		pos[0]++;
	}
	else if (s->value[pos[0]] == 'f') {
		pos[0]++;
		if (pos[0] + 8 > s->len) return 0;
		double d;
		memcpy(&d, s->value+pos[0], 8);
		pos[0] += 8;
		CreateDoubleValue(sv, d);
		return 1;
	}
	else {
		unsigned char *end = strchr(s->value + pos[0], ':');
		__int64 val;
		if (!ReadInt(s->value + pos[0], end, val) || val < 0) return 0;
		pos[0] = 1+(int)(end-s->value);
		if (pos[0] + val > s->len) return 0;
		if (!CreateStringValue(sv, s->value+pos[0], (int) val)) return 0;
		pos[0] += (int) val;
	}
	return 1;
}
Example #5
0
 StringValue* StringValue::DeepCopy() const
 {
     return CreateStringValue(value_);
 }