Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
!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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
1-1108812295
Михаил_
2005-02-19 14:24
2005.03.06
Подскажите, где можно найти описание реальных имен функций Win AP


1-1108827395
AlexDid
2005-02-19 18:36
2005.03.06
IP-адрес компутера


1-1108554718
AbramovVi
2005-02-16 14:51
2005.03.06
Классы из DLL


14-1108029717
DVM
2005-02-10 13:01
2005.03.06
Черкизовский рынок горит. Пламя до 5 этажа.


3-1107420777
denis24
2005-02-03 11:52
2005.03.06
обьединение полей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский