Avatar billede javafreak Nybegynder
17. november 2006 - 13:44 Der er 17 kommentarer og
2 løsninger

Farve i MS-DOS prompt

Hvordan ændre man farven på tekst man udskriver i dos prompten i win xp? Jeg bruger Visual Studio Pro 2005.
Avatar billede nva Praktikant
17. november 2006 - 13:59 #1
Avatar billede nva Praktikant
17. november 2006 - 14:02 #2
'kør' - 'cmd' - color FC giver rød tekst på hvid baggrund hos mig
Avatar billede jokkejensen Novice
17. november 2006 - 14:17 #4
C# er det altså :

            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("Hey");

Så mon ikke det er noget lignende i C++
Avatar billede jokkejensen Novice
17. november 2006 - 14:17 #5
using namespace System;
int main()
{
  String^ nl = Environment::NewLine;
  array<String^>^colorNames = Enum::GetNames( ConsoleColor::typeid );

  // ---------------------------------------------------------------------------------------
  Console::WriteLine( "{0}All the foreground colors on a constant black background.", nl );
  Console::WriteLine( "  (Black on black is not readable.){0}", nl );
  for ( int x = 0; x < colorNames->Length; x++ )
  {
      Console::Write( "{0,2}: ", x );
      Console::BackgroundColor = ConsoleColor::Black;
      Console::ForegroundColor =  *dynamic_cast<ConsoleColor^>(Enum::Parse( ConsoleColor::typeid, colorNames[ x ] ));
      Console::Write( "This is foreground color {0}.", colorNames[ x ] );
      Console::ResetColor();
      Console::WriteLine();
  }
  Console::WriteLine( "{0}A constant white foreground on all the background colors.", nl );
  Console::WriteLine( "  (White on white is not readable.){0}", nl );
  for ( int x = 0; x < colorNames->Length; x++ )
  {
      Console::Write( "{0,2}: ", x );
      Console::ForegroundColor = ConsoleColor::White;
      Console::BackgroundColor =  *dynamic_cast<ConsoleColor^>(Enum::Parse( ConsoleColor::typeid, colorNames[ x ] ));
      Console::Write( "This is background color {0}.", colorNames[ x ] );
      Console::ResetColor();
      Console::WriteLine();

  }
}
Avatar billede jokkejensen Novice
17. november 2006 - 14:20 #6
(Jeg formoder det er .net, ellers skulle det ikke være muligt.)
Avatar billede udvikler Nybegynder
17. november 2006 - 14:26 #7
Jeg ser at javafreak er igang med at få fin hjælp, så jeg vil lige komme med et tip hvis du får lyst til at udvide de svar du har fået med evt. baggrundsfarve til tekst.
Det kan gøres som følger i c++:

#include <iostream>
#include <windows.h>
#include <string>
#include <stdlib.h>

using namespace std;

void TegnFarveStreng(string Tekst, int X, int Y, WORD farve)
{
    HANDLE UdHandle;
    COORD position = {X, Y};

    UdHandle = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(UdHandle, farve);

SetConsoleCursorPosition(UdHandle, position);

cout << Tekst;

}

int main() {
TegnFarveStreng("Denne tekst har en baggrundsfarve",0, 1, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | BACKGROUND_BLUE);

Sleep(5000);
};
Avatar billede jokkejensen Novice
17. november 2006 - 14:29 #8
http://www.thescripts.com/forum/thread63712.html

Hmmm her skriver de ellers det ikke er muligt
Avatar billede udvikler Nybegynder
17. november 2006 - 14:33 #9
Tjaa, man kan mere end man tror er muligt med c serien ;-)
Avatar billede javafreak Nybegynder
17. november 2006 - 18:04 #10
Jeg takker for svaret.
Avatar billede bertelbrander Novice
17. november 2006 - 23:09 #11
Det er rigtigt at man ikke kan lave farver i konsollen med standard C++, men heldigvis findes der bibliotker til stort set alle platforme der kan bruges.

Det eksemple jokkejensen har postet er ikke C++, det er C++/CLI som er noget ganske andet.
Avatar billede arne_v Ekspert
18. november 2006 - 02:11 #12
hvordan tror I .NET gør det ?

lidt decompilering:

public static void set_ForegroundColor(ConsoleColor value)
{
      bool flag1;
      new UIPermission(UIPermissionWindow.SafeTopLevelWindows).Demand();
      Win32Native.Color color1 = Console.ConsoleColorToColorAttribute(value, false);
      Win32Native.CONSOLE_SCREEN_BUFFER_INFO console_screen_buffer_info1 = Console.GetBufferInfo(false, out flag1);
      if (flag1)
      {
            short num1 = (short) (console_screen_buffer_info1.wAttributes & -16);
            num1 = (short) (((ushort) num1) | ((ushort) color1));
            Win32Native.SetConsoleTextAttribute(Console.ConsoleOutputHandle, num1);
      }
}

[det er så decompilet til C#, men det kan nok læses alligevel]
Avatar billede bertelbrander Novice
19. november 2006 - 01:45 #13
Så under et tyndt lag fernis er .net stadig den gode gamle Win32Api...
Avatar billede arne_v Ekspert
19. november 2006 - 02:16 #14
jeg regner med at Microsofts strategi er:

nu: app---(.NET API)---.NET framework---(Win32 API)---Win32---(NT API)---kernel

senere: app---(.NET API)---extended .NET framework---(NT API)---kernel
Avatar billede javafreak Nybegynder
20. november 2006 - 14:28 #15
@udvikler

Hvordan sætter jeg så farven tilbage til "normal".
Avatar billede bertelbrander Novice
20. november 2006 - 19:18 #16
Du bliver nok nødt til at kalde GetConsoleScreenBufferInfo og bruge wAttributes fra CONSOLE_SCREEN_BUFFER_INFO.

Se:
http://msdn2.microsoft.com/en-us/library/ms683171.aspx
Avatar billede javafreak Nybegynder
20. november 2006 - 20:05 #17
jeg kan ikke lige se hvordan jeg skal bruge det, du kunne måske skrive et lille snippet der viser det?
Avatar billede bertelbrander Novice
20. november 2006 - 20:17 #18
#include <windows.h>
#include <iostream>

HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);

int main()
{
  WORD OldAttrib;
  CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
  GetConsoleScreenBufferInfo(StdOut, &ConsoleScreenBufferInfo);
  OldAttrib = ConsoleScreenBufferInfo.wAttributes;
  SetConsoleTextAttribute(StdOut, FOREGROUND_RED);
  std::cout << "Text in Red" << std::endl;
  SetConsoleTextAttribute(StdOut, FOREGROUND_BLUE);
  std::cout << "Text in Blue" << std::endl;
  SetConsoleTextAttribute(StdOut, OldAttrib);
  std::cout << "Text in \"Normal\"" << std::endl;
}
Avatar billede javafreak Nybegynder
20. november 2006 - 21:16 #19
jeg takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester