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

Вниз

Как послать WM_SYSCOMMAND,SC_RESTORE окну, которое   Найти похожие ветки 

 
Long   (2004-06-01 17:15) [0]

сидит в панели задач?
Ну, например, ловя его за Caption?
За примерчик буду очень признателен.


 
Игорь Шевченко ©   (2004-06-01 17:23) [1]

FindWindow + SendMessageTimeout


 
Long   (2004-06-01 17:30) [2]

Спасибо, Игорь.
Теория мне известна. А вот практика - увы.
Если не трудно, хотя бы маленький пример.
Не подумайте, что я халявщик и сам думать не хочу.
Сегодня целый день бился с этими HWND.
И ничего не получается :-(


 
Long   (2004-06-01 17:41) [3]

Если подробнее, то это проблеиа свернуть все окна,
а потом открыть конкретное.
Свернуть легко.
А вот, развернуть нужное?
В faq я искал и не нашел.


 
Игорь Шевченко ©   (2004-06-01 17:44) [4]


function RestoreWindow (const ACaption: string);
var
 Wnd: HWND;
 Dummy: DWORD;
begin
 Wnd := FindWindow(nil, PChar(ACaption));
 if IsWindow(Wnd) then
   SendMessageTimeout(Wnd, WM_SYSCOMMAND, SC_RESTORE, 0,
     SMTO_ABORTIFHUNG, 2000, Dummy);
end;


 
WebErr ©   (2004-06-01 17:52) [5]

Пусть окно имеет класс const MyClassName = "TMyClassName";
Далее:

procedure SetNormalMyWnd;
var
 MyWnd: HWND;
 S: PChar;
begin
 try
   GetMem(S, 256);
 except
   ShowMessage("Sorry!");
   Exit;
 end;
 MyWnd := FindWindow(0, 0);
 while MyWnd <> 0 do
 begin
   MyWnd := GetNextWindow(MyWnd, GW_HWNDNEXT);
   GetClassName(S, 255);
   if StrComp(S, MyClassName) = 0 then
   begin
     SendMessage(MyWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
     Break;
   end;
 end;
 FreeMem(S);
end;

В коде могут быть ошибки - писал на ходу. :)


 
WebErr ©   (2004-06-01 17:55) [6]


> Long   (01.06.04 17:41) [3]

Лучше пробегать по окнам и сворачивать либо раскрывать конкретные окна, тогда не будет проблем типа туда-сюда и мелькания на экране, хотя для визуального эффекта... такой подход имеет место быть!


 
Long   (2004-06-01 19:16) [7]

Не выходит, все равно.

unit Unit1;

interface

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

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

var
 Form1: TForm1;
 h,k,b:Hwnd;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var h,b:Hwnd;
begin

h:=handle;
while h > 0 do begin
if isWindowVisible(h) then
postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);
h:=getnextwindow(h,GW_HWNDNEXT);
              end;

b := FindWindow(nil, "Конкретный Caption");
if IsWindow(b) then
postmessage(b,WM_SYSCOMMAND, SC_RESTORE,0);
end;
end.

Простите меня друзья, спасибо за вашу помощь, но я так и не врубился.
Делаю вот то, что выше. Окна благополучно закрываются, а "Конкретный Caption"
не открывается. Прмо хоть стреляйся :-(


 
Игорь Шевченко ©   (2004-06-02 00:43) [8]

Long   (01.06.04 19:16)

EnumWindows почитай



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

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

Наверх





Память: 0.46 MB
Время: 0.03 c
1-1087981658
Dima
2004-06-23 13:07
2004.07.11
TOpenPictureDialog


1-1088061880
Alfer
2004-06-24 11:24
2004.07.11
Internal error L470


4-1085984346
lely
2004-05-31 10:19
2004.07.11
Запаролить CD-ROM


1-1088432471
Pafnuty
2004-06-28 18:21
2004.07.11
Вторая форма в .dll?


1-1088512200
Ben
2004-06-29 16:30
2004.07.11
Работа с текстом в Richedit е





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский