改变屏幕的字体颜色
问题:将屏幕中的第5行到24行设置成白底黑字格式(70H)。 要改变屏幕的字体颜色,可以使用Windows的控制台API函数。以下是一个示例代码,可以将屏幕中的第5行到24行设置为白底黑字格式。
import ctypes
def set_text_color(color):
STD_OUTPUT_HANDLE = -11
handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
def set_screen_colors(start_row, end_row, color):
for row in range(start_row, end_row + 1):
# 定位到指定行
ctypes.windll.kernel32.SetConsoleCursorPosition(ctypes.windll.kernel32.GetStdHandle(-12), ctypes.wintypes.COORD(0, row))
# 设置文本颜色和背景颜色
set_text_color(color)
# 输出空格填充整行
ctypes.windll.kernel32.FillConsoleOutputCharacterW(ctypes.windll.kernel32.GetStdHandle(-11), ' ', ctypes.windll.kernel32.GetLargestConsoleWindowSize(), ctypes.wintypes.COORD(0, row), ctypes.byref(ctypes.wintypes.DWORD()))
ctypes.windll.kernel32.FillConsoleOutputAttribute(ctypes.windll.kernel32.GetStdHandle(-11), color, ctypes.windll.kernel32.GetLargestConsoleWindowSize(), ctypes.wintypes.COORD(0, row), ctypes.byref(ctypes.wintypes.DWORD()))
# 示例调用
set_screen_colors(5, 24, 0x70)
这段代码使用了ctypes来调用Windows的控制台API函数,通过设置文本颜色和背景颜色来改变屏幕的字体颜色。在示例中,使用了黑底白字的格式(0x70),你可以根据需要调整颜色参数。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 code segment
start:
; getchar
mov ah, 1
int 21h
mov bx, 4 * 160 + 1
mov dx, 24 * 160 + 1
mov ax, 0b800h
mov ds, ax
n:mov al, 70h
mov , al
add bx, 2
cmp bx, dx
jne n
; getchar
mov ah, 1
int 21h
; exit
mov ax, 4c00h
int 21h
ret
code ends
end start
@不二如是
FishC_GPT好像无法读取板块名字
人造人 发表于 2023-12-3 14:05
@不二如是
FishC_GPT好像无法读取板块名字
板块是指论坛相应板块的吗? 不二如是 发表于 2023-12-3 14:28
板块是指论坛相应板块的吗?
对,这个问题在 “汇编语言交流”
在问题中没有说用什么语言的情况下,FishC_GPT使用的是python
人造人 发表于 2023-12-3 14:30
对,这个问题在 “汇编语言交流”
在问题中没有说用什么语言的情况下,FishC_GPT使用的是python
目前还是需要手动提示一下用哪种编程语言 FishC_GPT 发表于 2023-12-3 13:31
要改变屏幕的字体颜色,可以使用Windows的控制台API函数。以下是一个示例代码,可以将屏幕中的第5行到24行 ...
用汇编语言写 人造人 发表于 2023-12-03 17:49
用汇编语言写
要使用汇编语言改变屏幕的字体颜色,可以使用INT 10H中断来实现。以下是一个示例的汇编代码,可以将屏幕中的第5行到24行设置为白底黑字格式(70H)。
.model small
.stack 100h
.data
startRow dw 5 ; 起始行
endRow dw 24 ; 结束行
textAttribute db 70H ; 文本属性
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 0 ; 初始化AH寄存器为0,表示设置文本模式
int 10h ; 调用INT 10H中断,设置文本模式
mov bh, 0 ; 设置页面号为0
mov dl, 0 ; 设置列号为0(从左上角开始)
mov bl, textAttribute ; 设置文本属性
mov cx, 0 ; 保存光标位置
setTextColor:
mov ch, byte ptr ; 加载起始行
mov cl, 0 ; 加载起始列
nextRow:
cmp ch, byte ptr ; 比较当前行和结束行
jg done ; 如果大于结束行,跳转到done
mov ah, 2 ; 设置光标位置的功能
mov dh, ch ; 设置行号
mov dl, 0 ; 设置列号
int 10h ; 调用INT 10H中断,设置光标位置
mov ah, 9 ; 设置文本属性的功能
mov al, ' ' ; 设置输出字符为空格
mov cx, 80 ; 设置输出字符串的长度为80(一行字符的个数)
int 10h ; 调用INT 10H中断,设置文本属性和输出字符
inc ch ; 增加当前行号
jmp nextRow ; 跳转到nextRow继续设置下一行的文本属性
done:
mov ah, 4Ch ; 退出程序的功能
mov al, 0 ; 设置返回代码为0
int 21h ; 调用INT 21H中断,退出程序
main endp
end main
编译和运行这段代码可以使用一些汇编语言的开发环境,如DOSBox、MASM等。这段代码使用INT 10H中断来设置文本模式、光标位置和文本属性,并通过循环遍历需要改变颜色的行进行设置。最后,通过INT 21H中断退出程序。请注意,不同的汇编语言开发环境可能有不同的编译和运行方法,请根据你所使用的环境进行适当的调整。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]