Форум: "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.026 c