Skip to content

Commit a32af83

Browse files
committed
use custom jna interfaces to support older versions of jna-platform, version 1.0.8
1 parent 312dffe commit a32af83

File tree

6 files changed

+129
-5
lines changed

6 files changed

+129
-5
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ repositories {
2222
}
2323
2424
dependencies {
25-
implementation 'com.github.LabyStudio:java-spotify-api:1.0.7:all'
25+
implementation 'com.github.LabyStudio:java-spotify-api:1.0.8:all'
2626
}
2727
```
2828

build.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@ plugins {
44
}
55

66
group 'de.labystudio'
7-
version '1.0.7'
7+
version '1.0.8'
88

99
compileJava {
1010
sourceCompatibility = '1.8'
1111
targetCompatibility = '1.8'
1212
}
1313

14+
compileTestJava {
15+
sourceCompatibility = '1.8'
16+
targetCompatibility = '1.8'
17+
}
18+
1419
repositories {
1520
mavenCentral()
1621
}

src/main/java/de/labystudio/spotifyapi/platform/windows/api/WinApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import com.sun.jna.Native;
44
import com.sun.jna.Pointer;
55
import com.sun.jna.platform.win32.BaseTSD;
6-
import com.sun.jna.platform.win32.Kernel32;
7-
import com.sun.jna.platform.win32.Tlhelp32;
86
import com.sun.jna.platform.win32.User32;
97
import com.sun.jna.platform.win32.WinDef;
108
import com.sun.jna.platform.win32.WinNT;
119
import com.sun.jna.platform.win32.WinUser;
1210
import com.sun.jna.ptr.IntByReference;
11+
import de.labystudio.spotifyapi.platform.windows.api.jna.Kernel32;
12+
import de.labystudio.spotifyapi.platform.windows.api.jna.Tlhelp32;
1313

1414
import java.util.ArrayList;
1515
import java.util.Arrays;

src/main/java/de/labystudio/spotifyapi/platform/windows/api/WinProcess.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import com.sun.jna.Memory;
44
import com.sun.jna.Pointer;
5-
import com.sun.jna.platform.win32.Kernel32;
65
import com.sun.jna.platform.win32.WinDef;
76
import com.sun.jna.platform.win32.WinNT;
87
import com.sun.jna.ptr.IntByReference;
8+
import de.labystudio.spotifyapi.platform.windows.api.jna.Kernel32;
99

1010
import java.util.Map;
1111

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package de.labystudio.spotifyapi.platform.windows.api.jna;
2+
3+
import com.sun.jna.Native;
4+
import com.sun.jna.Pointer;
5+
import com.sun.jna.platform.win32.WinNT;
6+
import com.sun.jna.ptr.IntByReference;
7+
import com.sun.jna.win32.StdCallLibrary;
8+
import com.sun.jna.win32.W32APIOptions;
9+
10+
public interface Kernel32 extends WinNT, StdCallLibrary {
11+
12+
Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class, W32APIOptions.UNICODE_OPTIONS);
13+
14+
boolean ReadProcessMemory(HANDLE hProcess, Pointer lpBaseAddress, Pointer lpBuffer, int nSize, IntByReference lpNumberOfBytesRead);
15+
16+
boolean Module32NextW(HANDLE hSnapshot, Tlhelp32.MODULEENTRY32W lpme);
17+
18+
boolean Process32First(HANDLE var1, Tlhelp32.PROCESSENTRY32.ByReference var2);
19+
20+
boolean Process32Next(HANDLE var1, Tlhelp32.PROCESSENTRY32.ByReference var2);
21+
22+
HANDLE CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID);
23+
24+
boolean CloseHandle(HANDLE hObject);
25+
26+
HANDLE OpenProcess(int fdwAccess, boolean fInherit, int IDProcess);
27+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package de.labystudio.spotifyapi.platform.windows.api.jna;
2+
3+
import com.sun.jna.Pointer;
4+
import com.sun.jna.Structure;
5+
import com.sun.jna.platform.win32.BaseTSD;
6+
import com.sun.jna.platform.win32.WinDef;
7+
8+
import java.util.ArrayList;
9+
import java.util.Arrays;
10+
import java.util.List;
11+
12+
public interface Tlhelp32 {
13+
WinDef.DWORD TH32CS_SNAPMODULE = new WinDef.DWORD(0x00000008);
14+
WinDef.DWORD TH32CS_SNAPPROCESS = new WinDef.DWORD(0x00000002);
15+
16+
class MODULEENTRY32W extends Structure {
17+
public static class ByReference extends MODULEENTRY32W implements Structure.ByReference {
18+
}
19+
20+
public WinDef.DWORD dwSize;
21+
public WinDef.DWORD th32ModuleID;
22+
public WinDef.DWORD th32ProcessID;
23+
public WinDef.DWORD GlblcntUsage;
24+
public WinDef.DWORD ProccntUsage;
25+
public Pointer modBaseAddr;
26+
public WinDef.DWORD modBaseSize;
27+
public WinDef.HMODULE hModule;
28+
public char[] szModule = new char[255 + 1];
29+
public char[] szExePath = new char[Kernel32.MAX_PATH];
30+
31+
public MODULEENTRY32W() {
32+
this.dwSize = new WinDef.DWORD(this.size());
33+
}
34+
35+
public MODULEENTRY32W(Pointer memory) {
36+
super(memory);
37+
this.read();
38+
}
39+
40+
@Override
41+
protected List<String> getFieldOrder() {
42+
return new ArrayList<>(Arrays.asList("dwSize", "th32ModuleID", "th32ProcessID", "GlblcntUsage",
43+
"ProccntUsage", "modBaseAddr", "modBaseSize", "hModule",
44+
"szModule", "szExePath"));
45+
}
46+
}
47+
48+
class PROCESSENTRY32 extends Structure {
49+
public WinDef.DWORD dwSize;
50+
public WinDef.DWORD cntUsage;
51+
public WinDef.DWORD th32ProcessID;
52+
public BaseTSD.ULONG_PTR th32DefaultHeapID;
53+
public WinDef.DWORD th32ModuleID;
54+
public WinDef.DWORD cntThreads;
55+
public WinDef.DWORD th32ParentProcessID;
56+
public WinDef.LONG pcPriClassBase;
57+
public WinDef.DWORD dwFlags;
58+
public char[] szExeFile = new char[260];
59+
60+
public PROCESSENTRY32() {
61+
this.dwSize = new WinDef.DWORD((long) this.size());
62+
}
63+
64+
public PROCESSENTRY32(Pointer memory) {
65+
super(memory);
66+
this.read();
67+
}
68+
69+
public static class ByReference extends com.sun.jna.platform.win32.Tlhelp32.PROCESSENTRY32 implements Structure.ByReference {
70+
public ByReference() {
71+
}
72+
73+
public ByReference(Pointer memory) {
74+
super(memory);
75+
}
76+
77+
@Override
78+
protected List<String> getFieldOrder() {
79+
return new ArrayList<>(Arrays.asList("dwSize", "cntUsage", "th32ProcessID", "th32DefaultHeapID",
80+
"th32ModuleID", "cntThreads", "th32ParentProcessID", "pcPriClassBase", "dwFlags",
81+
"szExeFile"));
82+
}
83+
}
84+
85+
@Override
86+
protected List<String> getFieldOrder() {
87+
return new ArrayList<>(Arrays.asList("dwSize", "cntUsage", "th32ProcessID", "th32DefaultHeapID",
88+
"th32ModuleID", "cntThreads", "th32ParentProcessID", "pcPriClassBase", "dwFlags",
89+
"szExeFile"));
90+
}
91+
}
92+
}

0 commit comments

Comments
 (0)