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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2009, 21:32   #1
guffer
Пользователь
 
Регистрация: 07.07.2009
Сообщений: 58
По умолчанию FindWindow

Очень срочно,подскажите как закрыть найденное окно?
Код:
if findindow(nil,'@MAIL.RU: почта, новости, работа, рассылки, развлечения. Почта @MAIL.RU - бесплатная почта #1 - Windows Internet Explorer') <> 0 
then
begin
timer1.enabled:=false;
SendMwssage,вот тут проблема.;
end
else
timer1.enabled:=true;
end;

Последний раз редактировалось rpy3uH; 23.08.2009 в 20:12.
guffer вне форума Ответить с цитированием
Старый 21.08.2009, 21:36   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

SendMessage(H,WM_CLOSE,0,0);
H - Ссылка дескриптор
Код:
Var
 H:HWND;
Begin
 ...
 H:=FindWindow(nil,Заголовок);
If H<>0 then SendMessage(H,WM_CLOSE,0,0);
 ...
End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 22.08.2009, 00:20   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Вот полность готовы код, определяет по маске заголовка, безразличен к регистру:
Код:
unit Unit1_;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    Lst :TStrings;
    { Private declarations }
  public
    { Public declarations }
  end;

const Msk :string= '@mail.ru:*';  // задаёте маку заголовка процесса

var
  Form1: TForm1;
  Procedure GetAllWind(Sps :TStrings);
  procedure KillProcess(hWindowHandle: HWND);

implementation

{$R *.dfm}

function AddWinInfo(WinHandle: HWnd; List: TStringList): Boolean; stdcall;
var
  WinCaption, WinClass: array[0..255] of Char;
begin
  Result:=True;
  GetClassName(WinHandle,WinClass,SizeOf(WinClass));
  GetWindowText(WinHandle,WinCaption,SizeOf(WinCaption));
  List.Add(String(WinCaption) + '~' + String(WinClass));
end;

Procedure GetAllWind(Sps :TStrings);
begin
    EnumWindows(@AddWinInfo, LParam(Sps));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Lst := TStringList.Create;
  Timer1.Interval := 100;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var H :HWND;
    I,II :Integer;
    Buf :string;
begin
 Lst.Clear;
 GetAllWind(Lst);
  II := Lst.Count;
 if II>0 then
 begin
  for I:=0 to II-1 do
  begin
    Buf := Lst.Strings[I];
    Buf := Copy(Buf, 1, Pos('~', Buf)-1); // берём заголовок
   if MatchesMask(AnsiLowerCase(Buf), AnsiLowerCase(Msk))  then
   begin
      H := FindWindow(nil, PAnsiChar(Buf));
     if H<>0 then
      KillProcess(H);
     Break;
   end;
  end;
 end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Lst.Free;
end;

procedure KillProcess(hWindowHandle: HWND);
var
  hprocessID: INTEGER;
  processHandle: THandle;
  DWResult: DWORD;
begin
  SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
              SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);

  if isWindow(hWindowHandle) then
  begin
      GetWindowThreadProcessID(hWindowHandle, @hprocessID);
    if hprocessID <> 0 then
    begin
      processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
                                   False, hprocessID);
      if processHandle <> 0 then
      begin
        TerminateProcess(processHandle, 0);
        CloseHandle(ProcessHandle);
      end;
    end;
  end;
end;

end.
Alter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как использовать функции FindWindow и CloseWindow? __Demon__ Общие вопросы C/C++ 4 14.08.2009 15:29
FindWindow, окно с частицой (символомами) zotox Win Api 9 19.07.2009 16:14
FindWindow Comer_Jus Win Api 7 29.11.2008 10:17
FindWindow не нашел окна, а ShellExecute возвращает ERROR_PATH_NOT_FOUND malor Win Api 2 19.07.2007 15:15
Вопрос про функцию FindWindow Dromok Общие вопросы Delphi 3 12.02.2007 23:00