Я не думаю, что вы ищете Arrays.toString
здесь.Взгляните на его документацию :
Возвращает строковое представление содержимого указанного массива.Строковое представление состоит из списка элементов массива, заключенного в квадратные скобки ("[]").Соседние элементы разделены символами «,» (запятая, за которой следует пробел).Элементы преобразуются в строки как String.valueOf (char).Возвращает «ноль», если a равно нулю.
Так, например, массив char[]
из { 'h', 'e', 'l', 'l', 'o' }
будет преобразован в "[h, e, l, l, o]"
.
Поскольку вы просто хотитепревратить этот массив символов в строку как есть, попробуйте использовать конструктор String
class ', который именно это и делает.
if (module.equals(new String(moduleEntry.szModule))) {
// ...
}
Если вы не ищете точное совпадение, вы можете попробовать .contains()
.
Также, не забудьте закрыть дескриптор для снимка с CloseHandle
, как в версии C ++!Если вы не закроете дескриптор, ваш метод будет терять память при каждом вызове.
private Tlhelp32.MODULEENTRY32W findModule(String module) {
Tlhelp32.MODULEENTRY32W moduleEntry = new Tlhelp32.MODULEENTRY32W.ByReference();
WinNT.HANDLE snapshot = Kernel32.INSTANCE.CreateToolhelp32Snapshot(
TH32CS_SNAPMODULE,
new WinDef.DWORD(pid)
);
if (snapshot == INVALID_HANDLE_VALUE) {
return null;
}
Tlhelp32.MODULEENTRY32W match = null;
if (Kernel32.INSTANCE.Module32FirstW(snapshot, moduleEntry)) {
do {
if (module.equals(new String(moduleEntry.szModule))) {
match = moduleEntry;
break;
}
} while (Kernel32.INSTANCE.Module32NextW(snapshot, moduleEntry));
}
Kernel32.INSTANCE.CloseHandle(snapshot);
return match;
}