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

Вниз

прога проге   Найти похожие ветки 

 
Дмитрий Иванов   (2002-08-15 03:25) [0]

Всем доброй ночи!
В программе есть проверка - запущена она уже или нет. Если она уже была запущена, то над надо сделать:
если она находится в SystemTray"е, вытащить оттуда и вывести на передний план;
если минимизирована сделать RESTORE и вывести на передний план;
в другом случае просто вывести на передний план;

Делаю так

program M;

uses
Windows, Forms, Messages,
main in "main.pas" {Form1};

{$R *.RES}

function EnumProc(Wd: HWnd; Param: LongInt): Boolean; stdcall;
var
Nm:Array[0..255] of Char;
begin
EnumProc := True;
if isWindow(WD) then
begin
GetWindowText(Wd,Nm,255);
if lStrCmp(Nm,PChar("Form1"))=0 then
begin
SendMessage(WD,WM_SECONDSTART,0,0);
EnumProc := False;
end;
end
end;


const AppID="abcdefghjkllkjhgfedcba";
var Handle:THandle;
begin
Handle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READONLY,0,1,AppID);
if GetLastError=ERROR_ALREADY_EXISTS then
EnumWindows (@EnumProc, 0)
else
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run
end;
CloseHandle(Handle)
end.

============================================

в main.pas"е
...
const
WM_SECONDSTART = WM_USER + 113;

....

TForm1=Class(TOBject)
...
procedure WMSECONDSTART(var Msg: TMessage); message WM_SECONDSTART;
...
end;

....

procedure TForm1.WMSECONDSTART(var Msg: TMessage);
begin
if not isWindowVisible(Handle) then
SendMessage(Handle,WM_ICONNOTIFY,100,WM_LBUTTONDBLCLK) //достаем из трея (это работает!!!)
else
if isIconic(Handle) then ShowWindow(Handle,SW_RESTORE);//не работает!!!
BringWindowToTop(Handle);//не выводит на передний план!!!
end;

...

Если окно не минимизировано, и не в трэе, то оно не выходит на первый план, а только мигает в TaskBar"е, а если минимизировано то, почему-то isIconic(Handle) дает False, а not isWindowVisible(Handle) дает True!!! Подскажите, плиз, что я делаю не так.


 
Дмитрий Иванов   (2002-08-15 10:43) [1]

???????????


 
Smithson ©   (2002-08-15 11:03) [2]

Это особенность реализации Windows 98-2000-ME-XP. Так и должно быть - на передний план не выхот, а мигает.


 
Ученик ©   (2002-08-15 11:18) [3]

Необходимо использовать AttachThreadInput, это пример по таймеру

procedure TForm1.Timer1Timer(Sender: TObject);
var
hForeGround : HWnd;
begin
hForeGround := GetForegroundWindow;
AttachThreadInput(GetWindowThreadProcessId(hForeGround, nil),
GetWindowThreadProcessId(Handle, nil), True);
SetForegroundWindow(Handle);
end;



 
Дмитрий Иванов   (2002-08-15 16:34) [4]

Но не всё получается как надо:((
Если окно не минимизировано или в трее, то на передний план выходит, за что спасибо Ученику, а вот если минимизировано, то какая-то непонятная проблема, пишу:

procedure TForm1.WMSECONDSTART(var Msg: TMessage);
var H:THandle;
begin
if not Visible then
SendMessage(Handle,WM_ICONNOTIFY,100,WM_LBUTTONDBLCLK)
else
begin
ShowWindow(Handle,SW_RESTORE);///???????????????
H:=GetForegroundWindow;
AttachThreadInput(GetWindowThreadProcessId(H, nil),
GetWindowThreadProcessId(Handle, nil), True);
SetForegroundWindow(Handle);
end;
end;

Так вот, окно то восстанавливается в прежнее состояние, только:
1. не выходит на передний план
2. его больше нельзя минимизировать!!! - нет никакой реакции при нажатии на кнопку "Свернуть"

Как быть?


 
Ученик ©   (2002-08-15 16:50) [5]

procedure TForm1.Timer1Timer(Sender: TObject);
var
hForeGround : HWnd;
begin
hForeGround := GetForegroundWindow;
AttachThreadInput(GetWindowThreadProcessId(hForeGround, nil),
GetWindowThreadProcessId(Handle, nil), True);
if IsIconic(Application.Handle) then
Application.Restore
else
SetForegroundWindow(Handle);
end;


 
Дмитрий Иванов   (2002-08-15 17:10) [6]

СПАСИБО!!!!!!!!!!!!



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
7-85260
yar
2002-06-12 19:22
2002.08.26
Disk


1-85104
I__am
2002-08-14 18:22
2002.08.26
Вопрос по созданию каталогов и Дельфей


14-85215
XXL
2002-07-31 00:50
2002.08.26
BomberMan!!!!!!


8-85137
deema
2002-03-20 20:50
2002.08.26
Запись звука на диск


1-84969
Vicheslav
2002-08-15 15:51
2002.08.26
Ув. Мастера помогите с Excel !????