[Resolvido+Código] Escrevendo Console Colorido

4 respostas
Guga360

Esta dúvida foi resolvida. A resposta dela está no fim do código.

Estava aqui fazendo um programa em Console, mas a saída ficou muito confusa, por enquanto (infelizmente…) estou usando Windows, eu sei que vou precisar das funções da API do Windows (GetStdHandle, SetConsoleTextAttribute) que eu inclusive uso elas para escrever colorido em Python…

Mas não consigo usar isso em Java. Eu cheguei a achar umas coisas no Google, mas precisavam de algumas .dlls, Classes e etc.
Existem algum método mais simples, usando no máximo só uma DLL?

Bem, mas no *nix isso é bem mais fácil, é só usar os códigos ANSI lá. Que no Windows (ridículamente) só funciona em programas 16-bits.

Já que irão me responder sobre a API do Windows, também queria saber se posso mexer com outras funções apenas para testes do tipo FindWindow, SetWindowTitle e tal.

Obrigado o/

4 Respostas

T

Se precisar usar APIs do Windows, use o JNA ( https://jna.dev.java.net/ )

Dieval_Guizelini

Você já deu uma olhada nesse projeto:

http://sourceforge.net/projects/jcons

fw

Guga360

Consegui!
Pra quem quiser ver como se faz, aqui está o código:

import java.util.*;
import java.io.*;
import com.sun.jna.*;

public class Programa {
	public interface Kernel32 extends Library {
    		public int GetStdHandle(int std);
    		public int SetConsoleTextAttribute(int std, int color);
	}
	
    public static void main(String[] args) throws Exception {
    	Kernel32 k32 = (Kernel32) Native.loadLibrary("kernel32",Kernel32.class);  
    	int std = k32.GetStdHandle(-11); //-11 quer dizer out, isso quer dizer que se você escrever no .err vai ficar branco
        k32.SetConsoleTextAttribute(std, 0x02); //0x02 quer dizer verde
    	System.out.println("Sucesso!");
        k32.SetConsoleTextAttribute(std, 0x0C); //0x0C quer dizer vermelho
        System.out.println("Erro!");
    }
}
caiotuvo

teste

Criado 21 de outubro de 2008
Ultima resposta 18 de set. de 2009
Respostas 4
Participantes 4