Programas em execução
Pessoal,
eu preciso de uma função que retorne o caption do programa q foi aberto. Explicando: Na hora em que o usuário abrir a calculador o meu programa vai saber que a calculadora está aberta. Como eu faço isso?
eu preciso de uma função que retorne o caption do programa q foi aberto. Explicando: Na hora em que o usuário abrir a calculador o meu programa vai saber que a calculadora está aberta. Como eu faço isso?
Orlando Frade
Curtidas 0
Respostas
Spy
01/05/2003
Oi Orlando, pra vc pegar o nome de todas as janelas abertas eu usei a funcao da API EnumWindows, eu listei as janelas abertas em um listbox, mesmo o nome das janelas invisiveis sao listados.
Se vc quiser vc pode adaptar pra pegar o nome de uma soh janela se quiser em um label. Da uma olhadinha ai na funcao. Desde jah, espero ter ajudado. []´s e té+.
function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
Form.ListBox1.Items.Add(StrPas(Buffer));
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,LongInt(Self));
end;
Se vc quiser vc pode adaptar pra pegar o nome de uma soh janela se quiser em um label. Da uma olhadinha ai na funcao. Desde jah, espero ter ajudado. []´s e té+.
function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
Form.ListBox1.Items.Add(StrPas(Buffer));
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,LongInt(Self));
end;
GOSTEI 0
Orlando Frade
01/05/2003
Oi Orlando, pra vc pegar o nome de todas as janelas abertas eu usei a funcao da API EnumWindows, eu listei as janelas abertas em um listbox, mesmo o nome das janelas invisiveis sao listados.
Se vc quiser vc pode adaptar pra pegar o nome de uma soh janela se quiser em um label. Da uma olhadinha ai na funcao. Desde jah, espero ter ajudado. []´s e té+.
function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
Form.ListBox1.Items.Add(StrPas(Buffer));
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,LongInt(Self));
end;
A função resolve parte do meu problema, ela é muito boa pois lista todas as aplicações, mas ela só lista depois que eu clico no botão.
Eu quero que ela atualize as aplicações no listbox assim que eu abra uma nova aplicação e não quando eu clique no botão
GOSTEI 0
Spy
01/05/2003
[quote:a91e835882=´Orlando Frade´]
A função resolve parte do meu problema, ela é muito boa pois lista todas as aplicações, mas ela só lista depois que eu clico no botão.
Eu quero que ela atualize as aplicações no listbox assim que eu abra uma nova aplicação e não quando eu clique no botão[/quote:a91e835882]
Sem problema Orlando, ao invés de colocar em um button, basta voce colocar um timer com interval em 100 e no evento OnTimer vc coloca a chamada da funcao: EnumWindows(@EnumWindowsProc,LongInt(Self));
Té+
Oi Orlando, pra vc pegar o nome de todas as janelas abertas eu usei a funcao da API EnumWindows, eu listei as janelas abertas em um listbox, mesmo o nome das janelas invisiveis sao listados.
Se vc quiser vc pode adaptar pra pegar o nome de uma soh janela se quiser em um label. Da uma olhadinha ai na funcao. Desde jah, espero ter ajudado. []´s e té+.
function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
Form.ListBox1.Items.Add(StrPas(Buffer));
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,LongInt(Self));
end;
A função resolve parte do meu problema, ela é muito boa pois lista todas as aplicações, mas ela só lista depois que eu clico no botão.
Eu quero que ela atualize as aplicações no listbox assim que eu abra uma nova aplicação e não quando eu clique no botão[/quote:a91e835882]
Sem problema Orlando, ao invés de colocar em um button, basta voce colocar um timer com interval em 100 e no evento OnTimer vc coloca a chamada da funcao: EnumWindows(@EnumWindowsProc,LongInt(Self));
Té+
GOSTEI 0
Orlando Frade
01/05/2003
[quote:97cf3b7768=´Orlando Frade´][quote:97cf3b7768=´SPY´]Oi Orlando, pra vc pegar o nome de todas as janelas abertas eu usei a funcao da API EnumWindows, eu listei as janelas abertas em um listbox, mesmo o nome das janelas invisiveis sao listados.
Se vc quiser vc pode adaptar pra pegar o nome de uma soh janela se quiser em um label. Da uma olhadinha ai na funcao. Desde jah, espero ter ajudado. []´s e té+.
function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
Form.ListBox1.Items.Add(StrPas(Buffer));
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,LongInt(Self));
end;
A função resolve parte do meu problema, ela é muito boa pois lista todas as aplicações, mas ela só lista depois que eu clico no botão.
Eu quero que ela atualize as aplicações no listbox assim que eu abra uma nova aplicação e não quando eu clique no botão[/quote:97cf3b7768]
Sem problema Orlando, ao invés de colocar em um button, basta voce colocar um timer com interval em 100 e no evento OnTimer vc coloca a chamada da funcao: EnumWindows(@EnumWindowsProc,LongInt(Self));
Té+[/quote:97cf3b7768]
Era isso que eu tinha em mente só eu não queria usar esse componente, mas já vi que vou ter.
Valeu pela dica.
GOSTEI 0
Spy
01/05/2003
eheheh...realmente eh chato usar o timer nesses casos... ...mas eh o jeito neh. :D
Qndo seu programa fica em segundo plano e tem que capturar informacoes de outros, nao tem como, tem que usar um timer, pra ele rodar de tempo em tempo tal funcao e pegar a informacao.
O ruim eh q ele fica um tanto quanto pesado, pois fica sendo executado toda hora akela rotina do timer, se quiser deixa-lo um poko + leve vc pode fazer alguma funcao pra deixar o timer.enable:=false; quando vc nao precisar de tal informacao, e em enable:=true; qndo precisar, isso poupa um pouko do trabalho do processador. :wink:
:arrow: []´s e Té+
Qndo seu programa fica em segundo plano e tem que capturar informacoes de outros, nao tem como, tem que usar um timer, pra ele rodar de tempo em tempo tal funcao e pegar a informacao.
O ruim eh q ele fica um tanto quanto pesado, pois fica sendo executado toda hora akela rotina do timer, se quiser deixa-lo um poko + leve vc pode fazer alguma funcao pra deixar o timer.enable:=false; quando vc nao precisar de tal informacao, e em enable:=true; qndo precisar, isso poupa um pouko do trabalho do processador. :wink:
:arrow: []´s e Té+
GOSTEI 0
Orlando Frade
01/05/2003
eheheh...realmente eh chato usar o timer nesses casos... ...mas eh o jeito neh. :D
Qndo seu programa fica em segundo plano e tem que capturar informacoes de outros, nao tem como, tem que usar um timer, pra ele rodar de tempo em tempo tal funcao e pegar a informacao.
O ruim eh q ele fica um tanto quanto pesado, pois fica sendo executado toda hora akela rotina do timer, se quiser deixa-lo um poko + leve vc pode fazer alguma funcao pra deixar o timer.enable:=false; quando vc nao precisar de tal informacao, e em enable:=true; qndo precisar, isso poupa um pouko do trabalho do processador. :wink:
:arrow: []´s e Té+
Gostei da sugestão. Mais uma vez valeu.
GOSTEI 0