Esen!
Sıkıcı siyah + gri komut satırından siz de benim gibi sıkıldıysanız bu ders aradığınız şey: Assembly ile komut satırını renklendirmek. Bunun için SetConsoleTextAttribute APIsini kullanacağız.
1 2 3 4 |
BOOL WINAPI SetConsoleTextAttribute( _In_ HANDLE hConsoleOutput, _In_ WORD wAttributes ); |
hConsoleOutput konsol ekranının tamponunun tutamağı. Komut satırı en azından GENERIC_READ modundan açılmış olmalı.
wAttributes ile renk ataması yapılıyor. Aslında tam doğrusu karakter davranışları atanıyor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Attribute Meaning FOREGROUND_BLUE Text color contains blue. FOREGROUND_GREEN Text color contains green. FOREGROUND_RED Text color contains red. FOREGROUND_INTENSITY Text color is intensified. BACKGROUND_BLUE Background color contains blue. BACKGROUND_GREEN Background color contains green. BACKGROUND_RED Background color contains red. BACKGROUND_INTENSITY Background color is intensified. COMMON_LVB_LEADING_BYTE Leading byte. COMMON_LVB_TRAILING_BYTE Trailing byte. COMMON_LVB_GRID_HORIZONTAL Top horizontal. COMMON_LVB_GRID_LVERTICAL Left vertical. COMMON_LVB_GRID_RVERTICAL Right vertical. COMMON_LVB_REVERSE_VIDEO Reverse foreground and background attributes. COMMON_LVB_UNDERSCORE Underscore. |
Ben bir uygulama yazdım onun üzerinden anlatayım:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SetConsoleTextColor proc fore:DWORD,back:DWORD LOCAL hStdOut:DWORD invoke GetStdHandle,STD_OUTPUT_HANDLE mov hStdOut,eax mov eax,back shl eax,4 or eax,fore invoke SetConsoleTextAttribute,hStdOut,eax ret SetConsoleTextColor endp |
Arkadaşlar GetStdHandle ile üzerinde çalıştığımız konsolun tutamğını döndürüyoruz. Böylece SetConsoleTextAttribute APIsi için gerekli olan tutamağı elde etmiş oluyoruz geriye son bir parametre kalıyor o da renk değerimiz. Yani yukardaki kodda SetConsoleTextAttribute APIsinin sonundaki eax aslında rengi belirtiyor. Yukarıdaki Windows sabitleri ile metnin arka yüzünü ya da ön yüzünü değiştirebiliyoruz. Bu sabitleri birbirleriyle karıştırıp ara renkler de elde edilebiliyor. Tabi bu sabitleri aslında sayısal değerlere denk geliyor işlemci seviyesinde ve ben sizin için bu değerleri çıkarttım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
0 = black 1 = koyu mavi 2 = koyu yeşil 3 = koyu turkuaz 4 = koyu kızıl 5 = koyu morumsu(magenta) 6 = kirli sarı 7 = gri -> normal metin 8 = koyu gri 9 = parlak mavi 0Ah = parlak yeşil 0Bh = parlak turkuaz 0Ch = parlak kızıl 0Dh = parlak morumsu(magenta) 0Eh = parlak sarı 0Fh = parlak beyaz |
RadASM ile kodlama yapıyorsanız sondaki altı karakteri benim yazdığım gibi onaltılık da yazabilirsiniz, normalk onluk da yazabilirsiniz. Burada ben bu renkleri deneyerek adlandırdım. Belgelendirme de benim koyu yazdıklarıma ya da parlak yazdıklarıma normal diyor olabilir. Çok takılmayın =)
[dm]155[/dm]
Comments of this post