Verfasst: 27.06.2005 17:00
Hm, mit #VK_MENU hatte ich es aber schon versucht und es funktionierte nicht. (habs nochmal getestet, funzt jetzt auch nicht).
Vielleicht läufts ja bei euch:
In Zeile 104 ist die Abfrage.
Vielleicht läufts ja bei euch:
Code: Alles auswählen
Enumeration
#Window_Main
EndEnumeration
Enumeration
#Gadget_Button_KILL
#Gadget_Test_Except
#Gadget_Button_Except_Add
#Gadget_Button_Except_Del
#Gadget_Button_Except_AddCurrent
#Gadget_List_Except
#Gadget_List_Current
EndEnumeration
Enumeration
#Image_SystrayIcon
EndEnumeration
#PROCESS_QUERY_INFORMATION = 1024
#PROCESS_VM_READ = 16
#PROCESS_TERMINATE = 1
#WH_KEYBOARD_LL = 13
NewList Exceptions.s()
NewList CurrentProcesses.s()
Global hHook
Procedure WindowCallback(WindowID, message, wParam, lParam)
result.l = #PB_ProcessPureBasicEvents
Select message
Case #WM_SYSCOMMAND
Select wParam
Case #SC_MINIMIZE
HideWindow(#Window_Main,#True)
result = 0
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
Procedure ForEachModule(Proc)
Protected *MemProcessIDs, Module, PIDsCount, PIDresult, result
PIDsCount = 8
If OpenLibrary(0,"PSAPI.DLL")
*MemProcessIDs = AllocateMemory(SizeOf(LONG)*PIDsCount)
If *MemProcessIDs
Repeat
If CallFunction(0,"EnumProcesses",*MemProcessIDs,SizeOf(LONG)*PIDsCount,@PIDresult) = 0
ProcedureReturn #False
EndIf
If PIDresult >= SizeOf(LONG)*PIDsCount
PIDsCount*2
*MemProcessIDs = ReAllocateMemory(*MemProcessIDs,SizeOf(LONG)*PIDsCount)
If *MemProcessIDs = 0
ProcedureReturn #False
EndIf
Else
Break
EndIf
ForEver
For i = 0 To PIDresult/SizeOf(LONG)-1
lngHwndProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ|#PROCESS_TERMINATE, 0, PeekL(*MemProcessIDs+i*SizeOf(LONG)))
If lngHwndProcess
If CallFunction(0,"EnumProcessModules",lngHwndProcess,@Module,4,@result)
ModuleName.s = Space(#MAX_PATH)
If CallFunction(0,"GetModuleFileNameExA",lngHwndProcess, Module, ModuleName, #MAX_PATH)
CallFunctionFast(Proc,lngHwndProcess,ModuleName)
EndIf
EndIf
EndIf
Next
FreeMemory(*MemProcessIDs)
EndIf
CloseLibrary(0)
EndIf
EndProcedure
Procedure RefreshCurrentProcessList(lngHwndProcess,ModuleName.s)
AddGadgetItem(#Gadget_List_Current,-1,ModuleName)
CloseHandle_(lngHwndProcess)
EndProcedure
Procedure KILL(lngHwndProcess,ModuleName.s)
ForEach Exceptions()
If LCase(Exceptions()) = LCase(ModuleName)
CloseHandle_(lngHwndProcess)
ProcedureReturn #True
EndIf
Next
TerminateProcess_(lngHwndProcess,0)
ProcedureReturn #True
EndProcedure
Procedure KeyboardHook(idHook,wParam,lParam)
If idHook < 0
ProcedureReturn CallNextHookEx_(hHook, idHook, wParam, lParam)
Else
If (GetKeyState_(#VK_CONTROL) & $F0000000) And (GetKeyState_(#VK_MENU) & $F0000000) And (GetKeyState_(#VK_F12) & $F0000000)
Debug "KILL"
;ForEachModule(@KILL())
EndIf
ProcedureReturn CallNextHookEx_(hHook, idHook, wParam, lParam)
EndIf
EndProcedure
CatchImage(#Image_SystrayIcon,?SystrayIcon)
CreateGadgetList(OpenWindow(#Window_Main,0,0,400,200,#PB_Window_Invisible|#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget,"EasyKill"))
SetWindowCallback(@WindowCallback())
AddSysTrayIcon(0,WindowID(),ImageID())
ButtonGadget(#Gadget_Button_KILL,5,5,190,20,"KILL (Strg + F12)",#PB_Text_Center|#PB_Text_Border)
TextGadget(#Gadget_Test_Except,5,30,95,20,"Exceptions")
ButtonGadget(#Gadget_Button_Except_Add,100,28,45,20,"Add")
ButtonGadget(#Gadget_Button_Except_Del,150,28,45,20,"Del")
ListViewGadget(#Gadget_List_Except,5,50,190,145)
ButtonGadget(#Gadget_Button_Except_AddCurrent,200,5,195,20,"<-")
ListViewGadget(#Gadget_List_Current,200,30,195,165)
If ReadFile(0,"EasyKill_Exceptions.txt")
While Eof(0) = 0
AddElement(Exceptions())
Exceptions() = ReadString()
AddGadgetItem(#Gadget_List_Except,-1,Exceptions())
Wend
CloseFile(0)
EndIf
hHook = SetWindowsHookEx_(#WH_KEYBOARD_LL,@KeyboardHook(),GetModuleHandle_(0),#Null)
Repeat
Select WaitWindowEvent()
Case #PB_Event_SysTray
HideWindow(#Window_Main,#False)
ClearGadgetItemList(#Gadget_List_Current)
ForEachModule(@RefreshCurrentProcessList())
Case #PB_Event_Gadget
Select EventGadgetID()
Case #Gadget_Button_KILL
ForEachModule(@KILL())
Case #Gadget_Button_Except_AddCurrent
item = GetGadgetState(#Gadget_List_Current)
If item > -1
AddElement(Exceptions())
Exceptions() = GetGadgetItemText(#Gadget_List_Current,item,0)
AddGadgetItem(#Gadget_List_Except,-1,Exceptions())
EndIf
Case #Gadget_Button_Except_Add
FileName.s = OpenFileRequester("Choose a Module","","Executable/Dynamic Link Library|*.exe;*.dll|All Files|*",0)
If FileName
AddElement(Exceptions())
Exceptions() = FileName
AddGadgetItem(#Gadget_List_Except,-1,Exceptions())
EndIf
Case #Gadget_Button_Except_Del
item = GetGadgetState(#Gadget_List_Except)
If item > -1
ForEach Exceptions()
If Exceptions() = GetGadgetItemText(#Gadget_List_Except,item,0)
DeleteElement(Exceptions())
RemoveGadgetItem(#Gadget_List_Except,item)
Break
EndIf
Next
EndIf
EndSelect
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit
CreateFile(0,"EasyKill_Exceptions.txt")
ForEach Exceptions()
WriteStringN(Exceptions())
Next
CloseFile(0)
DataSection
SystrayIcon: IncludeBinary "C:\Purebasic full\dot_red.ico"
EndDataSection