小亦003 发表于 2023-12-3 13:30:52

改变屏幕的字体颜色

问题:
将屏幕中的第5行到24行设置成白底黑字格式(70H)。

FishC_GPT 发表于 2023-12-3 13:31:04

要改变屏幕的字体颜色,可以使用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官方接口),如未能正确解答您的问题,请继续追问。

人造人 发表于 2023-12-3 14:01:57

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

人造人 发表于 2023-12-3 14:05:04

@不二如是
FishC_GPT好像无法读取板块名字

不二如是 发表于 2023-12-3 14:28:17

人造人 发表于 2023-12-3 14:05
@不二如是
FishC_GPT好像无法读取板块名字

板块是指论坛相应板块的吗?

人造人 发表于 2023-12-3 14:30:51

不二如是 发表于 2023-12-3 14:28
板块是指论坛相应板块的吗?

对,这个问题在 “汇编语言交流”
在问题中没有说用什么语言的情况下,FishC_GPT使用的是python

不二如是 发表于 2023-12-3 14:49:32

人造人 发表于 2023-12-3 14:30
对,这个问题在 “汇编语言交流”
在问题中没有说用什么语言的情况下,FishC_GPT使用的是python

目前还是需要手动提示一下用哪种编程语言

人造人 发表于 2023-12-3 17:49:42

FishC_GPT 发表于 2023-12-3 13:31
要改变屏幕的字体颜色,可以使用Windows的控制台API函数。以下是一个示例代码,可以将屏幕中的第5行到24行 ...

用汇编语言写

FishC_GPT 发表于 2023-12-3 17:50:03

人造人 发表于 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]
查看完整版本: 改变屏幕的字体颜色