2009-08-30 36 views
6

Có thể trong python để biết ứng dụng toàn màn hình trên Linux có đang chạy không? Tôi có cảm giác có thể sử dụng Xlib nhưng tôi chưa tìm được cách nào.Làm cách nào để biết ứng dụng toàn màn hình có đang chạy không?

EDIT: Toàn màn hình Tôi có nghĩa là màn hình WHOLE không có gì ngoài ứng dụng, chẳng hạn như trò chơi toàn màn hình.

+0

Bạn có thể phải quyết định chính xác ý mình là "ứng dụng toàn màn hình". Đó có phải chỉ là một cửa sổ bao phủ đủ màn hình mà không có cửa sổ nào khác nhìn thấy được không? Nếu có nhiều màn hình thì sao? –

+0

ok, đã chỉnh sửa câu hỏi. –

Trả lời

3

Tìm thấy một giải pháp:

import Xlib.display 

screen = Xlib.display.Display().screen() 
root_win = screen.root 

num_of_fs = 0 
for window in root_win.query_tree()._data['children']: 
    window_name = window.get_wm_name() 
    width = window.get_geometry()._data["width"] 
    height = window.get_geometry()._data["height"] 

    if width == screen.width_in_pixels and height == screen.height_in_pixels: 
     num_of_fs += 1 

print num_of_fs 

này in ra số lượng các cửa sổ toàn màn hình mà đối với tôi là bình thường một. Khi chơi trò chơi toàn màn hình, số 2.

4

Nếu tất cả người quản lý cửa sổ bạn quan tâm đang chạy dưới sự hỗ trợ EWMH, tiêu chuẩn gợi ý trình quản lý cửa sổ mở rộng, có những cách thanh lịch để thực hiện điều này (ví dụ: nói với Xlib qua ctypes). Thuộc tính của cửa sổ gốc (xem here) cho bạn biết cửa sổ nào đang hoạt động (nếu có); thuộc tính _NET_WM_STATE của cửa sổ hiện hoạt là danh sách các nguyên tử mô tả trạng thái của nó bao gồm _NET_WM_STATE_FULLSCREEN nếu cửa sổ đó là toàn màn hình. (Nếu bạn có nhiều màn hình, một cửa sổ có thể toàn màn hình trên một màn hình mà không hoạt động; tôi tin rằng các trường hợp khác có thể tồn tại trong đó một cửa sổ có thể toàn màn hình mà không hoạt động - Tôi không nghĩ có cách nào để che chúng lại tất cả mà không kiểm tra bản chất _NET_WM_STATE cho mỗi cửa sổ, mặc dù).

+0

Bạn sử dụng macro Xlib RootWindow (hiển thị và màn hình dưới dạng đối số) hoặc DefaultRootWindow (chỉ hiển thị làm đối số); Tôi quên những gì họ mở rộng về các cuộc gọi cơ bản, nhưng các tệp .h của Xlib sẽ cho bạn biết. Hoặc, với python xlib (handier hơn ctype cho tác vụ này, IMHO), nó là thuộc tính '.root' của phương thức' screen' của đối tượng 'Display'. –

+0

Tôi không thấy làm thế nào tôi nhận được tài sản _NET_ACTIVE_WINDOW của nó. –

+0

Trong Python xlib, sử dụng phương thức 'get_property' hoặc' list_properties' của đối tượng cửa sổ - xem http://python-xlib.sourceforge.net/doc/html/python-xlib_toc.html và liên kết từ đó. Xem ví dụ http://www.google.com/codesearch/p?hl=vi&sa=N&cd=2&ct=rc#0kgoha2gKhE/matchbox-window-manager-1.0/src/structs.h&q=%22_NET_ACTIVE_WINDOW%22%20file:%5C. h $ (các MBAtomEnum) cho các giá trị số của các macro/hằng số (chỉ cần đếm lên ;-). –

Các vấn đề liên quan