2012-03-31 15 views
0

私はここ2年間使ってきたこの華麗な小さなAutoItスクリプトを持っています。 Skype用に構築されたもので、RAMホギングアプリケーションのメモリ使用量を必要最小限(Windowsのみ)に抑え、可能な限り低く保ち、本当に必要なものを提供するために使用されています。ここでは次のようになります。Autoitを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 

、私は同じことをやってのけるしようと探したがstricly Pythonでいます。 Pythonで完全にネイティブなもの、または別のプロセスを呼び出す必要なしにPython内でAutoitスクリプトを実行できるものによって。

ご協力いただきありがとうございます。

EDIT:ちょうど入れて、私は私のアプリケーションを最後にポータブルにしたいと思います。だから、私はWindowsで任意のDLLを登録することを避けようとしています(誰かがWin32モジュールを使用しようと考えていた場合)。ありがとうございました!

+0

ライブラリーが存在しない限り、またはLinuxのような場合はウィンドウがあいまいであるかのようなコードを持っていない限り、移植可能なコードを書くことはできません。 – Corbin

+0

いつものように...あなたはこれまでに何を試しましたか? StackOverflowは特定の質問です。何かを試してみて、うまく定義された問題に遭遇したら、ここでそれを聞いてください。 – Amber

+0

OK、仕様があります。給料について話しましょう。 – joaquin

答えて

2

ctypesモジュールを使用してWindows DLLにアクセスできます。これにより、_ReduceMemory関数を書き換えることができます。プログラムの残りの部分はややこしいようです。

関連する問題