2

次のことを試しましたが、スクリプトの実行時にフォーカスがあったプログラムにフォーカスが戻りません。

import win32com.client
import win32gui

current = win32gui.GetForegroundWindow()

shell = win32com.client.Dispatch("WScript.Shell")

shell.AppActivate('Console2')

shell.SendKeys('{UP}{ENTER}')

shell.AppActivate(str(current))
4

2 に答える 2

3

win32gui.GetForegroundWindow()プロセスIDではなくウィンドウハンドルを返すことがわかりました。

win32process.GetWindowThreadProcessId(hwnd)ハンドルからスレッドIDとプロセスIDを取得するために使用できます。

import win32com.client
import win32gui
import win32process

hwnd = win32gui.GetForegroundWindow()

_, pid = win32process.GetWindowThreadProcessId(hwnd)

shell = win32com.client.Dispatch("WScript.Shell")

shell.AppActivate('Console2')
shell.SendKeys('{UP}{ENTER}')

shell.AppActivate(pid)
于 2011-11-11T14:38:21.927 に答える
0

これにコメントするのに十分な担当者がいない

Acornの答え(ずっと前)に加えて、SetFocus(handle)を使用できるようになりました。

import win32com.client
import win32gui

hwnd = win32gui.GetForegroundWindow()

shell = win32com.client.Dispatch("WScript.Shell")

shell.AppActivate('Console2')
shell.SendKeys('{UP}{ENTER}')

win32gui.SetForegroundWindow(hwnd)

出典:http ://timgolden.me.uk/pywin32-docs/win32gui__SetFocus_meth.html

于 2020-04-24T18:58:40.623 に答える