Ir ao conteúdo

Full Screen em C


Xinke

Posts recomendados

Postado

Galera, eu to fazendo um programinha, mas eu quero q quando ele for executado ele ja abra em full screen, sem eu ter q ir em opções e colocar la.

tipo, quero mandar pra um amigo e quando ele executar, ja aparecer full screen.

Alguem pode me dizer q comando eu devo colocar no meu codigo pra isso acontecer?

valeu galera

Postado

Se você estiver usando o Dev-C++, inclua a biblioteca windows.h e coloque isso no início do código:

keybd_event ( VK_MENU, 0x36, 0, 0 ); 
keybd_event ( VK_RETURN, 0x1C, 0, 0 );
keybd_event ( VK_RETURN, 0x1C, KEYEVENTF_KEYUP, 0 );
keybd_event ( VK_MENU, 0x38, KEYEVENTF_KEYUP, 0 );

A código acima envia um Alt+Enter para o console.

----------------------------------------------------------------------

Se você estiver utilizando o Turbo C

Entre e saia do modo gráfico. A tela se maximiza automaticamente quando o modo gráfico é iniciado.

Postado
  crudo disse:
Se você estiver usando o Dev-C++, inclua a biblioteca windows.h e coloque isso no início do código:

keybd_event ( VK_MENU, 0x36, 0, 0 ); 
keybd_event ( VK_RETURN, 0x1C, 0, 0 );
keybd_event ( VK_RETURN, 0x1C, KEYEVENTF_KEYUP, 0 );
keybd_event ( VK_MENU, 0x38, KEYEVENTF_KEYUP, 0 );

A código acima envia um Alt+Enter para o console.

----------------------------------------------------------------------

valeu cara, deu certinhu aqui.

Mas tipo, teria como você me explicar porque isso acontece?

Postado

O keybd_event cria um evento do teclado.

O primeiro parâmetro indica o código da tecla. VK_MENU = Tecla Alt e VK_RETURN = Tecla Enter (veja a tabela de teclas aqui)

O segundo parâmetro indica o código de escaneamento do hardware, veja a tabela aqui.

O terceiro parâmetro indica o evento, por exemplo o KEYEVENTF_KEYUP indica o evento de quando o tecla é solta (liberada).

O quarto parâmetro é para informações adicionais.

Aqui você encontra a descrição desta função.

  • Membro VIP
Postado

Se eu estava perguntando deve ser porque nao tentei.

  crudo disse:
Você já tentou fazer isso??? ... ... ... ??? ... ... ... ???
Postado
  crudo disse:
O keybd_event cria um evento do teclado.

O primeiro parâmetro indica o código da tecla. VK_MENU = Tecla Alt e VK_RETURN = Tecla Enter (veja a tabela de teclas aqui)

O segundo parâmetro indica o código de escaneamento do hardware, veja a tabela aqui.

O terceiro parâmetro indica o evento, por exemplo o KEYEVENTF_KEYUP indica o evento de quando o tecla é solta (liberada).

O quarto parâmetro é para informações adicionais.

Aqui você encontra a descrição desta função.

valeu cara, era isso mesmo que eu queria.

  • 2 meses depois...
Postado
  crudo disse:
O keybd_event cria um evento do teclado.

O primeiro parâmetro indica o código da tecla. VK_MENU = Tecla Alt e VK_RETURN = Tecla Enter (veja a tabela de teclas aqui)

O segundo parâmetro indica o código de escaneamento do hardware, veja a tabela aqui.

O terceiro parâmetro indica o evento, por exemplo o KEYEVENTF_KEYUP indica o evento de quando o tecla é solta (liberada).

O quarto parâmetro é para informações adicionais.

Aqui você encontra a descrição desta função.

Eu tenteii muito, mas nao consegui fazer com que a tela apenas maximize (não é full screen, e sim apenas maximizar).

Eu sei que o atalho no teclado é ALT + SPACE + x

Se puder dar uma força e postar aí. porque já tentei muito mesmo. Não foi

por falta de força de vontade :P

valeu

Postado
  veiow disse:
Eu tenteii muito, mas nao consegui fazer com que a tela apenas maximize (não é full screen, e sim apenas maximizar).

Eu sei que o atalho no teclado é ALT + SPACE + x

Se puder dar uma força e postar aí. porque já tentei muito mesmo. Não foi

por falta de força de vontade :P

valeu

GALERA.. QUASE CONSEGUI //depois de algumas horas tentando

eu fiz assim:

{

keybd_event ( VK_MENU, 0x38, 0, 0 );

keybd_event ( VK_SPACE, 0x39, 0, 0 );

keybd_event(0x58,0,0,0);

keybd_event ( VK_MENU, 0x38, KEYEVENTF_KEYUP, 0 );

keybd_event ( VK_SPACE, 0x39, KEYEVENTF_KEYUP, 0 );

keybd_event(0x58,0,KEYEVENTF_KEYUP,0);

}

O que acontece é o seguinte.. Quando eu compilo e executo direto do compilador.. na hora.. ele maximiza do jeito que eu quero.

mas quando eu vou no executavel depois.. e executo, ele só executa as duas primeiras teclas ALT + SPACE . Falta executar o X então deve ser só ali o meu problema. Se alguem puder dar uma força.. valeu

valeu

Postado

Olá veiow.

Você não vai conseguir maximizar a tela dessa forma, pois o atalho que você sugeriu é utilizado pelo gerenciador de janelas do windows, ele não é um "comando" passado ao prompt.

O que você pode fazer é utilizar a função system e enviar o comando MODE, assim:

system("MODE con cols=100 lines=50");

Talvez o único problema que encontra fazendo isso é que você altera os limites de linhas e colunas.

Postado
  crudo disse:
Olá veiow.

Você não vai conseguir maximizar a tela dessa forma, pois o atalho que você sugeriu é utilizado pelo gerenciador de janelas do windows, ele não é um "comando" passado ao prompt.

O que você pode fazer é utilizar a função system e enviar o comando MODE, assim:

system("MODE con cols=100 lines=50");

Talvez o único problema que encontra fazendo isso é que você altera os limites de linhas e colunas.

Crudo

Na verdade o que eu já tinha feito ali deu certo. Ele não executava a tecla X porque não dava tempo de abrir o prompt. + eu resolvi isso criando um laço de repetição no inicio do meu codigo, contando de 1 até 10 para dar tempo de executar a tecla X.

Más o sua dica ainda valeu, porque usei para diminuir o tamanho da tela na vertical. Obrigado mesmo :]

  • mês depois...
Postado

Galera, tô com um probleminha!

Meu programa tá no Fullscreen, mas toda vida que alguém fala comigo no msn, ele sai do Fullscreen e vai pra tela pequena...alguém sabe como eu faço pra segurar no Fullscreen?

  crudo disse:
O keybd_event cria um evento do teclado.

O primeiro parâmetro indica o código da tecla. VK_MENU = Tecla Alt e VK_RETURN = Tecla Enter (veja a tabela de teclas aqui)

O segundo parâmetro indica o código de escaneamento do hardware, veja a tabela aqui.

O terceiro parâmetro indica o evento, por exemplo o KEYEVENTF_KEYUP indica o evento de quando o tecla é solta (liberada).

O quarto parâmetro é para informações adicionais.

Aqui você encontra a descrição desta função.

E mais uma coisa, eu não entendi direito esse segundo parâmetro, pra que ele serve!

  • Membro VIP
Postado

Uma solução talvez não muito inteligente seria criar uma função para estabelecer ou não o modo tela-cheia.Dentro da função você colocaria um loop semi-infinito, onde só pararia de executar a rotina dada se alguma tecla ou evento fosse requisitado(se você apertasse ESC, por exemplo).Dessa forma, você restringe o encerramento da rotina de tela-cheia a um comando seu.Abraços.

  alfredomiranda disse:
Galera, tô com um probleminha!

Meu programa tá no Fullscreen, mas toda vida que alguém fala comigo no msn, ele sai do Fullscreen e vai pra tela pequena...alguém sabe como eu faço pra segurar no Fullscreen?

E mais uma coisa, eu não entendi direito esse segundo parâmetro, pra que ele serve!

Postado
  Plateu disse:
Uma solução talvez não muito inteligente seria criar uma função para estabelecer ou não o modo tela-cheia.Dentro da função você colocaria um loop semi-infinito, onde só pararia de executar a rotina dada se alguma tecla ou evento fosse requisitado(se você apertasse ESC, por exemplo).Dessa forma, você restringe o encerramento da rotina de tela-cheia a um comando seu.Abraços.

Mas como eu posso fazer com que fiquei "rodando" uma função, enquanto eu tô utilizando as outras funções do programa?

  • Membro VIP
Postado

Me passe o seu código. Poste-o usando as tags de spoiler, pois, dependendo do que você estiver fazendo, temos diferentes adequações.Abraços.

  alfredomiranda disse:
Mas como eu posso fazer com que fiquei "rodando" uma função, enquanto eu tô utilizando as outras funções do programa?
Postado

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <windows.h>

struct reg{

char nome[50];

int tel;

};

//Registro com Nome e Telefone

void visio(){

printf(" 0000000 00 \n");

printf(" 0 00 000 00 \n");

printf(" 0 0 00000 0000 00 \n");

printf(" 00 00 0 0 00 00 00 000000000 \n");

printf(" 00 00 0 0 00 00 0 \n");

printf(" 00 00 0 0 00 00 00 00 \n");

printf(" 00 00 0 000 00 00 00 00 \n");

printf(" 00 00 0 00 00 0 00 \n");

printf(" 00 00 0 00 00 0 00 \n");

printf(" 0000 0 00 00 000 000 00 \n");

printf(" 00 0 0 00 00 \n");

printf(" 0 0000 000 \n");

printf(" 0 0 \n");

printf(" 0 0 \n");

}

//Imagem da VISIO

void gravarArquivo(struct reg a[],FILE *arq,int x){

fwrite(&a[x].nome,sizeof(a[x].nome),1,arq);

fwrite(&a[x].tel,sizeof(a[x].tel),1,arq);

}

void funcAuxT(struct reg a[],int tel,int i){

int auxTel;

int j = 0;

int x = 0;

while(j<i){

auxTel = a[j].tel;

if(tel < 10){

auxTel = auxTel/10000000;

}

if((tel>=10) && (tel<100)){

auxTel = auxTel/1000000;

}

if((tel>=100)&&(tel<1000)){

auxTel = auxTel/100000;

}

if((tel>=1000)&&(tel<100000)){

auxTel = auxTel/10000;

}

if((tel>=100000)&&(tel<1000000)){

auxTel = auxTel/1000;

}

if((tel>=1000000)&&(tel<10000000)){

auxTel = auxTel/100;

}

if((tel>=10000000)&&(tel<100000000)){

auxTel = auxTel/10;

}

if(auxTel == tel){

printf("Nome: %s\n",a[j].nome);

printf("Telefone: %d\n",a[j].tel);

x++;

}

j++;

}

if(x == 0){

printf("\nNenhum contato localizado\n");

}

}

//Função serve pra pesquisar o Telefone sem que seja completo.

void funcAuxN(struct reg a[],char nome[],int i){

int num = strlen(nome);

char auxCP[50];

char auxC;

int j = 0;

int x = 0;

while(j<i){

if(num != 1){

strncpy(auxCP,a[j].nome,num);

}else{

auxC = a[j].nome[0];

}

if((strcmp(auxCP,nome) == 0)||(auxC == nome[0])){

printf("Nome: %s\n",a[j].nome);

printf("Telefone: %d\n",a[j].tel);

x++;

}

j++;

}

if(x == 0){

printf("\nNenhum contato localizado\n");

}

}

//Função pra pesquisar pelo nome sem que seja completo.

void organizarContatos(struct reg a[]){

int i = 0;

struct reg aux;

while(strcmp(a.nome,"//*") != 0){

i++;

}

for(int j=0;j<i-1;j++){

for(int x=0;x<i-1-j;x++){

if(strcmp(a[x].nome,a[x+1].nome)>0){

aux = a[x];

a[x] = a[x+1];

a[x+1] = aux;

}

}

}

}

int pesqtel(struct reg a[], int tel, int i){

int j=i-1;

int r = 0;

while((j>=0)&&(r==0)){

if(tel == a[j].tel){

r = 1;

j--;

}

else{

j--;

}

}

return r;

}

//Função que pesquisa se o numero ja foi registrado!

void cadastrarContato(struct reg a[]){

int i=0;

char cod;

FILE*arq;

arq = fopen("Agenda.dat","wb");

while(strcmp(a.nome,"//*") != 0){

i++;

}

do{

system("CLS");

fflush(stdin);

printf("Nome: ");

gets(a.nome);

strupr(a.nome);

do{

printf("Telefone: ");

scanf("%d",&a.tel);

if(pesqtel(a,a.tel,i) == 1){

printf("Numero existente, por favor digite outro\n\n");

}

}while(pesqtel(a,a.tel,i) == 1);

printf("\n");

gravarArquivo(a,arq,i);

printf("voce deseja cadastrar mais um contato? s - Sim e n - Nao\n");

scanf(" %c",&cod);

i++;

if(i == 999)

{

printf("agenda cheia");

break;

}

}while((cod == 's')&&(i < 999));

strcpy(a.nome,"//*");

a.tel = 0000000;

gravarArquivo(a,arq,i);

fclose(arq);

}

//Função que cadastra os contatos

char lerOpcao(){

system("CLS");

char x;

fflush(stdin);

printf("\n\n\t\t\t\aEscolha o que deseja fazer: \n");

printf("\t\t\t\20 1 - Cadastrar contato\n");

printf("\t\t\t\20 2 - Retirar contato\n");

printf("\t\t\t\20 3 - Listar contatos\n");

printf("\t\t\t\20 4 - Buscar contato\n");

printf("\t\t\t\20 5 - Editar contato\n");

printf("\t\t\t\20 6 - Sair do Programa\n");

x=getch();

return x;

}

//Menu principal, ativado pelo main.

void retirarContato(struct reg a[]){

system("CLS");

int i = 0, j = 0;

char nome[50];

int tel;

char cod;

int x = 1;

FILE*arq;

arq = fopen("agenda.dat","wr");

while(strcmp(a.nome,"//*") != 0){

i++;

}

printf("Bucar por:\n");

printf("1 - Nome\n");

printf("2 - Telefone\n");

printf("Qualquer outra tecla sai\n");

cod = getch();

switch(cod){

case '1': printf("\nDigite o nome do contato a ser procurado: ");

scanf("%s",&nome);

strupr(nome);

fflush(stdin);

while((strcmp(nome,a[j].nome)!=0)&&(j<i)){

j++;

}

break;

case '2': printf("\nDigite o telefone do contato a ser procurado: ");

scanf("%d",&tel);

fflush(stdin);

while((tel != a[j].tel)&&(j<i)){

j++;

}

break;

default: return;

}

if(j<i){

for(int c=j;c<i;c++){

strcpy(a[j-1+x].nome,a[j+x].nome);

a[j-1+x].tel = a[j+x].tel;

x++;

}

strcpy(a.nome,"");

printf("\nContato excluido\n");

for(int y=0;y<i;y++){

gravarArquivo(a,arq,y);

}

}else{

printf("\nContato nao existe\n");

}

system("Pause");

}

//Como nome já diz, função pra apagar o contato. Onde é procurado pelo número do telefone(Contatos não podem ter o mesmo número)

void listarContatosCadastrados(struct reg a[]){

system("CLS");

int i = 0;

organizarContatos(a);

if(strcmp(a[0].nome,"//*") == 0){

printf("Nao existe nenhum contato cadastrado\n");

}else{

while(strcmp(a.nome,"//*") != 0){

printf("\n\aNome: %s\n",a.nome);

printf("Telefone: %d\n",a.tel);

i++;

}

}

system("Pause");

}

//Listar os contatos registrados.

void buscarContato(struct reg a[]){

system("CLS");

int i = 0;

int j = 0;

int tel;

char nome[50];

char cod;

while(strcmp(a.nome,"//*") != 0){

i++;

}

printf("Bucar por:\n");

printf("1 - Nome\n");

printf("2 - Telefone\n");

printf("Qualquer outra tecla sai\n");

cod = getch();

switch(cod){

case '1': printf("\nDigite o nome do contato a ser procurado: ");

scanf("%s",&nome);

strupr(nome);

funcAuxN(a,nome,i);

break;

case '2': printf("\nDigite o telefone do contato a ser procurado: ");

scanf("%d",&tel);

funcAuxT(a,tel,i);

break;

default: return;

}

/*if(j<i){

while(j<i){

printf("\nNome: ");

puts(a[j].nome);

printf("\nTelefone: %d\n",a[j].tel);

printf("\n");

j++;

}

}else{

printf("\nContato nao localizado\n");

puts(aux[0]);

}*/

system("Pause");

}

//Busca o contato pelo telefone

void editarContato(struct reg a[]){

system("CLS");

FILE*arq;

arq = fopen("agenda.dat","wb");

int i = 0;

int j = 0;

int tel;

char cod;

char nome[50];

while(strcmp(a.nome,"//*") != 0){

i++;

}

printf("Bucar por:\n");

printf("1 - Nome\n");

printf("2 - Telefone\n");

printf("Qualquer outra tecla sai\n");

cod = getch();

switch(cod){

case '1': printf("\nDigite o nome do contato a ser procurado: ");

scanf("%s",&nome);

strupr(nome);

fflush(stdin);

while((strcmp(nome,a[j].nome)!=0)&&(j<i)){

j++;

}

break;

case '2': printf("\nDigite o telefone do contato a ser procurado: ");

scanf("%d",&tel);

fflush(stdin);

while((tel != a[j].tel)&&(j<i)){

j++;

}

break;

default: return;

}

if(j<i){

printf("\nRedigite os campos para serem editados\n");

printf("\nNome: ");

gets(a[j].nome);

strupr(a[j].nome);

printf("\nTelefone: ");

scanf("%d",&a[j].tel);

for(int x=0;x<=i;x++){

gravarArquivo(a,arq,x);

}

fclose(arq);

}else{

printf("\nContato nao localizado\n");

}

}

//Edita o contato em geral

void lerArquivo(struct reg a[]){

FILE*arq;

int i = 0;

if((arq = fopen("agenda.dat","rb")) == NULL){

arq = fopen("agenda.dat","wb");

strcpy(a.nome,"//*");

a.tel = 00000000;

fclose(arq);

}

arq = fopen("agenda.dat","rb");

rewind(arq);

while(!feof(arq)){

fread(&a.nome,sizeof(a.nome),1,arq);

fread(&a.tel,sizeof(a.tel),1,arq);

i++;

}

fclose(arq);

}

int main(){

keybd_event( VK_MENU, 0x36, 0, 0 );

keybd_event( VK_RETURN, 0x1C, 0, 0 );

keybd_event( VK_RETURN, 0x1C, KEYEVENTF_KEYUP, 0 );

keybd_event( VK_MENU, 0x38, KEYEVENTF_KEYUP, 0 );

system("color 1F");

visio();

printf("\n\n\t\t\t\1 - AGENDA ELETRONICA - \1\n");

system("Pause");

struct reg a[1000];

lerArquivo(a);

char op;

do{

//organizarContatos(a);

op = lerOpcao();

switch(op){

case '1': cadastrarContato(a);

break;

case '2': retirarContato(a);

break;

case '3': listarContatosCadastrados(a);

break;

case '4': buscarContato(a);

break;

case '5': editarContato(a);

break;

}

if ((op!='1')||(op!='2')||(op!='3')||(op!='4')||(op!='5')||(op!='6'))

{

printf("opcao invalida tente novamente");

}

}while(!(op=='6'));

system("CLS");

visio();

printf("\n");

printf("\t\t\t\4---O GRUPO VISIO AGRADECE---\4\n");

system("Pause");

}

Desculpa a demora, tinha postado no tópico errado, só vim dá conta agora! =x

  • Membro VIP
Postado

Quando escolho uma das opções de seu menu, o programa retorna um erro.COntudo, pode ser por fala de algum arquivo textual que trabalhe em comum com o exe.Sendo assim,modifique sua main() da seguinte forma:

Código:

int main()

{

while(1)

{

keybd_event( VK_MENU, 0x36, 0, 0 );

keybd_event( VK_RETURN, 0x1C, 0, 0 );

keybd_event( VK_RETURN, 0x1C, KEYEVENTF_KEYUP, 0 );

keybd_event( VK_MENU, 0x38, KEYEVENTF_KEYUP, 0 );

system("color 1F");

visio();

printf("nnttt1 - AGENDA ELETRONICA - 1n");

system("Pause");

struct reg a[1000];

lerArquivo(a);

char op;

while(1)

{

//organizarContatos(a);

op = lerOpcao();

switch(op){

case '1': cadastrarContato(a);

break;

case '2': retirarContato(a);

break;

case '3': listarContatosCadastrados(a);

break;

case '4': buscarContato(a);

break;

case '5': editarContato(a);

break;

case '6': exit(0);/**Fim da execução de forma brusca**/

break;

}

if ((op!='1')||(op!='2')||(op!='3')||(op!='4')||(op!= '5')||(op!='6'))

{

printf("opcao invalida tente novamente");

}

}

system("CLS");

visio();

printf("n");

printf("ttt4---O GRUPO VISIO AGRADECE---4n");

system("Pause");

}

}

Postado

Provavelmente o programa tá retornando um erro por conta do arquivo "banco de dados", por um probleminha no código que eu ainda não ajeitei. Ai é só tu procurar o arquivo agenda.dat que deve tá lado do executável.

E fiz as mudanças no código mas ele continua saindo do FullScreen quando acontece outro evento no computador, como alguém falar no msn.

  • Membro VIP
Postado
  alfredomiranda disse:
Provavelmente o programa tá retornando um erro por conta do arquivo "banco de dados", por um probleminha no código que eu ainda não ajeitei. Ai é só tu procurar o arquivo agenda.dat que deve tá lado do executável.

E fiz as mudanças no código mas ele continua saindo do FullScreen quando acontece outro evento no computador, como alguém falar no msn.

Vou pensar em uma logica diferente.Realmente a minha está falha. Sugere algo?

  • Membro VIP
Postado
  alfredomiranda disse:
Tava pensando num lanço semi-infinito como tu pensou, só que utilizando algum comando do sistema, isso é possível?(Desculpa se falei besteira =x)

Pensei em fazer uma função booleana que verificasse se o modo tela-cheia está ativo.Caso não estiver, chama a função de fullscreen.Foi ver algumas coisas dentro da <windows.h> para a manipulaçao de janelas e depois volto aqui pra você me dar uma ajuda também.Abraços.

  • Membro VIP

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...