Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
development:python:windows [2019-04-09 18:01] Martin Prochnowdevelopment:python:windows [2019-07-26 15:02] (aktuell) Martin Prochnow
Zeile 1: Zeile 1:
 ====== Windows ====== ====== Windows ======
  
-===== Schnipsel ===== +===== Programmfenster in Vordergrund bringen ===== 
-Modalen Dialog anzeigen:+Folgende Funktion kann genutzt werden, um unter Windows ein Programm-Fenster in den Vordergrund zu bringen. Parameter ist der Fenstername (wie er in der Titelleiste steht). Text, der dem Namen nachgestellt ist, wird ignoriert. 
 <sxh python> <sxh python>
-import os, sys, ctypes+def raiseWindowByName(title): 
 +    import win32con 
 +    import win32gui
  
-ctypes.windll.user32.MessageBoxA(0+    wins = [] 
-    "curdir%s\nexedir: %s\nsys.winver: %s" % ( +    win32gui.EnumWindows(lambda x, y: y.append(x)wins) 
-        os.path.abspath(os.curdir), + 
-        os.path.abspath(os.path.dirname(sys.argv[0])), +    for winId in wins
-        sys.winver+        winName = win32gui.GetWindowText(winId
-    ), "%s - Message" % os.path.basename(sys.executable), 0x30 +        if winName.startswith(title): 
-)+            if win32gui.IsIconic(winId): 
 +                win32gui.ShowWindow(winIdwin32con.SW_RESTORE) 
 +                 
 +            win32gui.SetForegroundWindow(winId
 +             
 +            break
 </sxh> </sxh>
  
Zeile 27: Zeile 35:
 makepy.main() makepy.main()
 </sxh> </sxh>
 +
 +===== Nutzung von IPv4 erzwingen =====
 +Unter neueren Windows-Versionen wird unter Python bei der Namensauflösung für Windows-Rechner (z.B. auch //localhost//) zuerst eine IPv6-Adresse zurückgegeben. Wenn der anzusprechende Server aber kein IPv6 spricht, kommt es aufgrund der entsprechenden Timeouts zu Verzögerungen beim Verbindungsaufbau.
 +
 +Eine Lösung wäre es natürlich, IPv6 im Betriebssystem zu deaktivieren. Das hat aber was von "mit Kanonen auf Spatzen schießen". Man kann Python auch dazu überreden, bei der Namensauflösung nur IPv4-Adressen zu berücksichtigen.
 +
 +<sxh python>
 +import socket
 +origGetAddrInfo = socket.getaddrinfo
 +
 +def getAddrInfoWrapper(host, port, family = 0, socktype = 0, proto = 0, flags = 0):
 +    return origGetAddrInfo(host, port, socket.AF_INET, socktype, proto, flags)
 +
 +socket.getaddrinfo = getAddrInfoWrapper
 +</sxh>
 +
 +[[http://stackoverflow.com/questions/2014534/force-python-mechanize-urllib2-to-only-use-a-requests/6319043#6319043|Quelle]]
  
 ===== Windows-Service ===== ===== Windows-Service =====
Zeile 36: Zeile 61:
 import inspect import inspect
 path = inspect.currentframe().f_code.co_filename path = inspect.currentframe().f_code.co_filename
 +</sxh>
 +
 +===== Schnipsel =====
 +Modalen Dialog anzeigen:
 +<sxh python>
 +import os, sys, ctypes
 +
 +ctypes.windll.user32.MessageBoxA(0,
 +    "curdir: %s\nexedir: %s\nsys.winver: %s" % (
 +        os.path.abspath(os.curdir),
 +        os.path.abspath(os.path.dirname(sys.argv[0])),
 +        sys.winver,
 +    ), "%s - Message" % os.path.basename(sys.executable), 0x30
 +)
 </sxh> </sxh>
  
 {{tag>Python Windows}} {{tag>Python Windows}}
  
  • Zuletzt geändert: 2019-07-26 15:02