U
UXr
Необходим метод, позволяющий определить программе, что её копия загружена и выполняется.
Если есть какие соображения поделитесь!
Если есть какие соображения поделитесь!
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Use the CloseHandle function to close the handle. The system closes the handle automatically when the process terminates. The mutex object is destroyed when its last handle has been closed.
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TCHAR szClassName[] = "MyMegaProgram";
// Преверяем, не было ли это приложение запущено ранее
if( ::FindWindow(szClassName, NULL) )
return FALSE;
// Регистрируем класс окна
wc.lpszClassName = szClassName;
.
.
RegisterClassEx(&wc);
.
.
// и т.д.
}
// Регистрируем класс окна
Да, будет, лишь бы это было Windows-приложение.программа не имеет окон. Это будет работать?
+1вы бы уже попробовали что-нибудь, теоретик вы наш
procedure TMyslotServerThread.Execute;
var
mailslot, nb:cardinal;
buf:PChar;
s:string;
begin
mailslot:=CreateMailslot(PChar('\\.\Mailslot\Myslot'), 100,
MAILSLOT_WAIT_FOREVER, nil);
If mailslot=INVALID_HANDLE_VALUE then
begin
ShowMessage('Error slot');
exit;
end;
buf:=StrAlloc(120);
FillChar(buf^, 120, #0);
While (not Terminated) do
begin
ReadFile(mailslot, buf^, 120, nb, nil);
If nb<>0 then
begin
s:=string(buf);
If s='close' then
break;
FOwner.Spisok.Add(s);
Synchronize(ToSpisok);
end;
FillChar(buf^, 120, #0);
end;
StrDispose(buf);
CloseHandle(mailslot);
end;
procedure TMyslotClientThread.Execute;
var
mailslot, nb:cardinal;
buf:PChar;
i:Integer;
begin
mailslot:=CreateFile(PChar(FAdress), GENERIC_WRITE, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If mailslot=INVALID_HANDLE_VALUE then
begin
ShowMessage('Error clientslot');
exit;
end;
buf:=StrAlloc(Length(FMsg)+1);
FillChar(buf^, Length(FMsg), #0);
StrPCopy(buf, FMsg);
For i:=1 to FCount do
begin
If Terminated then
break;
WriteFile(mailslot, buf^, Length(FMsg)+1, nb, nil);
Sleep(10);
end;
StrDispose(buf);
CloseHandle(mailslot);
end;
HANDLE hnd = CreateMutex(NULL, TRUE, m_pszAppName);
if ( GetLastError() == ERROR_ALREADY_EXISTS && WAIT_ABANDONED != WaitForSingleObject(hnd, 1000))
{
AfxMessageBox("Application already running. ");
return FALSE;
}
Обучение наступательной кибербезопасности в игровой форме. Начать игру!