-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.cpp
More file actions
82 lines (62 loc) · 2.21 KB
/
utils.cpp
File metadata and controls
82 lines (62 loc) · 2.21 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "utils.h"
#include <Windows.h>
#include <VMProtectSDK.h>
jclass ForgeFindClass(const char* name)
{
VMProtectBegin("ForgeFindClass");
if (LaunchWrapperClassLoaderClass == NULL)
{
LaunchWrapperClassLoaderClass = g_env->FindClass("net/minecraft/launchwrapper/LaunchClassLoader");
if (LaunchWrapperClassLoaderClass == NULL) return NULL;
}
if (FindClassMethodID == NULL)
{
FindClassMethodID = g_env->GetMethodID(LaunchWrapperClassLoaderClass, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
if (FindClassMethodID == NULL) return NULL;
}
if (LaunchClass == NULL)
{
LaunchClass = g_env->FindClass("net/minecraft/launchwrapper/Launch");
if (LaunchClass == NULL) return NULL;
}
if (ClassLoaderFieldID == NULL)
{
ClassLoaderFieldID = g_env->GetStaticFieldID(LaunchClass, "classLoader", "Lnet/minecraft/launchwrapper/LaunchClassLoader;");
if (ClassLoaderFieldID == NULL) return NULL;
}
if (ClassLoaderObject == NULL)
{
ClassLoaderObject = g_env->GetStaticObjectField(LaunchClass, ClassLoaderFieldID);
if (ClassLoaderObject == NULL) return NULL;
}
jstring jname = g_env->NewStringUTF(name);
jclass cls = (jclass)g_env->CallObjectMethod(ClassLoaderObject, FindClassMethodID, jname);
g_env->DeleteLocalRef(jname);
VMProtectEnd();
return cls;
}
BOOL CALLBACK WindowEnumCB(HWND hwnd, LPARAM params) {
DWORD pid = 0;
GetWindowThreadProcessId(hwnd, &pid);
WindowInfo* info = (WindowInfo*)params;
if (info->TargetPID == pid) {
char captionBuffer[255]{ 0 };
char classNameBuffer[255]{ 0 };
GetWindowTextA(hwnd, captionBuffer, sizeof(captionBuffer));
GetClassNameA(hwnd, classNameBuffer, sizeof(classNameBuffer));
if (strcmp(classNameBuffer, "LWJGL") != 0) {
return TRUE;
}
info->Caption = std::string(captionBuffer);
info->ClassName = std::string(classNameBuffer);
return FALSE;
}
return TRUE;
}
WindowInfo GetWindowInfoByPID(const int pid)
{
WindowInfo info{ 0 };
info.TargetPID = pid;
EnumWindows(WindowEnumCB, (LPARAM) &info);
return info;
}