Fórum Search no titulo da janela (api) #294683
06/09/2005
0
Minha dúvida está tirando meu sono a algumas noites ja:
existe a possibilidade de fazer um ´search´ em todas as janelas ativas do sistema, e verificar se ela existe, utilizando ´parte´ do titulo?
por exemplo, um user me manda uma mensagem via msn, como eu posso mapear isso e saber que aquela janela é parte do processo do msn ?
outra situação:
eu tenho varias janelas de mensagens abertas, estou teclando com varias pessoas ao mesmo tempo... existe como eu localizar a janela de um usuario chamado ´zé das coves´, informando somente parte desse titulo ? zé, ou coves ???
A adriano, me sugeriu algo como:
[b:56c1e788df]FindWindow(nil, Pos(´TEXTO_PROCURADO´,´CAPTION_DO_FORM´));[/b:56c1e788df]
mais num consegui nao.... :shock:
Antecipadamente, deixo aqui meus sinceros agradecimentos !!!
Brazilianboy
Curtir tópico
+ 0Posts
07/09/2005
Nildo
Falows
Gostei + 0
07/09/2005
Brazilianboy
Gostei + 0
08/09/2005
Nildo
Então primeiro você cria esse CallBack com esses parâmetros:
function EnumProc( nHandle: HWND ; lParam: Integer ): Boolean; Export; StdCall;
Dentro desse CallBack, você faz:
var Buffer : Array[0..99] of char; begin GetWindowText( nHandle, Buffer, 100 ); if Pos( ´Pedaço do título´, Buffer ) <> 0 then ShowMessage( ´achou: ´ + inttostr( nHandle ) ); end;
E para chamar essa rotina você usa:
EnumWindows( @EnumProc, 0 );
Gostei + 0
08/09/2005
Adriano Santos
function EnumProc( nHandle: HWND ; lParam: Integer ): Boolean; Export; StdCall;
var Buffer : Array[0..99] of char; begin GetWindowText( nHandle, Buffer, 100 ); if Pos( ´Pedaço do título´, Buffer ) <> 0 then ShowMessage( ´achou: ´ + inttostr( nHandle ) ); end;
EnumWindows( @EnumProc, 0 );
E ai velhinho, beleza. Boa dica, mas não consegui compilar...diz:
[b:75c26078df]Variable required;[/b:75c26078df], se liga:
...
public
{ Public declarations }
function EnumProc( nHandle: HWND ; lParam: Integer ): Boolean; Export; StdCall;
end;
...
function TForm1.EnumProc(nHandle: HWND; lParam: Integer): Boolean;
var
Buffer : Array[0..99] of char;
begin
GetWindowText(nHandle, Buffer, 100);
if Pos(´meu texto´, Buffer) <> 0 then
ShowMessage( ´Achou: ´ + IntToStr(nHandle));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hHandle : THandle;
begin
EnumWindows(@EnumProc, 0);
end;
É isso, não é?
Gostei + 0
08/09/2005
Nildo
Gostei + 0
08/09/2005
Adriano Santos
Desculpe a ignorância [b:2cf6b5a3d9]nildo[/b:2cf6b5a3d9], mas não funcionou...quero dizer...compila, mas não encontrou nada...será que tô viajando pesado?
Gostei + 0
08/09/2005
Nildo
Gostei + 0
08/09/2005
Adriano Santos
É tah passando, mas levando em consideração que tenho mais de uma janela aberta ele só dá um ShowMessage, ou seja, parece que só passa por uma janela e ai sai fora...estranho né?
Tah bem simples, é só pra fazer o teste mesmo:
function EnumProc(nHandle: HWND; lParam: Integer): Boolean; var Buffer : Array[0..99] of char; begin GetWindowText(nHandle, Buffer, 100); ShowMessage( ´Achou: ´ + IntToStr(nHandle)); end; procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumProc, 0); end;
Gostei + 0
08/09/2005
Nildo
function EnumProc(nHandle: HWND; lParam: Integer): Boolean; export; stdcall; var Buffer : Array[0..99] of char; begin GetWindowText(nHandle, Buffer, 100); MessageBox( 0, Buffer, ´Teste´, 0 ); end; procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumProc, 0); end;
Gostei + 0
08/09/2005
Adriano Santos
function EnumProc(nHandle: HWND; lParam: Integer): Boolean; export; stdcall; var Buffer : Array[0..99] of char; begin GetWindowText(nHandle, Buffer, 100); MessageBox( 0, Buffer, ´Teste´, 0 ); end; procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumProc, 0); end;
Ah, entendi...é que eu declarei a fuction CallBack antes do implementation com o Export e StdCall, dai criei a função depois sem isso. Não precisa declarar la em cima então?
Mesmo assim, uma vez apareceu a mensagem com o caption do Avg Email Scanner, depois apareceu a MessageBox sem texto.
Gostei + 0
08/09/2005
Nildo
Gostei + 0
09/09/2005
Brazilianboy
Problema resolvido !
Era exatamente isso, valeu galera !
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)