Bạn muốn biết cách kiểm tra xem màn hình máy tính của mình đang bật hay tắt bằng Python? Bài viết này sẽ cung cấp cho bạn các phương pháp hiệu quả và dễ thực hiện. Việc này rất hữu ích khi bạn muốn tự động hóa các tác vụ dựa trên trạng thái màn hình, chẳng hạn như gửi thông báo hoặc chạy các script khác nhau. Cùng tìm hiểu nhé!
Việc xác định trạng thái màn hình không chỉ là một thủ thuật lập trình thú vị mà còn mang lại nhiều ứng dụng thực tế. Ví dụ:
Một cách đơn giản để ước lượng trạng thái màn hình là kiểm tra thời gian không hoạt động của người dùng. Nếu người dùng không tương tác với máy tính trong một khoảng thời gian nhất định, có khả năng màn hình đã tắt để tiết kiệm năng lượng. Dưới đây là cách thực hiện:
win32api
(Windows)Trên hệ điều hành Windows, bạn có thể sử dụng thư viện win32api
để lấy thời gian không hoạt động. Đảm bảo bạn đã cài đặt thư viện này:
pip install pywin32
Sau đó, sử dụng đoạn code sau:
import time
import win32api
from datetime import datetime
def getIdleTime():
return (win32api.GetTickCount() - win32api.GetLastInputInfo()) / 1000.0
while True:
now = datetime.now()
idle_time = getIdleTime()
print(f"Thời gian không hoạt động: {idle_time} giây")
if idle_time > 3600: # 1 giờ
print("Có vẻ như màn hình đã tắt.")
# Thực hiện hành động khi màn hình tắt
else:
print("Màn hình có vẻ vẫn đang bật.")
# Thực hiện hành động khi màn hình bật
time.sleep(60) # Kiểm tra mỗi phút
Đoạn code này liên tục kiểm tra thời gian không hoạt động. Nếu thời gian này vượt quá một ngưỡng nhất định (ví dụ: 1 giờ), nó sẽ coi như màn hình đã tắt và thực hiện các hành động tương ứng.
Quartz
(macOS)Trên macOS, bạn có thể sử dụng thư viện `Quartz` để thực hiện việc này. Đầu tiên, cài đặt `pyobjc`:
pip install pyobjc
Sau đó, sử dụng code sau:
import time
from datetime import datetime
import Quartz
import Cocoa
def getIdleTime():
return Quartz.CGEventSource.secondsSinceLastEventType(Quartz.kCGEventSourceStateCombinedSessionState, Quartz.kCGAnyEventType)
while True:
now = datetime.now()
idle_time = getIdleTime()
print(f"Thời gian không hoạt động: {idle_time} giây")
if idle_time > 3600: # 1 giờ
print("Có vẻ như màn hình đã tắt.")
# Thực hiện hành động khi màn hình tắt
else:
print("Màn hình có vẻ vẫn đang bật.")
# Thực hiện hành động khi màn hình bật
time.sleep(60) # Kiểm tra mỗi phút
Tương tự như Windows, code này kiểm tra thời gian không hoạt động và đưa ra kết luận về trạng thái màn hình.
Một phương pháp khác là chụp ảnh màn hình và phân tích xem nó có màu đen hay không. Nếu màn hình tắt, ảnh chụp sẽ có màu đen. Tuy nhiên, phương pháp này có thể không chính xác trong mọi trường hợp, vì màn hình có thể hiển thị màu đen do các nguyên nhân khác.
pip install mss Pillow numpy
Sau đó, sử dụng code sau:
import time
from datetime import datetime
from mss import mss
from PIL import Image
import numpy
def screen_accumulator():
with mss() as sct:
sct.shot() # Chụp ảnh màn hình
im = Image.open("monitor-1.png")
pix = numpy.array(im)
return numpy.sum(pix)
while True:
now = datetime.now()
pixel_sum = screen_accumulator()
if pixel_sum == 0:
print("Có vẻ như màn hình đã tắt.")
# Thực hiện hành động khi màn hình tắt
else:
print("Màn hình có vẻ vẫn đang bật.")
# Thực hiện hành động khi màn hình bật
time.sleep(60) # Kiểm tra mỗi phút
Code này chụp ảnh màn hình, tính tổng giá trị pixel. Nếu tổng này bằng 0, nó coi như màn hình đã tắt.
Một số card đồ họa, như NVIDIA, sẽ tạo ra một thiết bị âm thanh khi màn hình được kết nối. Bạn có thể kiểm tra sự tồn tại của thiết bị âm thanh này để xác định trạng thái màn hình.
pip install pyaudio
Sử dụng code sau:
import time
import pyaudio
def check_audio_device(device_name):
p = pyaudio.PyAudio()
device_found = False
for i in range(p.get_device_count()):
device_info = p.get_device_info_by_index(i)
if device_name in device_info['name'] and device_info['maxOutputChannels'] > 0:
print(f"Tìm thấy: {device_info['name']}, ", end='')
device_found = True
break
p.terminate()
return device_found
while True:
is_available = check_audio_device("NVIDIA High Definition Audio")
if is_available:
print("Màn hình bật")
else:
print("Màn hình tắt")
time.sleep(2)
Lưu ý rằng tên thiết bị âm thanh có thể khác nhau tùy thuộc vào card đồ họa và cách kết nối của bạn.
Bài viết này đã trình bày các phương pháp khác nhau để kiểm tra trạng thái màn hình (bật/tắt) bằng Python. Mỗi phương pháp có ưu và nhược điểm riêng, và bạn nên chọn phương pháp phù hợp nhất với nhu cầu và hệ điều hành của mình. Hy vọng rằng bạn đã tìm thấy thông tin hữu ích trong bài viết này! Hãy thử áp dụng và tùy chỉnh code để phù hợp với dự án của bạn.
Chúc bạn thành công!
Bài viết liên quan