Сообщений: 112
Тем: 9
Зарегистрирован: Jan 2010
Репутация:
0
flashman Написал:С WinApi я сегодня пробовал, но пришёл к выводу, что через него геморно(лень мб ).(я пишу на С#) (делфи забросил давно).
В с# через класс Process, можно получать список всех процессов, а потом перебирать их свойства, в msdn об этом толково написано.
К тому же в классе Process , есть функция которая получает заголовок главной формы, так что прикручивать findwindow нет необходимости. У тебя есть скайп? напиши мне в ЛС.
Сообщений: 123
Тем: 2
Зарегистрирован: Sep 2008
Репутация:
1,861
Зачем FindWindow(...), если есть EnumWindows(...) и OpenProcess(...), и никаких проблем. Пока никаких. Пока l2phx не запустят от администратора, а игру от пользователя, особенно под vista/win7
И, кстати, WinAPI оно особо не зависит от языка, хоть дельфи, хоть с/с++, хоть vb, оно везде одинаковое. И что в нем сложного, не понятно? Перебрать все окна и поубивать те, что по маске не проходят по классу/заголовку окна - 25 строк кода, 10 из которых - это реализация простенького поиска по шаблону. Единственная проблема бывает, это вспомнить/отгуглить нужную функцию, особенно, если она не документированна.
Сообщений: 112
Тем: 9
Зарегистрирован: Jan 2010
Репутация:
0
Проблема в том что заголовок у всех разный, так как в заголовке пишется версия. Нужно так чтобы по началу заголовка была проверка.
ЗЫ
Неизменяемая часть заголовка (L2PacketHack)
Если ничего сложного, напиши плз кинь исход, а дальше пойдет наработки=) Я весь день ищу как, получается его закрывать - после чего появляется дочернее окно с подтверждением о выходе.. убить не получается
Побывал WM_DESTROY тож не выходит =(
Сообщений: 123
Тем: 2
Зарегистрирован: Sep 2008
Репутация:
1,861
EnumWindows(...) - вызывает callback для всех найденных окон и передает в него HWND окна, по нему можно GetWindowText(...) взять полный заголовок окна и сравнить с шаблоном (например, проверить, есть ли там текст "L2PacketHack").
Убивать процесс лучше через PostMessage( hWnd, WM_CLOSE, 0, 0 ); или TerminateProcess(...), если прав хватает. (подробнее - в гугл)
Неужели на ЭТО нужно целый день потратить?
http://lmgtfy.com/?q=winapi+find+process
http://lmgtfy.com/?q=winapi+kill+process
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
Забыл про функцию EnumWindows, но в принципе функционала C# вполне хватило для реализации, даже ещё мысли остались
Но если использовать WinApi это вроде бы не поможет если юзер переименует кэпшон у l2phx или я что-то упустил?
Сообщений: 112
Тем: 9
Зарегистрирован: Jan 2010
Репутация:
0
flashman Написал:Забыл про функцию EnumWindows, но в принципе функционала C# вполне хватило для реализации, даже ещё мысли остались
Но если использовать WinApi это вроде бы не поможет если юзер переименует кэпшон у l2phx или я что-то упустил?
Показывать будешь?=)
Сообщений: 123
Тем: 2
Зарегистрирован: Sep 2008
Репутация:
1,861
03-22-2011, 10:34 PM
(Сообщение последний раз редактировалось: 03-22-2011, 10:37 PM Blakkky.)
flashman Написал:Забыл про функцию EnumWindows, но в принципе функционала C# вполне хватило для реализации, даже ещё мысли остались
Но если использовать WinApi это вроде бы не поможет если юзер переименует кэпшон у l2phx или я что-то упустил?
Ну не обязательно же на один текст заголовка окна ориентироваться у процесса есть много чего интересного, за что можно зацепиться: имя файла, метаданные из него, путь до файла, список импорта, контрольная сумма файла или куска памяти, расставленные хуки, да мало ли чего еще, на что фантазии хватит.
Но это только начало, на много интереснее посмотреть, как будет решаться следующая ситуация: игра (и защита с ней вместе) пускается с правами пользователя, а l2phx (artmoney, cheat engine, другое) пускается с правами администратора. Метод защиты вредоносной программулинки доступный даже идиоту, а вот прибить его не очень-то уже и получится
ЗЫ: ой, блин, спалил тему XD
Добавлено через 2 минуты
Horizon Написал:Показывать будешь?=)
Ага, вот прям сейчас все сорцы и выложит
И откуда ж столько наивности-то?
Сообщений: 112
Тем: 9
Зарегистрирован: Jan 2010
Репутация:
0
А я вот невижу смысла жадничать.
Я викладываю все что делаю, тем самым я общаюсь с людьми и получаю удовольствие=)
Вот так короче я кильнул окно по имени
Код: using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace KillPHX
{
class Program
{
static void Main(string[] args)
{
Process[] ps1 = System.Diagnostics.Process.GetProcessesByName("Имя Окна");
foreach (Process p1 in ps1)
{
Console.WriteLine("Закрытие процесса....{0}", p1.ProcessName);
p1.Kill();
}
}
}
}
Но вот так и не понял как по отрывку от заголовка килять=(
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
Цитата:Но вот так и не понял как по отрывку от заголовка килять=(
Считываешь заголовок в строку (string), пропускаешь через регуляное выражение, проверяешь есть ли совпадения, если есть завершаешь процесс.
PHP код: <?php
string str_regx = @"\.*" + badNames + @"\.*"; // где badNames может быть строкой типа "artmoney", "am", "l2phx" и т.д.
Regex regex = new Regex(str_regx);
MatchCollection matches = regex.Matches(p.ProcessName);
if (matches.Count > 0)
{
p.Kill();
}
Вот так можно. Собственно какой регулярное выражение сделаешь так и искать будет.
Сообщений: 112
Тем: 9
Зарегистрирован: Jan 2010
Репутация:
0
CS0103: Элемент "p" не существует в текущем контексте.
=((( как его прикурить к твоей наработки?
|