Ir ao conteúdo
  • Cadastre-se
Bessantes Bessantes

Fazer programa em C rodar invisível

Recommended Posts

Eu me viro bem com Assembly e AS2, mas sou novato em C

Bom...

Eu fiz uma aplicação em C e está tudo pronto pra eu usar.

Só falta mesmo eu deixar o programa rodando invisível.

Estou usando o Codeblocks.

Dá a impressão que eu quero criar um keylogger, mas não, pode ver o site do meu projeto aqui: http://www.esponta.comli.com/não precisa ler caso não queria, mas se ler você verá que eu não tenho intenção de criar keylogger nenhum.

Só peço ajuda do pessoal porque postei em outro fórum, me ajudaram bastante, mas sobre a questão de deixar o programa em c rodar em segundo plano me foram apresentadas soluções muito difíceis de realizar. Será que alguém sabe um jeito facim facim? (fácil). obrigado.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 Se você estiver criando um programa do tipo console application, eu acho bem complicado que você consiga ter uma grande tarefa sendo executada invisivel, mas no geral, no caso de programas de console eu uso a função FreeConsole()

#include <windows.h>....int main()....    FreeConsole();

 Se você estiver usando Win32 API, nesse caso acho mais fácil, pois basta deixar todas as janela invisíveis que o programa ainda vai estar sendo executado, para deixar alguma janela invisível no WinAPI, basta chamar ShowWindow e enviar o manipulador de sua janela (hwnd) e a informação se você quer deixa-lo visível ou invisível:

#include <windows.h>HWND janela1;int WINAPI WinMain(HINSTANCE hInst, .....    // Cria sua janela no janela1    janela1 = CreateWindowEx( .....    // Para deixa-lo invisivel    ShowWindow(janela1, SW_HIDE); // função para deixar invisivel

 É facilmente possível também alterar configurações na própria IDE para deixa-la invisível, no geral a IDE vai apenas adicionar flags na linha de comando na chamada do compilador, mas nunca tentei fazer isso no code::blocks,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei o  "-mwindows" e funcionou, eu fui em "global settings compiler", daí na aba "search directories" eu selecionei o campo "linker" e escrevi "-mwindows", mas eu fico achando que eu fiz isso no lugar errado (será?), não sei porque to com essa impressão, funcionou no Windows 8 mas no XP ta parecendo que não quer rolar o trem.

Dei uma pesquisada sobre o que o FelipeDurar falou achei bem interessante. Depois vou testar também a ideia de usar o FreeConsole e outros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse programa em C que eu fiz , vou chamá-lo agora de "meuscreensaver", está funcionando ok, porém eu necessito que este "meuscreensaver" além de abrir o "meuprograma.exe",  ele também faça com que este "meuprograma.exe" fique sobre todas as outras janelas, igual a um screensaver do windows mesmo.

 

O que está acontecendo agora é que se outros programas (paint, word, um jogo qualquer etc) estão sobre a janela do "meuscreensaver" quando ele manda abrir o "meuprograma.exe" ele o faz de uma maneira que o "meuprograma.exe fique atrás desses outros programas que o usuário abriu. Isto tá inviabilizando o projeto, já que o ponto principal do projeto é não deixar o usuário acessar o botão de fechar.

 

O problema que eu preciso resolver então é: Preciso que o "meuprograma.exe" abra sobre toda e qualquer janela que já estiver aberta no pc.

 

O código abaixo (é o que estou usando) foi postado por uma pessoa no forum UNIDEV e me ajudou muito. Depois que eu fiz quase nada de alterações ele está assim:

#include <stdio.h>#include <windows.h>int main () {	LASTINPUTINFO lastinput;	unsigned int ocioso;	while (TRUE) {		// verifica a quanto tempo o computador está ocioso		ocioso = 0;		lastinput.cbSize = sizeof (LASTINPUTINFO);		if (GetLastInputInfo (&lastinput)) {			ocioso = GetTickCount() - lastinput.dwTime;			ocioso = ocioso / 1000;			 // *tempo em segundos		}		printf ("\rO usuario nao esta fazendo nada ha %d segundo(s).", ocioso);		// se o usuário ficar 10 segundos ou mais sem fazer nada, abre o bloco de notas e sai do programa		if (ocioso >= 10) {//era 10			system ("C:\\meuprograma.exe");			//break;			ocioso = 0;		}		// aguarda por 1 segundo antes de efetuar a verificação novamente		Sleep (1000);	}	return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você tá complicando muito as coisas.
 
Sua lógica:
Chama o programa A, que fica invisível.
Depois de alguns segundos o programa A executa o programa B.
Depois disso o programa A faz o programa B ir pro foreground.
 
Não seria mais simples chamar diretamente o programa B, iniciar ele invisível e depois de alguns segundos tornar ele visível e no foreground?
 
Tanto a parte de tornar visível/invisível vão precisar que você use a api do windows (win32) ou alguma framework que faz isso pra você (qt, gtk, winforms).
 
Se usar win32, a função pra tornar a janela invisível é: ShowWindow(handleDaJanela, SW_HIDE);
A função pra trazer a janela pro foreground é: SetForegroundWindow(handleDaJanela);

Compartilhar este post


Link para o post
Compartilhar em outros sites

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





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×