2

win32api を使用して小さな Python スクリプトを作成し、人気のあるゲームCookie Clicker (大きな Cookie をクリックしてポイントを獲得する必要があるゲーム) で使用します。それを行う「auto_clicker」と呼ばれる機能があります。ユーザーが定義したポイントで画面をクリックし続けます。これはスクリプトです:

# -*- coding: utf-8 -*-

import win32con
import win32api

def clicker(x,y):
    """Clicks on given position x,y

    Input:
    x -- Horizontal position in pixels, starts from top-left position
    y -- Vertical position in pixels, start from top-left position

    """

    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def auto_clicker(x = -1,y = -1):
    """Keep clicking on position x,y. If no input is given, gets from actual
    mouse position.

    """
    if x == -1 | y == -1:
        x,y = win32api.GetCursorPos()
    while True:
        clicker(x,y)

それはうまく機能しますが、いくつかの改善を加えたいです:

  • 関数が呼び出されたときにユーザーがクリックしたときにのみカーソル位置を取得するにはどうすればよいですか? win32api には必要なものがすべて含まれているように見えるので、別のモジュールを追加したくありません。この方法を試してみ ましたが成功しませんでした。

  • 「Escape」のようなキープレスを検出するにはどうすればよいので、現在使用している醜いハックなしでプログラムを終了できます (Ctrl+Alt+Del は SetCursorPos にアクセスを拒否しているように見えるため、Python はエラーをスローしてプログラムを終了します)。

  • このプログラムを移植可能にできますか? Tkinter を使用して非表示の Tk ウィンドウを生成できるようですが、何かを書き込もうとしましたが成功しませんでした。

4

2 に答える 2

0

win32api ではクリックを聞くことができるとは思いません。ただし、pyHook を使用してみてください。これは使いやすいシンプルな API で、http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=Main_Page にあります。pyhook を使用すると、マウス イベントをリッスンするリスナーを作成できます。マウスをクリックすると、好きなことを実行できます。リンクの例でその方法を示します。キープレスに関しては、同じAPIを使用することもできます。例も提供されています。頑張ってください!

于 2014-01-16T14:18:36.013 に答える