![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет! Помогите, коли можете!
Есть программа, которая сворачивается в трей. Использую компонент CoolTrayIcon. Решил добавить запрет запуска копии приложения, да так, чтобы при попытке запуска, появлялась уже запущенная копия из трея. Для этого написал вот такой код: Код:
var h:THandle; ........ h:=FindWindow('TForm1', 'Пример'); if h<>0 then begin ShowWindow(h, SW_SHOWNA); SetForegroundWindow(h); end else begin Application.Initialize; и т.д. end; В результате, при повторном запуске форма появляется, но... 1) Не появляется на панели задач 2) Отображается без главного меню и кнопок (закрыть, развернуть, свернуть), т.е. без всей верхней части. Вопрос, как решить такую проблему? Спасибо Последний раз редактировалось Admin, 08.01.2015 в 15:45. |
#2
|
|||
|
|||
![]() Я делал так.
В файле проекта: Код:
function AllowSetForegroundWindow(dwProcessId: DWORD): BOOL; stdcall; external 'user32.dll'; function CanStart : Boolean; var hMutex : THandle; begin Result := True; WndMessage := RegisterWindowMessage(PChar(GetMessageName)); hMutex := CreateMutex(Nil, True, PChar(GetMutexName)); If hMutex<>0 Then If GetLastError=ERROR_ALREADY_EXISTS Then Begin AllowSetForegroundWindow(DWORD(-1)); PostMessage(HWND_BROADCAST,WndMessage,0,0); Result := False; End; end; begin If CanStart Then Begin Application.Initialize; Application.Title := 'Visual Reminder'; Application.CreateForm(TMainForm, MainForm); Application.HookMainWindow(MainForm.HookMessageProc); Application.Run; End; end. В главной форме: Код:
type TMainForm = class TForm .. function HookMessageProc(var Message : TMessage) : Boolean; end; var MainForm: TMainForm; WndMessage : Cardinal; function TMainForm.HookMessageProc(var Message: TMessage): Boolean; begin Result := False; If Message.Msg = WndMessage Then Begin TrayIcon.ShowMainForm; Application.BringToFront; SetForegroundWindow(Self.Handle); Result := True; End; end; Надеюсь, ничего не забыл... |