Рейтинг:
10
Dave Kreskowiak
PID - это идентификатор процесса. Это просто число, и оно ничего не говорит вам о процессе.
Вы должны получить объект процесса с помощью Процесс.Метод GetProcessById (Int32) (System.Диагностика)[^]. Когда у вас есть объект процесса, вы вызываете приведенный ниже код, чтобы определить, является ли он 64-разрядным или нет.
Вам понадобится немного кода, чтобы сделать вызов Windows...
internal static class NativeMethods
{
// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms684139%28v=vs.85%29.aspx
public static bool Is64Bit(Process process)
{
if (Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86")
return false;
bool isWow64;
if (!IsWow64Process(process.Handle, out isWow64))
throw new Win32Exception();
return !isWow64;
}
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process([In] IntPtr process, [Out] out bool wow64Process);
}
И вы называете это так:
int pid = browser.Chrome();
Process process = Process.GetProcessById(pid);
bool is64Bit = NativeMethods.Is64Bit(process);
HemersonKl
Привет, Дэйв. У меня есть эта функция в Aobscaner.cs как я могу вызвать ее в form1. cs? Так что при поиске браузера он показывает в метке, что браузер 32x или 64x. Извините за невежество, я ученик.
<pre>[DllImport("kernel32.dll")]
static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength);
private static IntPtr OpenProcess(Process proc, ProcessAccessFlags flags)
{
return OpenProcess(ProcessAccessFlags.All, false, proc.Id);
}
public static bool Is64Bit(Process process)
{
if (Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86")
return false;
bool isWow64;
if (!IsWow64Process(process.Handle, out isWow64))
throw new System.ComponentModel.Win32Exception();
return !isWow64;
}
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process([In] IntPtr process, [Out] out bool wow64Process);
public void ReadAOB(string Scancode)
{
if ((int)processhandle > 0)
{
IntPtr bytesRead = IntPtr.Zero;
long MaxAddress = 0;
if(isbit64)
MaxAddress = 0x7fffffffffffffff;
else
MaxAddress = 0x7fffffff;
long address = 0;
addresses.Clear();
do
{
MEMORY_BASIC_INFORMATION m;
int result = VirtualQueryEx(processhandle, (IntPtr)address, out m, (uint)Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION)));
if (m.Protect == AllocationProtectEnum.PAGE_READWRITE)
{
byte[] buffer = new byte[(int)m.RegionSize];
// IntPtr buffer = IntPtr.Zero;
ReadProcessMemory(processhandle, m.BaseAddress, buffer, (int)m.RegionSize, out bytesRead);
BoyerAlgo(m.BaseAddress, buffer, Scancode, ref addresses);
}
if (address == (long)m.BaseAddress + (long)m.RegionSize)
break;
address = (long)m.BaseAddress + (long)m.RegionSize;
} while (address <= MaxAddress);
}
}
Dave Kreskowiak
Недостаточно информации, чтобы рассказать, но я уже привел вам пример того, как сделать что-то очень похожее.
Вот почему вы не должны копировать и вставлять код из интернета. У вас нет знаний, чтобы понять, что делает код, как он это делает, как интегрировать его в свой собственный код и использовать его, и самое главное, как его отлаживать.
HemersonKl
Привет. У меня источник работает правильно. С занятиями и всем прочим. Мне просто нужно, чтобы все было закончено. Make появляется, если браузер 32x или 64x.
Dave Kreskowiak
И я уже говорил вам, как вызывать методы в этом коде. Я не знаю, находится ли этот код в другом проекте Вашего решения, в каком классе он находится,..., ничего.
Мне все равно, сколько раз вы повторяете: "мне нужно, чтобы он появился, если браузер 32x или 64x". Это никогда не изменит моего ответа. Вы не предоставляете достаточно информации, чтобы ответить на вопрос "как это назвать".
Как я уже сказал, я уже приводил вам пример того, как вызывать статические методы в классе. Ты просто предпочитаешь не обращать на это внимания.
О, и это "x86 "или" x64", а не" 32x "или"64x".
HemersonKl
Я понимаю. Не знаю, как лучше объяснить. Разве что в приведенном вами примере он уже есть в исходнике моей программы, просто не знаю, как его использовать для того, что я хочу. = /
Dave Kreskowiak
Я уже говорил вам, в разделе " и вы называете это так:".
Как уже было сказано, у вас нет знаний, чтобы использовать код, скопированный из интернета. Это вещи базового уровня, которые вы не понимаете. Я бы посоветовал взять книгу для начинающих по C# и сначала пройти через нее.
Dave Kreskowiak
Неужели вы действительно думаете, что кто-то собирается скачать неизвестный код из ненадежного источника и "исправить его" для вас? Этого не случится...
HemersonKl
если я сделаю консоль.WriteLine(isbit64); в этой строке в консоли отображается true или false, когда это браузер x86 или 64x. Я хочу, чтобы это значение true или false появилось в текстовом поле. Только я не могу. = /
public void OpenProcessid(int Pid)
{
isbit64 = Is64Bit(Process.GetProcessById(Pid));
processhandle = OpenProcess(процесс.GetProcessById (Pid), ProcessAccessFlags.Все);
Приставка.WriteLine(isbit64);
}
Dave Kreskowiak
Вы не можете присвоить значение свойству Text текстового поля?
Учитывая, что приложение Windows Forms не имеет консоли для записи, я не удивлен, что вы не можете получить это значение в текстовом поле.
HemersonKl
Я не знаю, почему я не могу вызвать текстовое поле в форме для этого. Об ошибке. Я думаю, что попробую использовать
использование системы;
используя системы.Текст;
использование системы.ИО;
использование системы.Окна.Формы;
consoleredirection пространства имен
{
открытый класс TextBoxStreamWriter : TextWriter
{
Текстовое поле _output = нуль;
public TextBoxStreamWriter(вывод текстового поля)
{
_output = выход;
}
public override void Write(char value)
{
база.Запись (значение);
_выход.AppendText(значение.Метод toString());
}
общественного переопределить кодировку кодировки
{
вам { система возврата.Текст.Кодирование.Кодировке utf8; }
}
}
}
Но это тоже класс. Могу ли я выполнять функции этого класса непосредственно в моей форме.cs? Без необходимости использовать этот файл класса? Извините, я знаю, что почти ничего не понимаю. = / но так как нет более простого способа.
Dave Kreskowiak
Вам вообще не нужен этот класс или его код.
Вам просто нужно что-то вроде TextBoxName.Text = "whatever";
.
HemersonKl
Ошибка 1 имя "TextBox1" не существует в текущем контексте
Я не могу этого сделать, потому что код находится в классе. cs
Dave Kreskowiak
Вы не должны касаться каких-либо элементов управления пользовательским интерфейсом из ваших неформальных классов.
HemersonKl
ОК. Спасибо за объяснения. Я получил то, что хотел, используя класс, который отображает consolewriteLine в textbox.text content. Возможно, не самый лучший и не самый простой, но он сработал. Так что если браузер 32 бит он показывает False в текстовом поле и следовательно я это делаю =) Я знаю, что, должно быть, усложнил что-то, что может быть намного проще. Но именно так я его и нашел. Благодарю вас. Если есть другой более простой способ, я тоже благодарю вас.
частная BIT64_TextChanged недействительным(объект отправителя, EventArgs в электронной)
{
if (BIT64.Text = = " True")
{
БИТ64.Текст = "64 разрядный";
}
if (BIT64.Текст = = " Ложь")
{
БИТ64.Text = " 32Bits";
}
Dave Kreskowiak
Вау. Это плохо.
Dave Kreskowiak
С какой стати вы устанавливаете текст на " True "только для того, чтобы код изменил его на" 64bit " в обработчике событий? Почему бы просто не установить текст один раз в более подходящем методе:
if (is64Bit == true)
{
BIT64.Text = "64bit";
}
else
{
BIT64.Text = "32bit";
}
Сделано.
Таким образом, вы дважды устанавливаете свойство Text и дважды вызываете событие TextChanged.
HemersonKl
понял. Да, это потому, что textbox. text будет начинаться с текста уже что-то вроде "browser bit", но так как я не буду его использовать, я сделаю так, как вы показали. =)
HemersonKl
Аааа я вспомнила. Я не могу использовать его таким образом. Потому что, когда он не находит ни одного браузера, он не может быть ни 32x, ни 64 ^^ them textbox. text="";
Dave Kreskowiak
Ну и что? Добавьте еще одно заявление if вокруг блока, который я опубликовал.