Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2010, 16:40   #11
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

Полазил по форуму, нечего подходящего ненашёл, жаль, уже яндекс весь облазил
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 16:48   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

плохо искали.
вот мой примерчик.
http://programmersforum.ru/showpost....67&postcount=6
переделать его очень просто
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.01.2010, 16:54   #13
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

В массиве ClsTitl задайте маску(так же как и для файлов * ?) того что может быть в тексте.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Masks, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const // то что может быть в заголовках
 ClsTitl :array[0..1] of string= ('*взлом*', '*порно*');

var
  Form1: TForm1;
  function IsTitleValid(Titl :string; Masks_ :array of string):Boolean;

implementation

{$R *.dfm}

function IsTitleValid(Titl :string; Masks_ :array of string):Boolean;
var
 I :Integer;
 Buf :string;
begin
  Result := False;
 if Length(Masks_)<=0 then
  Exit;
 for I := Low(Masks_) to High(Masks_) do
 begin
  Buf := AnsiLowerCase(Masks_[I]);
  if MatchesMask(AnsiLowerCase(Titl), Buf) then
  begin
   Result := True;
   Break;
  end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsTitleValid(Edit1.Text, ClsTitl) then
  ShowMessage('Текст содержит искомые слова')
 else
  ShowMessage('Текст НЕ содержит искомые слова');
end;

end.
Вложения
Тип файла: rar Проверка окна по маскам заголовков.rar (7.4 Кб, 6 просмотров)

Последний раз редактировалось Alter; 20.01.2010 в 16:58.
Alter вне форума Ответить с цитированием
Старый 20.01.2010, 17:06   #14
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
В массиве ClsTitl задайте маску(так же как и для файлов * ?) того что может быть в тексте.
Супер, всё работает, слова находит, но как сделать чтобы он находил их в окнах приложений и закрывал?

Прекращайте ненужное цитирование предыдущих сообщений!
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 20.01.2010 в 17:11.
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 17:09   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Nice42ru
См. ссылку которую дал Пепел Феникса - это поиск окон.
А закрывать их можно послав команду
SendMessage(Хендл окна,WM_SYSCOMMAND,SC_CLOSE);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2010, 17:13   #16
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

Спасибо, сейчас попробую всё это вместе слепить.
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 17:15   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
function CloseWnd(Handle:HWND;LParam:integer ):bool;stdcall;
var s:ANSIstring;
PId,PH:integer;
begin
result:=true;
SetLength(s,512);
GetWindowTextA(Handle,PANSIChar(s), 512);
SetLength(s,lStrLen(PANSIChar(s)));
if pos('Блок',s)=0 then exit;
GetWindowThreadProcessId(Handle,@PI d);
PH:=OpenProcess(PROCESS_TERMINATE,f alse,PID);
TerminateProcess(PH,0);
CloseHandle(PH);
end;

procedure TForm1.FormClick(Sender: TObject);
begin
EnumWindows(@CloseWnd,0);
end;
вот и все.
вам трудно было посмотреть код?
трудно переделать?
ладно понимаю еще что функцию GetWindowText вы могли не знать...
но вы даже не пытались.

извиняюсь вырвалось..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 20.01.2010 в 17:18.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.01.2010, 17:31   #18
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

Пытаюсь я, вроде всё получилось но проблема в том что окно закрывается в том случае если Edit1.Text = ClsTitl, как вообще убрать ClsTitl и закрывать те названия окон которые прописаны в Edit1?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Masks;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  const // то что может быть в заголовках
 ClsTitl :array[0..1] of string= ('*l2*', '*взло*');

var
  Form1: TForm1;
    function IsTitleValid(Titl :string; Masks_ :array of string):Boolean;

implementation

{$R *.dfm}

function IsTitleValid(Titl :string; Masks_ :array of string):Boolean;
var
 I :Integer;
 Buf :string;
begin
  Result := False;
 if Length(Masks_)<=0 then
  Exit;
 for I := Low(Masks_) to High(Masks_) do
 begin
  Buf := AnsiLowerCase(Masks_[i]);
  if MatchesMask(AnsiLowerCase(Titl), Buf) then
  begin
   Result := True;
   Break;
  end;
 end;
end;

function CloseWnd(Handle:HWND;LParam:integer ):bool;stdcall;
var s:ANSIstring;
PId,PH:integer;
begin
result:=true;
SetLength(s,512);
GetWindowTextA(Handle,PANSIChar(s), 512);
SetLength(s,lStrLen(PANSIChar(s)));
if pos('Hack',s)=0 then exit;
GetWindowThreadProcessId(Handle,@PId);
PH:=OpenProcess(PROCESS_TERMINATE,false,PID);
TerminateProcess(PH,0);
CloseHandle(PH);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsTitleValid(Edit1.Text, ClsTitl) then
  EnumWindows(@CloseWnd,0)
 else
  ShowMessage('Текст НЕ содержит искомые слова');

end;
end.
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 18:30   #19
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

В итоге получилось следующее:
чтобы закрыть программу нужно чтобы в 3х местах было написано одно и тоже:
if pos('Hack',s)=0 then exit;
ClsTitl :array[0..1] of string= ('*l2*', '*взло*');
Edit1.Text
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 19:04   #20
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

---------------------------------
Подход к коду немного не верен.
Вот как надо:
1) получить список процессов. * Конечно можно и в самом процессе поиска процессов проверять х на принадлежность маске *
2) проверяем полученный список с помощью функции "IsTitleValid"
3) если соответствует маске проверяемый процесс, то вызываете закрывающую функцию.
---------------------------------
Меняем некоторые части:
"array of string" будет "TDynStrArray"
Функция "IsTitleValid" будет такой "function IsTitleValid(Titl :string; Masks_ :TDynStrArray):Boolean;"

Вот код переноса данных из строки в динамический массив(SepChr = символ разделитель, для разбора строки. Который нигде НЕ будет использоваться в массках. По умолчанию: "|"):
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
 TDynStrArray = array of string; //для нормальной работы SetLength

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Lst1: TListBox;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyMass :TDynStrArray; //этот массив будет заполняться из строки
  procedure SepTextToMas(InpTxt :string; var OutMas :TDynStrArray; SepChr :Char='|');

implementation

{$R *.dfm}

procedure SepTextToMas(InpTxt :string; var OutMas :TDynStrArray; SepChr :Char='|');
var
 Buf,TmpBuf :string;
 A :Integer;
begin
 if (InpTxt = '')or(@OutMas = nil) then
  Exit;
  Buf := InpTxt;
 while Length(Buf)>0 do
 begin
  if Pos(SepChr, Buf) > 0 then
  begin
     A := Pos(SepChr, Buf);
     TmpBuf := Copy(Buf, 1, A - 1);
    if TmpBuf <> '' then
    begin
     SetLength(OutMas, Length(OutMas)+1);
     OutMas[Length(OutMas)-1] := TmpBuf;
    end;
     Delete(Buf, 1, A);
  end
   else
  if Length(Buf) > 0  then
  begin
     TmpBuf := Copy(Buf, 1, Length(Buf));
    if TmpBuf <> '' then
    begin
     SetLength(OutMas, Length(OutMas)+1);
     OutMas[Length(OutMas)-1] := TmpBuf;
    end;
     Delete(Buf, 1, Length(Buf));
  end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 I :Integer;
begin //
 SetLength(MyMass, 0);
 SepTextToMas(Edit1.Text, MyMass, '|');
  // проверим массив
  Lst1.Items.Clear;
 if Length(MyMass) > 0 then
 begin
   Lst1.Items.Add('Всего элементов = ' + IntToStr(Length(MyMass)));
   Lst1.Items.Add('');
  for I := Low(MyMass) to High(MyMass) do
   Lst1.Items.Add(MyMass[I]);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 SetLength(MyMass, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 SetLength(MyMass, 0);
end;

end.
Вложения
Тип файла: rar Преобразование текста в массив.rar (8.5 Кб, 6 просмотров)

Последний раз редактировалось Alter; 20.01.2010 в 19:06.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как убить процесс зная его имя? One.Love Win Api 14 18.02.2012 14:31
Как убить процесс(с++) progdev Общие вопросы C/C++ 2 22.11.2009 21:30
Событие click по заголовку формы? Polotenchik Общие вопросы Delphi 3 24.06.2009 12:48
убить процесс по его идентификатору - Работа с процессами ACE Valery Общие вопросы C/C++ 8 04.06.2009 21:51
Убить процесс, md5, архивация Igoressicus Помощь студентам 1 16.01.2009 10:37