Funcoes externas
Moderador: Moderadores
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Funcoes externas
Caros colegas.
Hoje utilizo o wapi.exe para executar duas funcoes muito importantes para mim:
1- winexec("wapi -KILLAPPLICATION:;CertoPrograma.exe")
Para derrubar o programa em questao
2- winexec("wapi -FLASH:5")
Para fazer o meu programa piscar na barra de tarefas do windows
Eu gostaria de ter estas duas funcoes em forma de codigo fonte para compilar junto ao meu executavel, pois assim nao precisso instalar o wapi.exe junto.
Alias, parabens ao maligo que é o desenvolvedor do wapi.exe, que me esta sendo muito util. :{
Hoje utilizo o wapi.exe para executar duas funcoes muito importantes para mim:
1- winexec("wapi -KILLAPPLICATION:;CertoPrograma.exe")
Para derrubar o programa em questao
2- winexec("wapi -FLASH:5")
Para fazer o meu programa piscar na barra de tarefas do windows
Eu gostaria de ter estas duas funcoes em forma de codigo fonte para compilar junto ao meu executavel, pois assim nao precisso instalar o wapi.exe junto.
Alias, parabens ao maligo que é o desenvolvedor do wapi.exe, que me esta sendo muito util. :{
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Funcoes externas
Caros colegas.
Já consegui fazer meu programa piscar na barra de tarefas, usando uma funcao em C postada pelo amigo sygecom. HB_FUNC ( PISCA_EXE ).
Ainda estou precisando de uma funcao que finalize uma aplicacao.
Se os colegas puderem me ajudar, agradeço.
Já consegui fazer meu programa piscar na barra de tarefas, usando uma funcao em C postada pelo amigo sygecom. HB_FUNC ( PISCA_EXE ).
Ainda estou precisando de uma funcao que finalize uma aplicacao.
Se os colegas puderem me ajudar, agradeço.
Re: Funcoes externas
Cara, eu já vi um exemplo para dar um kill em aplicação windows na Minigui se não me engano, porém tem como "varrer" os processos do Windows e então terminar o processo.
Veja esta rotina se atende para o que você quer:
Espero que esta rotina possa lhe ajudar.
Veja esta rotina se atende para o que você quer:
Código: Selecionar todos
Procedure Main
Process_Win32_Kill("calc.exe") // fecha a calculadora
Process_Win32_Kill("winword.exe") // fecha o word
Function Process_Win32_Kill(cExecutavel)
Local oWmiService, oListaProcess, oProcessos
oWmiService=Service_WMI()
oListaProcess=oWmiService:ExecQuery("select * from Win32_Process where Name='"+cExecutavel+"'")
For Each oProcessos in oListaProcess
oProcessos:Terminate()
Next
Return .T.
Function Service_WMI()
Static oWmiService
Local oScriptObj
If oWmiService==nil
oScriptObj=CREATEOBJECT("wbemScripting.SwbemLocator")
oWmiService=oScriptObj:ConnectServer()
End If
Return oWmiService
Analista de TI - Grupo Colombo<br>
Harbour, xHarbour, C, C++
Harbour, xHarbour, C, C++
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Funcoes externas
Caro colega rmg, sua funcao foi um filé, funcionou certinho, obrigado.
Mas agora eu estou com outro problema, ao finalizar um programa que esta minimizado no tray do windows, o icone dele nao some. Acredito que vou precisar dar um refresh no tray. O amigo (ou outra pessoa) poderia me ajudar neste aspecto?
Resumindo: preciso de uma funcao pra dar um refresh no tray.
Mas agora eu estou com outro problema, ao finalizar um programa que esta minimizado no tray do windows, o icone dele nao some. Acredito que vou precisar dar um refresh no tray. O amigo (ou outra pessoa) poderia me ajudar neste aspecto?
Resumindo: preciso de uma funcao pra dar um refresh no tray.
Re: Funcoes externas
Quando você "mata" uma aplicação que tem ícone no tray, mesmo depois da aplicação encerrar, o ícone se mantém. Mas ao passar o mouse sobre o tray o ícone some sozinho. É uma espécie de refresh. Mas se há (deve haver) uma função da API que faça esse refresh, desconheço.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: Funcoes externas
Aliás, em tempo: se raciocinarmos com mais atenção, vamos notar que o tray nada mais é que uma ToolBar como outra qualquer. Portanto, se você enviar uma mensagem de REPAINT para ela, é capaz do ícone sumir, já que isso faria o serviço de refresh.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: Funcoes externas
Fiquei curioso e fiz um teste. Emitir a mensagem REPAINT não funciona. Não há meio de fazer um refresh pela API. Isso não existe. Por incrível que pareça, parece haver apenas um modo: mover o cursor do mouse para que ele "varra" o tray de ponta a ponta. Montei o código abaixo (o anexo contém um EXE) que funciona. Basta ser adaptado para o [x]Harbour.
Código: Selecionar todos
void MoveMouse() {
RECT TrayRect;
GetWindowRect(FindWindowEx(FindWindow("Shell_TrayWnd",NULL),0,"TrayNotifyWnd",NULL),&TrayRect);
POINT Cursor;
GetCursorPos(&Cursor);
while(TrayRect.left+11 < TrayRect.right) {
SetCursorPos(TrayRect.left+10,TrayRect.top+12);
Sleep(1);
TrayRect.left += GetSystemMetrics(SM_CXSMICON)+2;
}
SetCursorPos(Cursor.x,Cursor.y);
}- Anexos
-
cleartray.zip- (2.71 KiB) Baixado 156 vezes
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: Funcoes externas
Em tempo: a técnica de usar o mouse para "varrer" o tray só funciona se houver apenas uma linha de ícones.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Funcoes externas
Caro colega Maligno. Seu exemplo compilado em exe funciona perfeitamente, era exatamente isso que eu precisava.
A questao agora é que eu nao sei adaptar o codigo fonte em C para ser compilado com o xharbour. O amigo pode me ajudar neste aspecto?
Obrigado pela atencao!
A questao agora é que eu nao sei adaptar o codigo fonte em C para ser compilado com o xharbour. O amigo pode me ajudar neste aspecto?
Obrigado pela atencao!
Re: Funcoes externas
Infelizmente não. Apesar de bem simples, eu não conheço o suficiente da interface do [x]Harbour para ajudá-lo. Mas certamente aparecerá alguém que já tenha feito algo semelhante. É só aguardar.O amigo pode me ajudar neste aspecto?
Ou você mesmo poderá fazer isso. É coisa muito simples. Nem precisa modificar o "núcleo" do código em si. É só um pequeno detalhe na chamada da função. Se pegar os fontes C, que provavelmente você já tem em sua instalação, verá que é bem fácil.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Funcoes externas
Não testei, mas tente algo assim:
Código: Selecionar todos
FUNCTION MAIN()
MOVEMOUSE()
ALERT("LIMPOU ?")
RETURN
#pragma BEGINDUMP
#include <windows.h>
#include <windef.h>
VOID MoveMouse();
HB_FUNC( MOVEMOUSE )
{
RECT TrayRect;
GetWindowRect(FindWindowEx(FindWindow("Shell_TrayWnd",NULL),0,"TrayNotifyWnd",NULL),&TrayRect);
POINT Cursor;
GetCursorPos(&Cursor);
while(TrayRect.left+11 < TrayRect.right) {
SetCursorPos(TrayRect.left+10,TrayRect.top+12);
Sleep(1);
TrayRect.left += GetSystemMetrics(SM_CXSMICON)+2;
}
SetCursorPos(Cursor.x,Cursor.y);
}
#pragma ENDDUMP
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Funcoes externas
Caros colegas, estava muito bom pra ser verdade!!!
A funcao Process_Win32_Kill do nosso amigo rmg funcionou perfeitamente, alias, funcionou bem demais, ela me gerou outro problema (eita vida dura de programador), a funcao mata o executavel em todas as possiveis sessoes do windows que estajam abertas. Como eu tenho muitos clientes que usam Terminal Server, ao rodar a funcao para derrubar determinado programa ele é finalizado em todas as sessoes, ai esta me ferrando.
Alguem sabe como posso adaptar a referida funcao para finalizar apenas o programa na sessao da qual esta sendo chamada? Preciso muito disso. Desde já, obrigado a todos que ja ajudam e tambem aos que se propoe a ajudar daqui para frente.
Obs.: a funcao MoveMouse() do Maligno, com a ajuda do Sygecom tambem funcionou, obrigado!
A funcao Process_Win32_Kill do nosso amigo rmg funcionou perfeitamente, alias, funcionou bem demais, ela me gerou outro problema (eita vida dura de programador), a funcao mata o executavel em todas as possiveis sessoes do windows que estajam abertas. Como eu tenho muitos clientes que usam Terminal Server, ao rodar a funcao para derrubar determinado programa ele é finalizado em todas as sessoes, ai esta me ferrando.
Alguem sabe como posso adaptar a referida funcao para finalizar apenas o programa na sessao da qual esta sendo chamada? Preciso muito disso. Desde já, obrigado a todos que ja ajudam e tambem aos que se propoe a ajudar daqui para frente.
Obs.: a funcao MoveMouse() do Maligno, com a ajuda do Sygecom tambem funcionou, obrigado!
Re: Funcoes externas
Estas sessões do TS rodam sob o mesmo username ou são logins com nomes distintos?
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Funcoes externas
Caro colega Vailton, as várias sessoes sao sim com nome de usuario diferentes, até porque, se vc logar com o nome de um usuario que ja esta logado, o windows direciona vc para aquela sessao ja aberta, ou seja, impossivel 2 sessoes com o mesmo nome de usuario, a nao ser que, um determinado usuario loge em modo "console" e o mesmo cara loge em modo "remoto". Mas isso nao vai ser problema, pois nunca colocamos o usuario administrador com privilégio de conexao remota. Entao fica sempre assim: Administrador logado em modo console e os outros usuarios em modo remoto, todos diferentes.
Imagino o que vc vai falar: finalizar somente o processo que pertence ao usuario do qual partiu a iniciativa de finalizar, tambem pensei nisso, mas nao consigo descobrir dentro do objeto "oProcessos" qual é a propriedade que informa o usuario que disparou o processo.
Se puder me ajudar, agradeco.
Imagino o que vc vai falar: finalizar somente o processo que pertence ao usuario do qual partiu a iniciativa de finalizar, tambem pensei nisso, mas nao consigo descobrir dentro do objeto "oProcessos" qual é a propriedade que informa o usuario que disparou o processo.
Se puder me ajudar, agradeco.
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Funcoes externas
Caros colegas.
Continue precisando da ajuda de vcs.
Nao resolvi o problema ainda.
Alguem pode me auxiliar?
Continue precisando da ajuda de vcs.
Nao resolvi o problema ainda.
Alguem pode me auxiliar?


