Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 849 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Oi amigos,

Tenho a seguinte situação. Um servidor Windows Server onde tenho 3 usuários que fazem acesso via RDP.

Esse acesso pode acontecer ao mesmo tempo. Até aí tudo bem. Porém eu queria bloquear o usuário que está logado a abrir o programa (executável)

mais de uma vez. A rotina para verificar se o programa está aberto eu já conheço, porém a mesma olha o processo ou aplicativo aberto no windows e não

somente daquele usuário logado. Alguém conhece alguma solução?

Segue abaixo a rotina que eu já uso, que funciona muito bem.

function ListProcess(Executavel: WideString): Boolean; export; stdcall;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  Result := False;
  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(Executavel)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(Executavel))) then
    begin
      Result := True;
    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

Grato desde já

Rodrigo Cardilo

Card System Info

[email protected]

  • 1 ano depois...
  • Membros Pro
Postado
9 minutos atrás, Valter de Sousa - IDEASyS disse:

Rodrigo , você conseguiu resolver seu problema?

Oi @Valter de Sousa - IDEASyS, sim. Coloque o código abaixo no seu .dpr que dá certinho.

{$R *.res}

var
  MutexHandle: THandle;
  hwind: HWND;
  N, D: string;
begin
  N := ExtractFileName(ParamStr(0)); { Retira o path }
  D := ChangeFileExt(N, ''); { Retira a extensão }
  MutexHandle := CreateMutex(nil, TRUE, PChar(D));
  if MutexHandle <> 0 then
  begin
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      CloseHandle(MutexHandle);
      hwind := 0;
      repeat
        hwind := Windows.FindWindowEx(0, hwind, 'TApplication', 'Nome da Sua Aplicação');
      until (hwind <> Application.Handle);
      if (hwind <> 0) then
      begin
        Windows.ShowWindow(hwind, SW_SHOWNORMAL);
        Windows.SetForegroundWindow(hwind);
      end;
      Halt;
    end
  end;

  Application.Initialize;
.....

 

  • Curtir 2

Rodrigo Cardilo

Card System Info

[email protected]

  • 9 meses depois ...
Postado

Boa tarde Rodrigo, Eu estou com o mesmo problema, eu criei um bat que verifica a cada 5 segundos se o chrome está aberto em determinada pagina e se não tiver ele abre o atalho que criei diretamente pro endereço que preciso, porém ele verifica o processo geral e não por usuário o que impede que o .bat abra a pagina quando a dois usuários logados no pc, entendo que o processo já esta aberto. Você encontrou alguma alternativa para fazer essa verificação por usuário ?

  • Membros Pro
Postado
34 minutos atrás, layonferrari disse:

Boa tarde Rodrigo, Eu estou com o mesmo problema, eu criei um bat que verifica a cada 5 segundos se o chrome está aberto em determinada pagina e se não tiver ele abre o atalho que criei diretamente pro endereço que preciso, porém ele verifica o processo geral e não por usuário o que impede que o .bat abra a pagina quando a dois usuários logados no pc, entendo que o processo já esta aberto. Você encontrou alguma alternativa para fazer essa verificação por usuário ?

Oi @layonferrari, no meu caso eu precisei verificar outros aplicativos meus mesmos. No caso do chrome acho que não funcionaria pois ele cria estâncias (não sei se estou falando bobagem).

Tentou usar o código que eu citei acima?

Rodrigo Cardilo

Card System Info

[email protected]

  • Este tópico foi criado há 849 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.