2016-03-25 57 views
0

タスク:Sikuliを使用してexplorer.exeプロセスを再起動する必要があります。Sikuli(Jython)を使用してexplorer.exeプロセスを再起動するには?

私の解決策は、「RestartExplorerProcess.batを」バッチファイルを作成することでした

@echo off 
echo Your desktop is being restored, Please wait. . . 
ping -n 5 127.0.0.1 > NUL 2>&1 
echo Killing process Explorer.exe. . . 
taskkill /f /im explorer.exe 
cls 
echo Explorer.exe is killed! 
echo. 
echo Your desktop is now loading. . . 
ping -n 5 127.0.0.1 > NUL 2>&1 
echo. 
ping -n 5 127.0.0.1 > NUL 2>&1 
start %windir%\explorer.exe 
echo Explorer.exe was successfully started! 
exit 

し、私は使用してそれを呼ばれる:

subprocess.Popen(Path) 

問題は、私は再起動の終了を待つ必要があるということですexplorer.exeを実行してください。 私はこのために3つの解決策が見つかりました:

1. p = subprocess.Popen(Path) 
    p.wait() 
2. subprocess.check_call(Path) 
3. os.system(Path) 

しかし、それらのすべてが同じ効果を持っている - Sikuliはすべてのエラーを表示し、ちょうどハングしませんが。たぶん私は間違っていますが、explorer.exeプロセスを再起動しているときに、参照が緩くなっているように見えます。バッチファイルの終了に関するイベントは決して実行できません。

だから私の質問は以下のとおりです。

  1. どのように私は、共通のSikuli(Jythonの)メソッドを使用してExplorer.exeプロセスを再起動することができますか?
  2. そして、私のバッチファイルの終了を、どのような方法で説明していますか?
+0

ハングの原因は何ですか? 'Popen'または' p.wait() '? 'p.wait()'ならば、デフォルトの 'wait()'関数を使い、 'explorer.exe'を起動するのにかかる時間よりも長いタイムアウトを指定してください。 explorer.exeが再起動したときに一意のイメージを使用するだけです。 – DuckPuncher

答えて

0

SikuliとFirefoxの(またはInternet Explorerが)私は、次を使用して再起動/起動するには:

# Path to Firefox executable: 
PathFirefox = r"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" 
# Open Firefox 
App.open(PathFirefox) 

アプリはあなたがアプリケーションがアクティブであるかどうかをチェックするために定義を書くことができ、アクティブであるかどうかを確認するにはない。たとえば
:1を殺すためにして再起動する第二:

def appActive(appName): 
    call = 'TASKLIST', '/FI', 'imagename eq %s' % appName 
    # Get the tasklist result 
    proc = subprocess.Popen(call, shell=True, stdout=subprocess.PIPE) 
    # Trimming lines with information 
    output = proc.communicate()[0].strip().split('\r\n') 
    # If TASKLIST returns multiple lines, it is running. 
    if len(output) > 1 and appName in output[-1]: 
     print('Result: "%s" is running!' % appName) 
     return True 
    else: 
     print('Result: "%s" is NOT running!' % appName) 
     return False 

# Check if Eclipse and Firefox are running: 
appActive('eclipse.exe') 
appActive('firefox.exe') 
0

あなたは2本のバットを作成することができます。その後、デスクトップのイメージが存在するかどうかを確認できます。ここでは関数です。

def restarExplorer(): 
    desktop_home = "your/file/location/desktop_home.png" 
    killExplorer = App("your/file/location/killExplorer.exe") 
    restartExplorer = App("your/file/location/restartExplorer.exe") 
    killExplorer.open() 
    sleep(3) # waiting 3 
    restartExplorer.open() 
    while not exists(desktop_home): # check if desktop button appears 
     sleep(1) # keep waiting 
    continue.. 
関連する問題