Тема: AHK: Убить ненужные процессы.
#SingleInstance,Force
#Persistent
SetBatchLines,-1
SendMode,Input
SetKeyDelay,0
#UseHook
#SingleInstance ignore
DetectHiddenWindows, on
HideArr := Object()
;********************************************
;Процессы которые добавятся поумолчанию.
my_sys=System Idle Process,Interrupts,DPCs,System,smss.exe,csrss.exe,wininit.exe,services.exe,svchost.exe,WmiPrvSE.exe,WmiPrvSE.exe,CorelPP.exe,dllhost.exe,svchost.exe,atiesrxx.exe,atieclxx.exe,svchost.exe,audiodg.exe,svchost.exe,WUDFHost.exe,wisptis.exe,wisptis.exe,dwm.exe,svchost.exe,svchost.exe,svchost.exe,spoolsv.exe,svchost.exe,Fuel.Service.exe,PsiService_2.exe,svchost.exe,SearchIndexer.exe,SearchProtocolHost.exe,SearchFilterHost.exe,svchost.exe,svchost.exe,taskhost.exe,OSPPSVC.EXE,lsass.exe,lsm.exe,csrss.exe,winlogon.exe,explorer.exe,RAVCpl64.exe,HydraDM.exe,HydraDM64.exe,CorelDRW.exe,EXCEL.EXE,WINWORD.EXE,WINWORD.EXE,MSACCESS.EXE,VISIO.EXE,MOM.exe,CCC.exe,AIMP3.exe,system.exe,AutoHotkey.exe
;********************************************
applicationname=System_run
gosub, INI
return
;********************************************
;********************************ADMINKA**************************************************
#f8::
gosub, INI
gosub, settings
return
SETTINGS:
Text := ""
for k in ComObjGet("winmgmts:").InstancesOf("Win32_Process")
{
IfNotInString, my_process, % k.Name
{
Text .= "`r`n," k.Name
}
}
Sort, Text
Text := ",Имена убиваемых процессов" ",`r`n" Text
Gui,Destroy
Gui,Add,GroupBox, x12 y10 w230 h350,&my_process
Gui,Add,GroupBox, x262 y10 w230 h350,&my_process_ACTIVE
Gui,Add,Button, x202 y380 w100 h30 GSETTINGSOK,Сохранить
Gui,Add,Button, x332 y380 w100 h30 GSETTINGSCANCEL,&Отмена
Gui,Add,Edit,x22 y30 w210 h320 vsmy_process,%my_process%
Gui,Add,Edit,x272 y30 w210 h320 vsmy_process_ACTIVE,%Text%
Gui,Show, x127 y87 h427 w509,%applicationname% Settings
Return
SETTINGSOK:
Gui,Submit
my_process:=smy_process
IniWrite,%my_process%,%applicationname%.ini,Settings,my_process
Return
SETTINGSCANCEL:
Gui,Destroy
Return
INI:
IfNotExist,%applicationname%.ini
IniWrite, %my_sys% ,%applicationname%.ini,Settings,my_process
IniRead,my_process,%applicationname%.ini,Settings,my_process
If my_process=ERROR
my_process=System Idle Process,Interrupts,DPCs,System,smss.exe,csrss.exe,wininit.exe,services.exe,svchost.exe,WmiPrvSE.exe,WmiPrvSE.exe,CorelPP.exe,dllhost.exe,svchost.exe,atiesrxx.exe,atieclxx.exe,svchost.exe,audiodg.exe,svchost.exe,WUDFHost.exe,wisptis.exe,wisptis.exe,dwm.exe,svchost.exe,svchost.exe,svchost.exe,spoolsv.exe,svchost.exe,Fuel.Service.exe,PsiService_2.exe,svchost.exe,SearchIndexer.exe,SearchProtocolHost.exe,SearchFilterHost.exe,svchost.exe,svchost.exe,taskhost.exe,OSPPSVC.EXE,lsass.exe,lsm.exe,csrss.exe,winlogon.exe,explorer.exe,RAVCpl64.exe,HydraDM.exe,HydraDM64.exe,CorelDRW.exe,EXCEL.EXE,WINWORD.EXE,WINWORD.EXE,MSACCESS.EXE,VISIO.EXE,Volume2.exe,MOM.exe,CCC.exe,AIMP3.exe,system.exe,AutoHotkey.exe,Bloody2.exe,Volume2.exe
return
;********************************ADMINKA-END******************************
^F5::
processesWIN7 = %my_process%
processesXP = %my_process%
if ((%A_OSVersion%=WIN_XP) or (%A_OSVersion%=WIN_2003)){
processes:=processesXP
EnvGet, PrFiles, PROGRAMFILES
}else{
processes:=processesWIN7
EnvGet, PrFiles, PROGRAMFILES(x86)
}
;собираем массив запущенных процессов
proc2 := Object()
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
{
proc2.insert(process.Name)
}
;фильтруем массив от повторяющихся элементов
proc2close := Object()
Loop % proc2.MaxIndex()
{
if (proc2.MaxIndex() or proc.MaxIndex())<>0
if % proc2[A_Index] <> proc[A_Index]
proc2close.insert(proc2[A_Index])
}
;завершаем процессы
WinGet, ActiveW, ProcessName
if ((%ActiveW%!=explorer.exe) or (%ActiveW%!=iexplore.exe)){
WinClose, A
}
Loop % proc2close.MaxIndex()
{
IfNotInString, processes, % proc2[A_Index]
{
Process, Close, % proc2[A_Index]
}
}
DeleteDummyIcons() ; вызов функции mod_1
#UseHook, off
return
;**************************END**********************************
;*************mod_1************serzh82saratov****Спасибо.*****
DeleteDummyIcons()
{
/*
Недокументированная структура TRAYDATA
typedef TRAYDATA
{
IntPtr hwnd;
uint uID;
uint uCallbackMessage;
uint Reserved;
uint Reserved2;
IntPtr hIcon;
}
*/
PtrSize := A_Is64bitOS ? 8 : 4
WM_USER := 0x400
TB_BUTTONCOUNT := WM_USER + 24
TB_GETBUTTON := WM_USER + 23
SizeOfTBBUTTON := 8 + PtrSize*3
SizeOfTRAYDATA := 16 + PtrSize*2
DHW_Prev := A_DetectHiddenWindows
DetectHiddenWindows, On
ControlGet, hTray, hwnd,, ToolbarWindow321, ahk_class Shell_TrayWnd
ControlGet, hOverflow, hwnd,, ToolbarWindow321, ahk_class NotifyIconOverflowWindow
WinGet, PID, PID, ahk_id %hTray%
; создаём буфер в адресном пространстве проводника для чтения данных
RemoteBuff := New RemoteBuffer(PID, SizeOfTRAYDATA)
Dummy := []
Loop 2
{
hwnd := A_Index = 1 ? hTray : hOverflow
i := A_Index
SendMessage, TB_BUTTONCOUNT,,,, ahk_id %hwnd%
Loop % ErrorLevel
{
SendMessage, TB_GETBUTTON, A_Index - 1, RemoteBuff.ptr,, ahk_id %hwnd%
; получаем структуру TBBUTTON, в ней по смещению 8 + PtrSize адрес структуры TRAYDATA в адресном пространстве проводника
pTBBUTTON := RemoteBuff.Read(SizeOfTBBUTTON)
; получаем структуру TRAYDATA
pTRAYDATA := RemoteBuff.Read(SizeOfTRAYDATA, NumGet(pTBBUTTON+0, 8 + PtrSize) - RemoteBuff.ptr)
hWndIcon := NumGet(pTRAYDATA+0), uID := NumGet(pTRAYDATA + PtrSize, "UInt")
; если окна не существует (процесс не существует) — заносим в массив
if !WinExist("ahk_id" hWndIcon)
Dummy.Insert({hWnd: hWndIcon, uID: uID}) ; вызов функции.
}
}
DetectHiddenWindows, %DHW_Prev%
for k, v in Dummy
RemoveTrayIcon(v.hWnd, v.uID)
}
RemoveTrayIcon(hWnd, uID)
{
VarSetCapacity(NOTIFYICONDATA, size := A_PtrSize = 8 ? 848 : A_IsUnicode? 828 : 444, 0)
NumPut(size, NOTIFYICONDATA, "UInt")
NumPut(hWnd, NOTIFYICONDATA, A_PtrSize)
NumPut(uID, NOTIFYICONDATA, 2*A_PtrSize)
DllCall("shell32\Shell_NotifyIcon", "UInt", NIM_DELETE := 2, Ptr, &NOTIFYICONDATA)
Return
}
Class RemoteBuffer ; класс. После знака "{" следует содержимое класса.
{
__New(PID, size)
{
static PROCESS_VM_OPERATION := 0x8, PROCESS_VM_WRITE := 0x20, PROCESS_VM_READ := 0x10
, MEM_COMMIT := 0x1000, PAGE_READWRITE := 0x4
if !(this.hProc := DllCall("OpenProcess", UInt, PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, Int, 0, UInt, PID, Ptr))
Return ""
if !(this.ptr := DllCall("VirtualAllocEx", UInt, this.hProc, UInt, 0, UInt, size, UInt, MEM_COMMIT, UInt, PAGE_READWRITE, Ptr))
Return ""
this.size := size
}
__Delete()
{
DllCall("VirtualFreeEx", Ptr, this.hProc, Ptr, this.ptr, UInt, 0, UInt, MEM_RELEASE := 0x8000)
DllCall("CloseHandle", Ptr, this.hProc)
}
Read(size, offset = 0)
{
static LocalBuff
VarSetCapacity(LocalBuff, size, 0)
DllCall("ReadProcessMemory", Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, &LocalBuff, UInt, size, UInt, 0)
VarSetCapacity(LocalBuff, -1)
Return &LocalBuff
}
Write(pLocalBuff, size, offset = 0)
{
return DllCall("WriteProcessMemory", Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, pLocalBuff, UInt, size, UInt, 0)
}
}
;*** teadrinker***Автор*кода_мода****mod_1_END****serzh82saratov****Спасибо.*****
Убивает все процессы, кроме перечисленных в списке.
ctrl+F5 убить процессы.
win+F8 Настройки.
Если кто-то, чем-то может & хочет помочь в усовершенствовании данного кода - пишите, выкладывайте.
Буду искренне рад.