Вниз
Скачать: CL | DM;

Как заблокировать во время выполнения моей программы   Найти похожие ветки 

 
michael_B   (2002-03-30 20:21) [0]

Как заблокировать во время выполнения моей программы
запуск всех остальных и второй копии моей.
Мне нужно сделать полноэранный режим моей проги.


 
Song ©   (2002-03-30 21:02) [1]

"второй копии своей" - это несложно.
А вот "всех остальных"....


 
DenKop ©   (2002-03-30 23:37) [2]

Вот это проверка запущенной копии твоей программы:
(В принципе готовый модуль подключай и юзай)

Unit OneInstance32;

interface

implementation

uses
Forms;

var
g_hAppMutex: THandle;

function OneInstance: boolean;
var
g_hAppCritSecMutex: THandle;
dw: Longint;
begin
g_hAppCritSecMutex := CreateMutex( nil, true, PChar(Application.Title + ".OneInstance32.CriticalSection") );

// if GetLastError - лениво писать

g_hAppMutex := CreateMutex( nil, false, PChar(Application.Title + "OneInstance32.Default") );

dw := WaitForSingleObject( g_hAppMutex, 0 );

Result := (dw <> WAIT_TIMEOUT);

ReleaseMutex( g_hAppCritSecMutex ); // необязательно вследствие последующего закрытия
CloseHandle( g_hAppCritSecMutex );

end;

initialization

g_hAppMutex := 0;

finalization

if LongBool( g_hAppMutex ) then
begin
ReleaseMutex( g_hAppMutex); // необязательно
CloseHandle( g_hAppMutex );
end;

end.

В OnCreate добавляешь:
If Not(OneInstance) then Application.Terminate;{после этого никогда не увидишь второй копии своего творения}


А вот это получишь список всех запущенных:

procedure TForm1.Button1Click(Sender: TObject);
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
BEGIN {Не показываем:}
IF (Wnd <> Application.Handle) AND {-Собственное окно}
AND (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков}
THEN
BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.Items.Add(StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
ListBox1.ItemIndex := 0;
end;

После этого можешь лишь корректно завершить работу своей программы, но запретить запуск какой либо программы думаю ОС тебе этого не позволит, хотя может я и ошибаюсь.




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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.009 c
6-32919
Malyatkoya
2002-01-16 17:50
2002.04.11
Нужен совет.


6-32917
eblade
2002-01-25 18:56
2002.04.11
Как отправить через TClientSocket несколько запросов подряд?


1-32815
zje
2002-04-01 12:07
2002.04.11
Delphi6 и dfm (кодировка unicode)


14-32963
Blackweber
2002-03-03 01:25
2002.04.11
AND&OR


4-33022
Nuhim
2002-02-07 11:36
2002.04.11
Перехват запуска программ.




   Наверх