Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) procurando parte de uma string no processo e form não clic


MK123

Pergunta

Pesquisei no google sobre varredura de string no titulo janelas e nomes de processos que roda no windows...

infelizmente não encontrei nada concreto. Talvez porque não fiz uma pesquisa correta.

Mais, o meu problema seria o seguinte:

1ª Pergunta

Criei um timer para verificar se um programa X está aberto, se ele for aberto, meu pc reinicia...

Meu programa procuraria nos processos que está rodando, no titulo da janela a string "Cheat"

encontrei esse códio-fonte pelo google:

function processExists(exeFileName: string): Boolean;

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(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =

UpperCase(ExeFileName))) then

begin

Result := True;

end;

ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);

end;

CloseHandle(FSnapshotHandle);

end;

Esse código acima encontra os processos do windows pelo titulo de sua janela(Inteira)...

o que eu gostaria seria isso... Todo processo que estiver com alguma parte do titulo escrito "Cheat" , ele ativaria o comando...

2ª Pergunta

No form1 com alpha, adicionei uma imagem que seria sempre visível, acima de tudo que rodase no windows, até mesmo directx e opengl...

meu problema nessa parte seria... minha imagem sempre visivel, só que não queria que meu aplicativo fose clicaco...

digamos, ele fica visivel acima de tudo, só que ele não atrapalhase os outros programas, eu pudesse utiliza os outros programas com essa imagem meio transparente em cima!

eu encontrei esse código na internet:

if (getforegroundwindow <> Form.handle) then setforegroundwindow(Form.handle);

e

SetWindowPos(Form1.handle, HWND_TOPMOST, Form1.Left, Form1.Top,Form1.Width, Form1.Height, 0);

Esses códigos acima, serve para deixar form sempre visível, só que em aplicativos q utiliza directx(jogos) e opengl, não funciona.

Tem alguma forma de deixa-lo sempre visivel, acima do opengl e directx???

e sobre meu formulário ficar sempre visivel e não ser clicado, não atrapalhar os aplicativos que estiver abaixo, não achei nada sobre isso.

Sou novato em delphi, mexo a menos de 1 mes... não sei nem o básico ainda, mais estou querendo aprender...

Obrigado pela atenção e desculpe se não fui obviamente claro nas palavras.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
1ª Pergunta

Criei um timer para verificar se um programa X está aberto, se ele for aberto, meu pc reinicia...

Meu programa procuraria nos processos que está rodando, no titulo da janela a string "Cheat"

Basta voce fazer esta alteração no seu código

function processExists(exeFileName: string): Boolean;
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 pos(UpperCase(exeFileName),UpperCase(FProcessEntry32.szExeFile)) > 0 then
            begin
               exeFileName := FProcessEntry32.szExeFile;
               s := FProcessEntry32.szExeFile;
            end;

         if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
            UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
            UpperCase(ExeFileName))) then
            begin
               Result := True;
            end;
         ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
      end;
   CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   if processExists('Cheat') then
      showmessage(s  + ' ->  processo encontrado!');
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, toda ajuda recebida é bem-vinda...

e digamos, poderia fazer uma procura usando o FindWindow?

FindWindow(nil,'Cheat') > 0

Tentei, mais só escrevendo titulo inteiro funciona... alguma forma de scannear os aplicativos que contenha alguma parte do titulo escrito "Cheat"...

Se alguém tiver respostas as minhas outras perguntas, ficarei agradecido!

grande abraço e mais uma vez, obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0
Obrigado, toda ajuda recebida é bem-vinda...

e digamos, poderia fazer uma procura usando o FindWindow?

FindWindow(nil,'Cheat') > 0

Tentei, mais só escrevendo titulo inteiro funciona... alguma forma de scannear os aplicativos que contenha alguma parte do titulo escrito "Cheat"...

A alteração no código que te passei funciona perfeitamente.

( scannear os aplicativos que contenha alguma parte do titulo escrito "Cheat"...)

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if processExists('Cheat') then

showmessage(s + ' -> processo encontrado!');

// outros comandos

end;

Nesta parte é que voce vai procurar a parte da string do processo que esta rodando... não entendi a sua colocação.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Digamos que esse código que você me enformou ele procura pelo nome do processo que está rodando...

digamos, o MSN: msnmsgr.exe...

escrevo: "processExists('MSN')"

ele vai detecta o processo: MSNmsgr.exe, mais se eu renomeia esse executavel por exemplo: firefox.exe, o código que você me passou não funciona!

Agora pelo findwindow, ele detecta o programa pelo titulo do aplicativo(Windows Live Messager Beta)...

mais pelo findwindow mesmo mudando o renomeiando o executavel ele vai detecta pelo titulo da janela.

ai qual seria minha intenção, detecta o aplicativo ou os aplicativos escrevendo no findwindow só uma parte do titulo desse executavel...

exemplo: findwindow(nil,'Messager') .

Editado por MK123
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...