Доброго всем времени суток.
Возникло некоторое желание переползти с Делфи на C#, не зря же на него все отчего-то молятся)
Захотелось написать что-то из серии локатора окружающих персонажей, для начала всех, ну а затем возможно и из необходимого списка. (если такие существуют с исходниками с удовольствием глянул бы, поиском не нашел )
- да видел есть часть программы, по отображению персонажей вокруг, на основе PWFrameWork, но пока ищу что попроще, хотя разобраться в фрэйме интересно и потихоньку его копаю.
Да, - в C# не работал ранее, однако, в целях нового опыта выбрал именно его, на дельфях процесс создания такого проект в принципе понятен.
А вот в шарпе возникли пара вопросов - буду благодарен если подскажете.
Работаю в VS 2012
Собственно:
- типа HANDLE я так понимаю нет. Корректно ли использовать тип IntPtr, по логике вполне подходит.
- не могу вызвать OpenProcess - в чистую он его не видит, а на строки из серии [DllImport("KERNEL32.DLL")] копилях выдает страшную ругань...либо я туп и не там это втыкаю.
Заранее извините если вопросы совсем тупые.
PS ну и тупить так тупить до конца - в PWFrameWork для актуализации версий офсеты менять только в OffsetsAndAddresses ???
Последний раз редактировалось scitelz; 25.12.2013 в 16:41.
Handle - это не просто тип вроде int, а структура, но в вашем случае это указатель (или идентификатор, как понятнее) на обьект окна
потому использовать IntPtr очень даже верно, его как раз и возвращает OpenProcess
К примеру
Код:
public static class WinApi
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
}
в коде вызывать как
IntPtr handle = WinApi.OpenProcess(параметры...);
Последний раз редактировалось Vitalit; 25.12.2013 в 19:25.
- не могу вызвать OpenProcess - в чистую он его не видит, а на строки из серии [DllImport("KERNEL32.DLL")] копилях выдает страшную ругань...либо я туп и не там это втыкаю.
Рекомендую сайт [Ссылки могут видеть только зарегистрированные пользователи. ] там вроде есть верный DllImport для всех WinAPI'шных функций
Ну а втыкать это надо в тело класса, как обычную статическую функцию. Только она без тела будет, ибо импортируется извне.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
спасибо за ответы, вроде разобрался. Флаги доступа правда для OpenProcess подглядел в PWFramework так как не наткнулся на них что-то.
И еще немного разъясните для дурачка, пожалуйста. Часто видел тут самописные функции поиска PID - не ясно зачем если его можно в явном виде получить и так через свойство Id.
И основной вопрос...отличие обращения к указателю напрямую и через OpenProcess только в уровне доступа?
Ведь если пробегать по процессам можно напрямую словить хэндл процесса, что то из серии:
Код:
pwName = "elementclient";
foreach (Process p in Process.GetProcesses())
using (p)
{
bool result = false;
result = pName.Equals(p.ProcessName, StringComparison.OrdinalIgnoreCase);
if (result == true)
{
pwID = p.Id;
hProc = p.Handle;
break;
}
}