Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Как программно закрыть окно чужого диалога   Найти похожие ветки 

 
!Cyber ©   (2005-01-20 08:23) [0]

Собственно говоря сабж. Использовал примеры из ФАКа - не помогло, по части или полному названию окошка - аналогично.

WinSight:
- Popup 000B075A {#32770:Dialog} Proga.exe (766,18)-1018,151 "Multi Technology Tools"
Child 005606C6 {Button} Proga.exe (86,67)-(161,90) "OK"
Child 00280774 {Static} Proga.exe (11,11)-(43,43)
Child 00080770 {Static} Proga.exe (62,11)-(241,52) "Failed connection"


 
Cosinus ©   (2005-01-20 09:43) [1]

А почему не помогло то? Код давай.


 
!Cyber ©   (2005-01-20 09:52) [2]

Вариант 1:
procedure TForm1.Button1Click(Sender: TObject);
var  h:HWND;
begin
h:=FindWindow(pChar("#32770:Dialog"),pChar("Multi Technology Tools"));
if h<>0 then SendMessage(h,WM_CLOSE,0,0);
end;

Вариант 2 (FAQ по API сего сайта):
type
PFindWindowStruct = ^TFindWindowStruct;
TFindWindowStruct = record
Caption : string;
ClassName : string;
WindowHandle : THandle;
end;

function EnumWindowsProc(hWindow : hWnd;
                         lParam  : LongInt) : Bool
{$IFDEF Win32} stdcall;
{$ELSE} ; export;
{$ENDIF}
var   lpBuffer : PChar;
WindowCaptionFound : bool;
ClassNameFound : bool;
begin
GetMem(lpBuffer, 255);
Result := True;
WindowCaptionFound := False;
ClassNameFound := False;
try
if GetWindowText(hWindow, lpBuffer, 255) > 0 then
if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0
  then WindowCaptionFound := true;
  if PFindWindowStruct(lParam).ClassName = "" then
  ClassNameFound := True else
  if GetClassName(hWindow, lpBuffer, 255) > 0 then
  if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer))
     > 0 then ClassNameFound := True;
  if (WindowCaptionFound and ClassNameFound) then begin
     PFindWindowStruct(lParam).WindowHandle := hWindow;
     Result := False;
     end;
finally
  FreeMem(lpBuffer, sizeof(lpBuffer^));
end;
end;

function FindAWindow(Caption : string;
        ClassName : string) : THandle;
var   WindowInfo : TFindWindowStruct;
begin
with WindowInfo do begin
Caption := Caption;
ClassName := ClassName;
WindowHandle := 0;
EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
FindAWindow := WindowHandle;
end;
end;

procedure TForm1.Button1Click(Sender: TObject); var
TheWindowHandle : THandle;
begin   TheWindowHandle := FindAWindow("Multi Technology Tools", "");
if TheWindowHandle = 0 then
ShowMessage("Window Not Found!") else
//BringWindowToTop(TheWindowHandle);
SendMessage(TheWindowHandle,WM_CLOSE,0,0);
end;


 
DVM ©   (2005-01-20 10:47) [3]

HWND окна находится успешно?


 
!Cyber ©   (2005-01-20 14:47) [4]

нет ... равен 0

Принципиально - варианты должны быть рабочими или нет?

Может быть обращение к диалоговым окнам осуществляется иначе? Все это срабатывало с обычными окнами ... есть ли отличия от них у MessageDlg?


 
!Cyber ©   (2005-01-20 15:02) [5]

Может подскажете как вывести список всех активных classname и их caption в табличку, а потом вручную выбрать нужный?


 
Style ©   (2005-01-20 16:08) [6]


> и их caption в табличку, а потом вручную выбрать нужный?

А что окон с таким Caption, у тебя много???

Попробуй так..
h:=FindWindow(nil,pChar("Multi Technology Tools"));


 
Arnold ©   (2005-01-20 20:18) [7]

Попробуй не SendMEssage а PostMEssage


 
Sumor   (2005-01-20 20:42) [8]

Class окна всех общих диалогов не #32770:Dialog, а просто #32770.
Если не хочешь класс указывать - пиши вместо него nil а не "" - это разные вещи.
Если название окна известно не полностью, то только перебором через EnumWindows, но опять таки помня о правильности написания класса и названия окна


 
!Cyber ©   (2005-01-21 07:42) [9]

2Sumor:
Спасибо, все работает! По поводу nil - хорошая идея.

Век живи, век учись - все равно дураком помрешь.



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
14-1108507168
Луарвик
2005-02-16 01:39
2005.03.06
Ура! БД MySQL


14-1108560505
TeNY
2005-02-16 16:28
2005.03.06
Интересно,а реклама C++ на сайте посвященному Delphi это издевка?


10-1085723911
Punker
2004-05-28 09:58
2005.03.06
Выбрать лист в Excel?


14-1108457078
Franzy
2005-02-15 11:44
2005.03.06
Не ставится Win98


1-1108563260
Zilog
2005-02-16 17:14
2005.03.06
Как корректно уничтожить объект изнутри