Форум: "Основная";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];
ВнизКак заблокировать во время выполнения моей программы Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c