Пятница, 15 Ноя 2024, 04:55
Uchi.ucoz.ru
Меню сайта
Форма входа

Категории раздела
Высшая математика [11]
Экономическая социология [95]
Основы Менеджмента [64]
Бухгалтерский учёт [157]
Философия [163]
Мировая Экономика [603]
Бизнес планирование [29]
Финансирование и кредитование инвест [105]
Ценообразование [46]
Гражданское право [196]
Права Человека [173]
Основы Маркетинга [207]
Основы энергосбережения [55]
Информатика [0]
Экология и устойчивое развитие [0]
Физика для студентов [0]
Основы права [0]
Политология [0]
Не стандартные примеры на Delphi [169]
Примеры на Delphi7 [108]
Алгоритмы [94]
API [110]
Pascal [152]
Базы Данных [6]
Новости
Чего не хватает сайту?
500
Статистика
Зарегистрировано на сайте:
Всего: 51643


Онлайн всего: 24
Гостей: 24
Пользователей: 0
Яндекс.Метрика
Рейтинг@Mail.ru

Каталог статей


Главная » Статьи » Студентам » API

Как не допустить запуск второй копии программы XIII
Своим опытом делится Олег
Кулабухов:
Самый простой, но немного некорректный способ - найти заголовок окна по
FindWindow() и выполнять какие-либо действия в зависимости от того, есть ли
такое окно или нет. Второй выриант - через определение мутексов. Если определить
мутекс не удастся - всем окнам передается системное сообщение.

Нижеприведенный пример проверяет наличие окна, если таковое имеется - делает
его видимым (если оно минимизировано). Впрочем - дольше объяснять, смотрите
сами.

{The
code for OneInstance.dpr}

program
OneInstance;

uses
Windows,
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
{Attempt to create a named
mutex}
CreateMutex(nil, false, 'MyApp');
{if it failed then there is
another instance}
if GetLastError = ERROR_ALREADY_EXISTS
then begin
{Send all windows our custom message -
only our other}
{instance will recognise it, and restore
itself}
SendMessage(HWND_BROADCAST,
RegisterWindowMessage('MyApp'),
0,
0);
{Lets quit}
Halt(0);
end;
Application.Initialize;
{Tell Delphi to un-hide it's hidden application window}
{This
allows our instance to have a icon on the task
bar}
Application.ShowMainForm :=
true;
ShowWindow(Application.Handle,
SW_RESTORE);
Application.CreateForm(TForm1,
Form1);
Application.Run;
end.

{The
code for unit1.pas}

unit
Unit1;

interface

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

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

var
Form1:
TForm1;

implementation

{$R
*.DFM}

var
OldWindowProc : Pointer; {Variable for the old windows proc}
MyMsg : DWord; {custom systemwide message}

function
NewWindowProc(WindowHandle : hWnd;
TheMessage : LongInt;
ParamW :
LongInt;
ParamL : LongInt) : LongInt stdcall;
begin
if
TheMessage = MyMsg then begin
{Tell the
application to restore, let it restore the
form}
SendMessage(Application.handle, WM_SYSCOMMAND, SC_RESTORE, 0);
SetForegroundWindow(Application.Handle);
{We handled the message - we are done}
Result := 0;
exit;
end;
{Call the
original winproc}
Result :=
CallWindowProc(OldWindowProc,
WindowHandle,
TheMessage,
ParamW,
ParamL);
end;

procedure
TForm1.FormCreate(Sender: TObject);
begin
{Register a custom windows message}
MyMsg :=
RegisterWindowMessage('MyApp');
{Set form1's windows proc to ours and remember the old window
proc}
OldWindowProc :=
Pointer(SetWindowLong(Form1.Handle,
GWL_WNDPROC,
LongInt(@NewWindowProc)));
end;

procedure
TForm1.FormDestroy(Sender: TObject);
begin
{Set
form1's window proc back to it's original
procedure}
SetWindowLong(Form1.Handle,
GWL_WNDPROC,
LongInt(OldWindowProc));
end;

begin
{Tell Delphi to hide it's hidden application window for now to
avoid}
{a "flash" on the taskbar if we halt due to another
instance}
ShowWindow(Application.Handle, SW_HIDE);
end.
Категория: API | Добавил: Lerka (22 Ноя 2012)
Просмотров: 501 | Рейтинг: 1.0/ 4 Оштрафовать | Жаловаться на материал
Похожие материалы
Всего комментариев: 0

Для блога (HTML)


Для форума (BB-Code)


Прямая ссылка

Профиль
Пятница
15 Ноя 2024
04:55


Вы из группы: Гости
Вы уже дней на сайте
У вас: непрочитанных сообщений
Добавить статью
Прочитать сообщения
Регистрация
Вход
Улучшенный поиск
Поиск по сайту Поиск по всему интернету
Наши партнеры
Интересное
Популярное статьи
Портфолио ученика начальной школы
УХОД ЗА ВОЛОСАМИ ОЧЕНЬ ПРОСТ — ХОЧУ Я ЭТИМ ПОДЕЛИТ...
Диктанты 2 класс
Детство Л.Н. Толстого
Библиографический обзор литературы о музыке
Авторская программа элективного курса "Практи...
Контрольная работа по теме «Углеводороды»
Поиск
Главная страница
Используются технологии uCoz