Преобразование Autoit в Python - PullRequest
0 голосов
/ 01 апреля 2012

Итак, у меня есть этот замечательный маленький скрипт AutoIt, которым я пользуюсь последние пару лет.Изначально созданный для Skype, он используется для сокращения использования памяти приложениями, занимающими оперативную память, до минимума, который им необходим (только для Windows), и поддерживает их на минимально возможном уровне, предоставляя им только то, что им действительно нужно.Вот как это выглядит:

#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 

Теперь я ищу попытку осуществить то же самое, но строго в Python.Либо чем-то полностью родным в Python, либо чем-то, что может запускать сценарии Autoit в Python без необходимости вызова в другом процессе.

Любая помощь приветствуется, спасибо!

РЕДАКТИРОВАТЬ: Просто вставьте,Я хотел бы, чтобы мое приложение было переносимым в конце.Поэтому я стараюсь не регистрировать какие-либо библиотеки DLL в Windows (если кто-то думал об использовании модуля Win32) Еще раз спасибо!

1 Ответ

2 голосов
/ 01 апреля 2012

Вы можете использовать модуль ctypes для доступа к библиотекам Windows.Это позволит вам переписать функцию _ReduceMemory.Остальная часть программы кажется довольно тривиальной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...