win32process.GetWindowThreadProcess()
ウィンドウ ハンドラーを取得し、そのプロセス ID を返すものがあることがわかります。反対の方法はありますか: 実行中のプロセスのウィンドウ ハンドラをプロセス ID で取得する方法はありますか? みたいなwin32gui.GetWindowHandler(processId)
?
具体的に私がやろうとしていること:
外部プログラムを実行する python スクリプトがあります。たとえば、notepad.exe です。メソッドが呼び出されると
、メモ帳が起動されます。このメソッドがメモ帳を複数回runProgram()
実行しないようにしたい。win32processを使用して、次の方法でこれを実現します。
import win32process as process
import sys
PORTABLE_APPLICATION_LOCATION = "C:\\Windows\\system32\\notepad.exe"
processHandler = -1
def runProgram():
global processHandler
#don't run a process more than once
if (isLiveProcess(processHandler)):
#Bring focus back to running window!
return;
try:
startObj = process.STARTUPINFO()
myProcessTuple = process.CreateProcess(PORTABLE_APPLICATION_LOCATION,None,None,None,8,8,None,None,startObj)
processHandler = myProcessTuple[2]
except:
print(sys.exc_info[0])
def isLiveProcess(processHandler): #Process handler is dwProcessId
processList = process.EnumProcesses()
for aProcess in processList:
if (aProcess == processHandler):
return True
return False
runProgram()
これは期待どおりに機能しますが、プロセスがすでに生きていることが判明した場合は、 win32guiを使用してそのウィンドウを前面に戻したいと思います。