[python] Jak zavrit okno prohlizece?
Jan Matějka
matejka na cat.cz
Pondělí Únor 21 11:06:14 CET 2005
> V Python 2.4 (Modules/posixmodule.c, řádek cca 7188) se
> os.startfile() implementuje jako
>
> ShellExecute((HWND)0, NULL, filepath,
> NULL, NULL, SW_SHOWNORMAL);
>
> To ale není podstatné. Podstatné je to, že se _z Pythonu_ k
> informaci o spuštěném procesu browseru jednoduše a
> jednoznačně nedostanu.
Myslel jsem to tak, že se nebude volat os.startfile(), ale přímo
ShellExecuteEx, viz zdroják. Vzhledem k závislosti na win32 knihovnách (i
když skoro standardních) to není čistý Python ale protože tazatel píše, že
je to na Win, tak bych to nepovažoval za problém.
Ani takto to však není ideální řešení zejména proto, že po otevření
dokumentu máme sice k dispozici handle procesu, ve kterém je dokument
otevřen, ale v případě, kdy jeden proces zobrazuje více dokumentů se
ukončením úlohy mohou nechtěně zavřít i jineé dokumenty.
Pokud je to třeba řešit, tak je nutno zvolit přístup, kdy zvolím konkrétní
zvolenou aplikaci pro zobrazování a využiji jejího rozhraní, na Win připadá
v úvahu COM a DDE.
from win32com.shell import shell, shellcon
import win32con
import win32api
print "Oteviram dokument"
exResult=shell.ShellExecuteEx(
lpVerb="open",
nShow=win32con.SW_NORMAL,
lpFile=r"http://www.py.cz",
fMask=shellcon.SEE_MASK_NOCLOSEPROCESS
)
print "Cekam 5 s"
win32api.Sleep(5000)
print "Zabijim proces"
win32api.TerminateProcess(exResult['hProcess'],-1) #toto je hrubě špinavá
technika
print "hotovo"
Jan Matejka
Další informace o konferenci Python