EasyKill

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

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:

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
In Zeile 104 ist die Abfrage.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

das funzt aber:

Code: Alles auswählen

If  (GetKeyState_(#VK_MENU) & $F0000000) And (GetKeyState_(#VK_F12) & $F0000000) 
Woraus ich schlussfolgere das STRG & ALT nicht zusammen benutzt werden dürfen. :shock:
Oder?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

GetKeyState_() :? Diesen Befehl nutze ich nie, da nutze ich eher GetAsyncKeyState_()
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Dann bau es doch mal ein, ich glaube das wird nicht so funktionieren wie es soll.

@Batze: Dann muss Strg + F12 halt reichen...
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

@Deeem: Vorschlag zur Tastenkombination: benutze lieber [ALT]+[ESC]. (Falls du [ALT] nur ohne [STRG] verwenden kannst), denn [STRG]+[F12] wird auch von manchen anderen Programmen genutzt. (Frag mich nicht nach Beispielen, aber die Kombination kommt mir irgendwie verflcuht bekannt vor). [STRG]+[ESC] wäre übrigens nicht anzuraten, da diese Kombi zum Öffnen des Startmenüs (wenn deine Tastature keine [Windowsfahne]-Tasten hat) verwendet. Nur so als Vorschlag... :wink:
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Oder man kann sich einfach selbst eine aussuchen.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

STRG + F12 ist z.B. häufig gebrauchtes Tastaturkürzel für die Screenshot-Funktion in Irfanview.

Einstellbar ist schon am besten. :wink:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Gut das ihr mich dran erinnert, das wollte ich nämlich noch einbauen:

Neue Version: www.deeem2031.de/EasyKill.exe

Und für die, die es interessiert, der (inzwischen leicht unübersichtliche) SourceCode:

Code: Alles auswählen

Enumeration
  #Window_Main
  #Window_SetShortCut
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
  #Gadget_Button_SetShortCut
  
  #Gadget_Button_SetShortCut_OK
  #Gadget_Text_ShortCut
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()

Dim ShortCut.w(3)
ShortCut(0) = #VK_CONTROL
ShortCut(1) = #VK_F12
Global hHook,k
Global SetShortCut

;{VK-Description

#VK_XBUTTON1 = $05
#VK_XBUTTON2 = $06
#VK_HANGUEL = $15
#VK_SLEEP = $5F
#VK_BROWSER_BACK = $A6
#VK_BROWSER_FORWARD = $A7
#VK_BROWSER_REFRESH = $A8
#VK_BROWSER_STOP = $A9
#VK_BROWSER_SEARCH = $AA
#VK_BROWSER_FAVORITES = $AB
#VK_BROWSER_HOME = $AC
#VK_VOLUME_MUTE = $AD
#VK_VOLUME_DOWN = $AE
#VK_VOLUME_UP = $AF
#VK_MEDIA_NEXT_TRACK = $B0
#VK_MEDIA_PREV_TRACK = $B1
#VK_MEDIA_STOP = $B2
#VK_MEDIA_PLAY_PAUSE = $B3
#VK_LAUNCH_MAIL = $B4
#VK_LAUNCH_MEDIA_SELECT = $B5
#VK_LAUNCH_APP1 = $B6
#VK_LAUNCH_APP2 = $B7
#VK_OEM_1 = $BA
#VK_OEM_PLUS = $BB
#VK_OEM_COMMA = $BC
#VK_OEM_MINUS = $BD
#VK_OEM_PERIOD = $BE
#VK_OEM_2 = $BF
#VK_OEM_3 = $C0
#VK_OEM_4 = $DB
#VK_OEM_5 = $DC
#VK_OEM_6 = $DD
#VK_OEM_7 = $DE
#VK_OEM_8 = $DF
#VK_OEM_102 = $E2
#VK_PACKET = $E7
#VK_ATTN = $F6
#VK_CRSEL = $F7
#VK_EXSEL = $F8
#VK_EREOF = $F9
#VK_PLAY = $FA
#VK_ZOOM = $FB
#VK_NONAME = $FC
#VK_PA1 = $FD
#VK_OEM_CLEAR = $FE
  
                                      

Dim VK_Description.s($FE)

VK_Description(#VK_LBUTTON) = "left mouse button"
VK_Description(#VK_RBUTTON) = "right mouse button"
VK_Description(#VK_CANCEL) = "Control-Break processing"
VK_Description(#VK_MBUTTON) = "Middle mouse button (three-button mouse)"
VK_Description(#VK_XBUTTON1) = "Windows 2000/XP: x1 mouse button"
VK_Description(#VK_XBUTTON2) = "Windows 2000/XP: x2 mouse button"
VK_Description(#VK_BACK) = "BACKSPACE key"
VK_Description(#VK_TAB) = "TAB key"
VK_Description(#VK_CLEAR) = "CLEAR key"
VK_Description(#VK_RETURN) = "ENTER key"
VK_Description(#VK_SHIFT) = "SHIFT key"
VK_Description(#VK_CONTROL) = "CTRL key"
VK_Description(#VK_MENU) = "ALT key"
VK_Description(#VK_PAUSE) = "PAUSE key"
VK_Description(#VK_CAPITAL) = "CAPS LOCK key"
VK_Description(#VK_KANA) = "Input Method Editor (IME) Kana mode"
VK_Description(#VK_HANGUEL) = "IME Hanguel mode (maintained For compatibility; use #VK_HANGUL)"
VK_Description(#VK_HANGUL) = "IME Hangul mode"
VK_Description(#VK_JUNJA) = "IME Junja mode"
VK_Description(#VK_FINAL) = "IME final mode" 
VK_Description(#VK_HANJA) = "IME Hanja mode"
VK_Description(#VK_KANJI) = "IME Kanji mode"
VK_Description(#VK_ESCAPE) = "ESC key"
VK_Description(#VK_CONVERT) = "IME convert"
VK_Description(#VK_NONCONVERT) = "IME nonconvert"
VK_Description(#VK_ACCEPT) = "IME accept"
VK_Description(#VK_MODECHANGE) = "IME mode change request"
VK_Description(#VK_SPACE) = "SPACEBAR"
VK_Description(#VK_PRIOR) = "PAGE UP key"
VK_Description(#VK_NEXT) = "PAGE DOWN key"
VK_Description(#VK_END) = "End key"
VK_Description(#VK_HOME) = "HOME key"
VK_Description(#VK_LEFT) = "left ARROW key"
VK_Description(#VK_UP) = "UP ARROW key"
VK_Description(#VK_RIGHT) = "right ARROW key"
VK_Description(#VK_DOWN) = "DOWN ARROW key"
VK_Description(#VK_SELECT) = "Select key"
VK_Description(#VK_PRINT) = "PRINT key"
VK_Description(#VK_EXECUTE) = "EXECUTE key"
VK_Description(#VK_SNAPSHOT) = "PRINT SCREEN key"
VK_Description(#VK_INSERT) = "INS key"
VK_Description(#VK_DELETE) = "DEL key"
VK_Description(#VK_HELP) = "HELP key"
VK_Description(#VK_0) = "0 key" 
VK_Description(#VK_1) = "1 key"
VK_Description(#VK_2) = "2 key"
VK_Description(#VK_3) = "3 key"
VK_Description(#VK_4) = "4 key"
VK_Description(#VK_5) = "5 key"
VK_Description(#VK_6) = "6 key"
VK_Description(#VK_7) = "7 key"
VK_Description(#VK_8) = "8 key"
VK_Description(#VK_9) = "9 key"
VK_Description(#VK_A) = "A key"
VK_Description(#VK_B) = "B key"
VK_Description(#VK_C) = "C key"
VK_Description(#VK_D) = "D key"
VK_Description(#VK_E) = "E key"
VK_Description(#VK_F) = "F key"
VK_Description(#VK_G) = "G key"
VK_Description(#VK_H) = "H key"
VK_Description(#VK_I) = "I key"
VK_Description(#VK_J) = "J key"
VK_Description(#VK_K) = "K key"
VK_Description(#VK_L) = "L key"
VK_Description(#VK_M) = "M key"
VK_Description(#VK_N) = "N key"
VK_Description(#VK_O) = "O key"
VK_Description(#VK_P) = "P key"
VK_Description(#VK_Q) = "Q key"
VK_Description(#VK_R) = "R key"
VK_Description(#VK_S) = "S key"
VK_Description(#VK_T) = "T key"
VK_Description(#VK_U) = "U key"
VK_Description(#VK_V) = "V key"
VK_Description(#VK_W) = "W key"
VK_Description(#VK_X) = "X key"
VK_Description(#VK_Y) = "Y key"
VK_Description(#VK_Z) = "Z key"
VK_Description(#VK_LWIN) = "left Windows key (Microsoft® Natural® keyboard)"
VK_Description(#VK_RWIN) = "right Windows key (Natural keyboard)"
VK_Description(#VK_APPS) = "Applications key (Natural keyboard)"
VK_Description(#VK_SLEEP) = "Computer Sleep key"
VK_Description(#VK_NUMPAD0) = "Numeric keypad 0 key"
VK_Description(#VK_NUMPAD1) = "Numeric keypad 1 key"
VK_Description(#VK_NUMPAD2) = "Numeric keypad 2 key"
VK_Description(#VK_NUMPAD3) = "Numeric keypad 3 key"
VK_Description(#VK_NUMPAD4) = "Numeric keypad 4 key"
VK_Description(#VK_NUMPAD5) = "Numeric keypad 5 key"
VK_Description(#VK_NUMPAD6) = "Numeric keypad 6 key"
VK_Description(#VK_NUMPAD7) = "Numeric keypad 7 key"
VK_Description(#VK_NUMPAD8) = "Numeric keypad 8 key"
VK_Description(#VK_NUMPAD9) = "Numeric keypad 9 key"
VK_Description(#VK_MULTIPLY) = "Multiply key"
VK_Description(#VK_ADD) = "Add key"
VK_Description(#VK_SEPARATOR) = "Separator key"
VK_Description(#VK_SUBTRACT) = "Subtract key"
VK_Description(#VK_DECIMAL) = "Decimal key"
VK_Description(#VK_DIVIDE) = "Divide key"
VK_Description(#VK_F1) = "F1 key"
VK_Description(#VK_F2) = "F2 key"
VK_Description(#VK_F3) = "F3 key"
VK_Description(#VK_F4) = "F4 key"
VK_Description(#VK_F5) = "F5 key"
VK_Description(#VK_F6) = "F6 key"
VK_Description(#VK_F7) = "F7 key"
VK_Description(#VK_F8) = "F8 key"
VK_Description(#VK_F9) = "F9 key" 
VK_Description(#VK_F10) = "F10 key" 
VK_Description(#VK_F11) = "F11 key"
VK_Description(#VK_F12) = "F12 key"
VK_Description(#VK_F13) = "F13 key"
VK_Description(#VK_F14) = "F14 key"
VK_Description(#VK_F15) = "F15 key"
VK_Description(#VK_F16) = "F16 key"
VK_Description(#VK_F17) = "F17 key"
VK_Description(#VK_F18) = "F18 key"
VK_Description(#VK_F19) = "F19 key"
VK_Description(#VK_F20) = "F20 key"
VK_Description(#VK_F21) = "F21 key"
VK_Description(#VK_F22) = "F22 key"
VK_Description(#VK_F23) = "F23 key"
VK_Description(#VK_F24) = "F24 key"
VK_Description(#VK_NUMLOCK) = "NUM LOCK key"
VK_Description(#VK_SCROLL) = "SCROLL LOCK key"
VK_Description(#VK_LSHIFT) = "left SHIFT key"
VK_Description(#VK_RSHIFT) = "right SHIFT key"
VK_Description(#VK_LCONTROL) = "left Control key"
VK_Description(#VK_RCONTROL) = "right Control key"
VK_Description(#VK_LMENU) = "left MENU key"
VK_Description(#VK_RMENU) = "right MENU key"
VK_Description(#VK_BROWSER_BACK) = "Windows 2000/XP: Browser Back key"
VK_Description(#VK_BROWSER_FORWARD) = "Windows 2000/XP: Browser Forward key"
VK_Description(#VK_BROWSER_REFRESH) = "Windows 2000/XP: Browser Refresh key"
VK_Description(#VK_BROWSER_STOP) = "Windows 2000/XP: Browser Stop key"
VK_Description(#VK_BROWSER_SEARCH) = "Windows 2000/XP: Browser Search key"
VK_Description(#VK_BROWSER_FAVORITES) = "Windows 2000/XP: Browser Favorites key"
VK_Description(#VK_BROWSER_HOME) = "Windows 2000/XP: Browser Start And HOME key"
VK_Description(#VK_VOLUME_MUTE) = "Windows 2000/XP: Volume Mute key"
VK_Description(#VK_VOLUME_DOWN) = "Windows 2000/XP: Volume DOWN key"
VK_Description(#VK_VOLUME_UP) = "Windows 2000/XP: Volume UP key"
VK_Description(#VK_MEDIA_NEXT_TRACK) = "Windows 2000/XP: Next Track key"
VK_Description(#VK_MEDIA_PREV_TRACK) = "Windows 2000/XP: Previous Track key"
VK_Description(#VK_MEDIA_STOP) = "Windows 2000/XP: Stop Media key"
VK_Description(#VK_MEDIA_PLAY_PAUSE) = "Windows 2000/XP: Play/PAUSE Media key"
VK_Description(#VK_LAUNCH_MAIL) = "Windows 2000/XP: Start Mail key"
VK_Description(#VK_LAUNCH_MEDIA_SELECT) = "Windows 2000/XP: Select Media key"
VK_Description(#VK_LAUNCH_APP1) = "Windows 2000/XP: Start Application 1 key"
VK_Description(#VK_LAUNCH_APP2) = "Windows 2000/XP: Start Application 2 key"
VK_Description(#VK_OEM_1) = "Used For miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key"
VK_Description(#VK_OEM_PLUS) = "Windows 2000/XP: For any country/region, the '+' key"
VK_Description(#VK_OEM_COMMA) = "Windows 2000/XP: For any country/region, the ',' key"
VK_Description(#VK_OEM_MINUS) = "Windows 2000/XP: For any country/region, the '-' key"
VK_Description(#VK_OEM_PERIOD) = "Windows 2000/XP: For any country/region, the '.' key"
VK_Description(#VK_OEM_2) = "Used For miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key"
VK_Description(#VK_OEM_3) = "Used For miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key"
VK_Description(#VK_OEM_4) = "Used For miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key"
VK_Description(#VK_OEM_5) = "Used For miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key"
VK_Description(#VK_OEM_6) = "Used For miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key"
VK_Description(#VK_OEM_7) = "Used For miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key"
VK_Description(#VK_OEM_8) = "Used For miscellaneous characters; it can vary by keyboard."
VK_Description(#VK_OEM_102) = "Windows 2000/XP: Either the Angle bracket key Or the backslash key on the RT 102-key keyboard"
VK_Description(#VK_PROCESSKEY) = "Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME Process key"
VK_Description(#VK_PACKET) = "Windows 2000/XP: Used To pass Unicode characters as If they were keystrokes. the #VK_PACKET key is the low word of a 32-bit Virtual key Value Used For non-keyboard Input methods. For more information, see Remark In KEYBDINPUT, SendInput, WM_KEYDOWN, And WM_KEYUP"
VK_Description(#VK_ATTN) = "Attn key"
VK_Description(#VK_CRSEL) = "CrSel key"
VK_Description(#VK_EXSEL) = "ExSel key"
VK_Description(#VK_EREOF) = "Erase EOF key"
VK_Description(#VK_PLAY) = "Play key"
VK_Description(#VK_ZOOM) = "Zoom key"
VK_Description(#VK_NONAME) = "Reserved For future use"
VK_Description(#VK_PA1) = "PA1 key"
VK_Description(#VK_OEM_CLEAR) = "CLEAR key"
;}

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
      Debug PIDresult
      
      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.s GetShortCutText()
  s.s = ""
  For i = 0 To 3
    If ShortCut(i)
      s + VK_Description(ShortCut(i)) + " + "
    EndIf
  Next
  ProcedureReturn SubStr(s,0,-3)
EndProcedure

Procedure KeyboardHook(idHook,wParam,lParam)
  If idHook < 0
    ProcedureReturn CallNextHookEx_(hHook, idHook, wParam, lParam)
  Else
    If SetShortCut = #False
      If ShortCut(0) 
        For i = 0 To 3
          If ShortCut(i) = 0
            ForEachModule(@KILL())
            Break
          EndIf
          If (GetKeyState_(ShortCut(i)) & $F0000000) = 0
            Break
          ElseIf i = 3
            ForEachModule(@KILL())
          EndIf
        Next
      EndIf
    Else
      NonePressed = #True
      lk = k
      For i = 1 To $FE
        If VK_Description(i)
          If GetKeyState_(i) & $F0000000
            NonePressed = #False
            If k < 4
              For r = 0 To k-1
                If ShortCut(r) = i
                  Goto ShortCut_key_already_exist
                EndIf
              Next
              
              ShortCut(k) = i
              k + 1
              ShortCut_key_already_exist:
            EndIf
          EndIf
        EndIf
      Next
      If NonePressed
        k = 0
        For i = 0 To 3
          ShortCut(i) = 0
        Next
      ElseIf lk < k
        SetGadgetText(#Gadget_Text_ShortCut,GetShortCutText())
      EndIf
    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|#PB_Window_SizeGadget,"EasyKill"))
SetWindowCallback(@WindowCallback())
AddSysTrayIcon(0,WindowID(),ImageID())
ButtonGadget(#Gadget_Button_KILL,5,5,190,20,"",#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,95,20,"<-")
ButtonGadget(#Gadget_Button_SetShortCut,300,5,95,20,"Set ShortCut")
ListViewGadget(#Gadget_List_Current,200,30,195,165)

If ReadFile(0,"EasyKill_Exceptions.txt")
  ShortCut(0) = ReadWord()&$FF
  ShortCut(1) = ReadWord()&$FF
  ShortCut(2) = ReadWord()&$FF
  ShortCut(3) = ReadWord()&$FF
  While Eof(0) = 0
    AddElement(Exceptions())
    Exceptions() = ReadString()
    AddGadgetItem(#Gadget_List_Except,-1,Exceptions())
  Wend
  CloseFile(0)
EndIf

SetGadgetText(#Gadget_Button_KILL,"KILL ("+GetShortCutText()+")")

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
        Case #Gadget_Button_SetShortCut
          CreateGadgetList(OpenWindow(#Window_SetShortCut,0,0,200,55,#PB_Window_ScreenCentered,"Press a key",WindowID(#Window_Main)))
          TextGadget(#Gadget_Text_ShortCut,5,5,190,20,GetShortCutText(),#PB_Text_Center)
          ButtonGadget(#Gadget_Button_SetShortCut_OK,70,30,60,20,"OK")
          SetShortCut = #True
        Case #Gadget_Button_SetShortCut_OK
          SetGadgetText(#Gadget_Button_KILL,"KILL ("+GetShortCutText()+")")
          CloseWindow(#Window_SetShortCut)
          SetShortCut = #False
      EndSelect
    Case #PB_Event_SizeWindow
      UseWindow(#Window_Main)
      W_W = WindowWidth()
      W_H = WindowHeight()
      ResizeGadget(#Gadget_Button_KILL,5,5,W_W/2-10,20)
      ResizeGadget(#Gadget_Test_Except,5,30,W_W/4-5,20)
      ResizeGadget(#Gadget_Button_Except_Add,W_W/4,28,W_W/8-5,20)
      ResizeGadget(#Gadget_Button_Except_Del,W_W/4+W_W/8,28,W_W/8-5,20)
      ResizeGadget(#Gadget_List_Except,5,50,W_W/2-10,W_H-55)
      ResizeGadget(#Gadget_Button_Except_AddCurrent,W_W/2,5,W_W/4-5,20)
      ResizeGadget(#Gadget_Button_SetShortCut,W_W/2+W_W/4,5,W_W/4-5,20)
      ResizeGadget(#Gadget_List_Current,W_W/2,30,W_W/2-5,W_H-35)
    Case #PB_Event_CloseWindow
      quit = 1
  EndSelect
Until quit

CreateFile(0,"EasyKill_Exceptions.txt")
WriteWord(ShortCut(0))
WriteWord(ShortCut(1))
WriteWord(ShortCut(2))
WriteWord(ShortCut(3))
ForEach Exceptions()
  WriteStringN(Exceptions())
Next
CloseFile(0)

DataSection
SystrayIcon: IncludeBinary "C:\Purebasic full\dot_red.ico"
EndDataSection
Die Beschreibung der Tasten hab ich aus dem PSDK geklaut, also bitte keine Beschwerden das die zu lang für die Felder sind ;)
Zuletzt geändert von Deeem2031 am 28.06.2005 02:15, insgesamt 1-mal geändert.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Was mich ein bisschen stört ist, dass man den Pfad und den EXE-Dateinamen der Programm nicht alle sieht. Das ListView ist dafür nicht breit genug.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Ok, neue Version: http://www.deeem2031.de/EasyKill.exe

Jetzt kann man das Fenster größer/kleiner machen. Zuerst hab ich zwar versucht eine Scrollbar in das ListViewGadget zu bekommen aber Windows machte da irgendwie nicht mit...
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten