3@Version(value =
"1.0.0.11")
4@Compiler(version =
">=4.0")
12 static bool loaded =
false;
32 public static bool load() {
33 if (loaded ==
false) {
34 if (rtlp.rtl_osid == 1) {
35 loaded = load_linux();
37 if (loaded ==
false) {
54 Pointer cdecl readlink (
String __path,
55 ObjectPtr __buf, Pointer __len);
56 int cdecl kill(
int pid,
int sig);
59 public class Win32Api{
63 public static bool loaded =
false;
65 public static bool load() {
66 if (loaded ==
false) {
68 loadLibrary(
"psapi.dll");
81 GetProcessImageFileNameA(
104 public static bool loaded =
false;
106 if (loaded ==
false) {
108 loadLibrary(
"kernel32.dll");
118 public static const int MAX_PATH = 260,
119 TH32CS_SNAPHEAPLIST = 1,
120 TH32CS_SNAPPROCESS = 2,
121 TH32CS_SNAPTHREAD = 4,
122 TH32CS_SNAPMODULE = 8,
123 TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE;
126 Pointer stdcall CreateToolhelp32Snapshot(
171 static class PROCESSENTRY32
173 @Native
public int dwSize = sizeof(
this);
182 @Native
public byte [] szExeFile =
new byte [Win32Api.Kernel32.MAX_PATH] ;
186 public class OSProcess{
193 processId = entry.th32ProcessID;
194 int len = Win32Api.Kernel32.lstrlenA(entry.szExeFile);
196 name =
new String(entry.szExeFile, 0, len);
214 if (exepath == nilptr) {
216 if (rtlp.rtl_osid == 0) {
217 if (
false == Win32Api.Psapi32.load()) {
221 long handle = open();
224 byte [] path =
new byte[Win32Api.Kernel32.MAX_PATH];
225 int [] pl =
new int[1];
226 long [] hm =
new long[1];
228 pl[0] = Win32Api.Kernel32.MAX_PATH;
231 if (Win32Api.Psapi32.EnumProcessModules(handle, hm, 8, up)) {
232 int len = Win32Api.Psapi32.GetModuleFileNameExA(handle, hm[0], path, Win32Api.Kernel32.MAX_PATH);
236 exepath =
new String(path, 0, len);
252 return Win32Api.Kernel32.OpenProcess(0x001fffff,
false, processId);
256 Win32Api.Kernel32.CloseHandle(handle);
258 public long open(
int flag,
bool bi) {
259 return Win32Api.Kernel32.OpenProcess(flag, bi, processId);
265 if (rtlp.rtl_osid == 0) {
270 r = Win32Api.Kernel32.TerminateProcess(h, code);
271 Win32Api.Kernel32.CloseHandle(h);
274 r = 0 == UnixlikeApi.kill(processId, 15);
285 return getProcessListWin32();
286 }
else if (osid == 1 || osid == 2) {
287 return getProcessListUnix();
295 List<OSProcess> plist = nilptr;
297 if (
false == UnixlikeApi.load()) {
301 plist =
new List<OSProcess>();
305 long hfind = file.
open();
310 while (file.
find(hfind, pf)) {
313 if (pname != nilptr && pname.
isDigit()) {
314 OSProcess process =
new OSProcess();
317 if (fppath != nilptr) {
324 byte []status =
new byte[1024];
327 while ((rd =
_system_.
read(fis, status, 0, 1024)) > 0) {
328 txtstatus = txtstatus +
new String(status, 0, rd);
332 int pos = txtstatus.
indexOf(
"Name:");
335 int le = txtstatus.
indexOf(
"\n", pos);
344 byte [] fullpath =
new byte[4096];
345 long length = UnixlikeApi.readlink(expath, fullpath, (
long)4096);
348 process.exepath =
new String (fullpath, 0, (
int)length);
351 process.processId = pname.
parseInt();
368 List<OSProcess> plist = nilptr;
370 if (
false == Win32Api.Kernel32.load()) {
374 PROCESSENTRY32
struct = new PROCESSENTRY32();
375 plist =
new List<OSProcess>();
377 long snopt = Win32Api.Kernel32.CreateToolhelp32Snapshot(
378 Win32Api.Kernel32.TH32CS_SNAPALL,
383 bool succ = Win32Api.Kernel32.Process32First(snopt, struct);
386 plist.add(
new OSProcess(struct));
387 succ = Win32Api.Kernel32.Process32Next(snopt, struct);
390 Win32Api.Kernel32.CloseHandle(snopt);
static final long read(long, byte[], long, long)
static final int getPlatformId()
static final void output(String)
static final long open(String, int)
static final bool close(long)
final String getMessage()
static final void loadLibrary(String)
void closeHandle(long handle)
OSProcess(PROCESSENTRY32 entry)
static List<OSProcess> getProcessListUnix()
static List<OSProcess> getProcessListWin32()
static List<OSProcess> listProcesses()
long open(int flag, bool bi)
Pointer th32DefaultHeapID
bool stdcall CloseHandle( Pointer hObject )
Pointer stdcall OpenProcess( int dwDesiredAccess, bool bInheritHandle, int dwProcessId)
int stdcall lstrlenA( ObjectPtr lpString )
bool stdcall QueryFullProcessImageNameA( ObjectPtr hProcess, int dwFlags, ObjectPtr lpExeName, ObjectPtr lpdwSize )
bool stdcall TerminateProcess( Pointer hProcess, int uExitCode )
bool stdcall Process32Next( Pointer hSnapshot, ObjectPtr lppe )
bool stdcall Process32First( Pointer hSnapshot, ObjectPtr lppe )
bool stdcall EnumProcessModules( Pointer hProcess, ObjectPtr lphModule, int cb, ObjectPtr lpcbNeeded )
int stdcall GetModuleFileNameExA( Pointer hProcess, Pointer hModule, ObjectPtr lpFilename, int nSize )
String substring(int, int)
String appendPath(String)