2012-03-31 16 views
0

Also habe ich dieses brilliante kleine AutoIt-Skript, das ich in den letzten paar Jahren benutzt habe. Ursprünglich für Skype entwickelt, wird es verwendet, um den Speicherverbrauch von RAM-Speicheranwendungen auf das Minimum zu reduzieren, das sie benötigen (Nur für Windows) und sie so niedrig wie möglich zu halten und ihnen nur das zu geben, was sie wirklich brauchen. So sieht es aus:Umwandlung von Autoit in Python

#include <Misc.au3> 
_Singleton("skype-memory-reducer") 

Opt("TrayMenuMode", 1) 
Opt("TrayOnEventMode", 1) 

TrayCreateItem("Quit") 
TrayItemSetOnEvent(-1, "Bye") 
TraySetState() 

Global Const $interval = 2000 ; interval at which the memory is freed, anything below this will almost certainly only slow down your system. 

;here you can add any other process, 
;but be carefull which process you choose, 
;bacause in some cases this will slow down your application or even your PC 
Global $list = "skype.exe|skypePM.exe" 
Global $processlist = StringSplit($list, "|") 

While 1 
    For $i = 1 To UBound($processlist) - 1 
     $pid = ProcessExists($processlist[$i]) 
     If $pid Then _ReduceMemory($pid) 
    Next 
    _ReduceMemory(); also reduce the memory used by the script itself... 
    Sleep($interval) 
WEnd 

Func Bye() 
    Exit 
EndFunc ;==>Bye 

;I don't remember who was the author of this UDF... (it's not me) 
Func _ReduceMemory($i_PID = -1) 
    If $i_PID <> -1 Then 
     Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID) 
     Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0]) 
     DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0]) 
    Else 
     Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1) 
    EndIf 

    Return $ai_Return[0] 
EndFunc ;==>_ReduceMemory 

Nun, ich suche nach dem Versuch, die gleiche Sache aber streng in Python abzuziehen. Entweder durch etwas, das in Python vollständig nativ ist, oder durch etwas, das Autoit-Skripte in Python ausführen kann, ohne dass ein anderer Prozess aufgerufen werden muss.

Jede Hilfe ist dankbar, danke!

EDIT: Nur incase, ich möchte meine Anwendung am Ende tragbar sein. Also versuche ich zu vermeiden, irgendwelche DLLs in Windows zu registrieren (falls jemand dachte, das Win32 Modul zu benutzen) Danke nochmal!

+0

Das ist nichts, wofür man portablen Code schreiben kann, es sei denn, es existiert eine Bibliothek oder man hat Code wie wenn Windows blah macht, wenn Linux bla tut, so weiter. – Corbin

+0

Wie immer ... was hast du bisher probiert? StackOverflow ist für spezifische Fragen; versuche etwas und wenn du ein genau definiertes Problem hast, frag es hier. – Amber

+0

OK, ich habe die Spezifikationen. Lass uns über Gehalt reden. – joaquin

Antwort

2

Sie können das Modul ctypes verwenden, um auf Windows-DLLs zuzugreifen. Damit können Sie die _ReduceMemory-Funktion neu schreiben. Der Rest des Programms scheint eher trivial zu sein.