45

Pythonを使用して画面上にアクティブなウィンドウを取得したいと思います。

たとえば、ユーザー名とパスワードを admin として入力するルーターの管理インターフェイス

その管理インターフェイスは、ユーザー名とパスワードの入力を自動化するために Python を使用してキャプチャしたいものです。

これを行うには、どのようなインポートが必要ですか?

4

10 に答える 10

34

Windows では、Windows 拡張機能として python を使用できます ( http://sourceforge.net/projects/pywin32/ ):

from win32gui import GetWindowText, GetForegroundWindow
print GetWindowText(GetForegroundWindow())

以下のコードは python 3 用です。

from win32gui import GetWindowText, GetForegroundWindow
print(GetWindowText(GetForegroundWindow()))

(これはhttp://scott.sherrillmix.com/blog/programmer/active-window-logger/で見つけました)

于 2012-06-21T15:01:16.843 に答える
21

次のスクリプトは、Linux、Windows、および Mac で動作するはずです。現在、Linux (Ubuntu Mate Ubuntu 15.10) でのみテストされています。

前提条件

Linux の場合:

インストールしますwnck( sudo apt-get install python-wnckUbuntu の場合はlibwnckを参照してください)。

Windows の場合:

win32gui利用可能であることを確認してください

Mac の場合:

AppKit利用可能であることを確認してください

スクリプト

#!/usr/bin/env python

"""Find the currently active window."""

import logging
import sys

logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s',
                    level=logging.DEBUG,
                    stream=sys.stdout)


def get_active_window():
    """
    Get the currently active window.

    Returns
    -------
    string :
        Name of the currently active window.
    """
    import sys
    active_window_name = None
    if sys.platform in ['linux', 'linux2']:
        # Alternatives: https://unix.stackexchange.com/q/38867/4784
        try:
            import wnck
        except ImportError:
            logging.info("wnck not installed")
            wnck = None
        if wnck is not None:
            screen = wnck.screen_get_default()
            screen.force_update()
            window = screen.get_active_window()
            if window is not None:
                pid = window.get_pid()
                with open("/proc/{pid}/cmdline".format(pid=pid)) as f:
                    active_window_name = f.read()
        else:
            try:
                from gi.repository import Gtk, Wnck
                gi = "Installed"
            except ImportError:
                logging.info("gi.repository not installed")
                gi = None
            if gi is not None:
                Gtk.init([])  # necessary if not using a Gtk.main() loop
                screen = Wnck.Screen.get_default()
                screen.force_update()  # recommended per Wnck documentation
                active_window = screen.get_active_window()
                pid = active_window.get_pid()
                with open("/proc/{pid}/cmdline".format(pid=pid)) as f:
                    active_window_name = f.read()
    elif sys.platform in ['Windows', 'win32', 'cygwin']:
        # https://stackoverflow.com/a/608814/562769
        import win32gui
        window = win32gui.GetForegroundWindow()
        active_window_name = win32gui.GetWindowText(window)
    elif sys.platform in ['Mac', 'darwin', 'os2', 'os2emx']:
        # https://stackoverflow.com/a/373310/562769
        from AppKit import NSWorkspace
        active_window_name = (NSWorkspace.sharedWorkspace()
                              .activeApplication()['NSApplicationName'])
    else:
        print("sys.platform={platform} is unknown. Please report."
              .format(platform=sys.platform))
        print(sys.version)
    return active_window_name

print("Active window: %s" % str(get_active_window()))
于 2016-04-05T07:23:58.417 に答える
-10

wxPython を使ってみてください:

import wx
wx.GetActiveWindow()
于 2012-04-22T11:29:07.917 に答える