2

Python 2.6 で画面上でカーソルを移動するために作成したスクリプトがあります。直線に沿ってわずかに変化しながら移動します。速度は一定で、目的地もわずかに可変です。

import win32api, random, math

def cmouse(x2,y2):
    x1,y1 = win32api.GetCursorPos()
    x2 = x2 + random.randrange(-1, 2)
    y2 = y2 + random.randrange(-1, 2)
    dis_x = x2-x1
    dis_y = y2-y1
    dis = math.sqrt(math.pow(x2-x1, 2)+math.pow(y2-y1, 2))
    n = int((dis/2200)*100)
    for i in range(0, n+1):
        t = (random.randrange(1, 3)*0.005)
        c1,d1 = win32api.GetCursorPos()
        if c1 in range(x2-45, x2+46) and d1 in range(y2-45, y2+46):
            var_x = 0
            var_y = 0
        else:
            var_x = random.randrange(-3, 4)
            var_y = random.randrange(-3, 4)
        if n!=0:
            win32api.SetCursorPos((int(x1 + var_x + i*(float(dis_x)/n)),
                                   int(y1 + var_y + i*(float(dis_y)/n))))
            time.sleep(t)
        else:
            time.sleep(t)
            break

99.5% の確率で問題なく動作しますが、時々このエラーが発生します。

File "C:\User\Desktop\Script.py", line 58, in cmouse
    win32api.SetCursorPos((int(x1 + var_x + i*(float(dis_x)/n)),
                           int(y1 + var_y + i*(float(dis_y)/n))))
error: (0, 'SetCursorPos', 'No error message is available')

このまれではあるが厄介なエラーを修正する方法が見つかりません。win32api に関係していると確信していますが、助けを求めています。

4

1 に答える 1

0

コメントで提案したように、Python は初めてなので、関数が呼び出されたときにエラーの原因となる値を特定する必要があります。これを試して:

try:
    win32api.SetCursorPos((int(x1 + var_x + i*(float(dis_x)/n)),
                           int(y1 + var_y + i*(float(dis_y)/n))))
except:
    print "error in SetCursorPos() with x1", x1, "y1", y1, "var_x", var_x, "var_y", var_y, "dis_x", dis_x, "dis_y", dis_y, "n", n
    raise

アイデアは、例外を簡単にインターセプトし、それを引き起こしたすべての引数を出力してから、以前と同じように伝播させることです (おそらくプログラムを終了します)。これが、どの引数がエラーにつながるかを理解するのに役立つことを願っています。

于 2013-07-07T14:00:30.083 に答える