PBOSL PB Libraries ab 4.30 nurnoch Includes

Ankündigungen PureBasic oder die Community betreffend.
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Beitrag von Rings »

bobobo hat geschrieben:Meine Anfrage bezog sich allerdings mehr auf die offizielle PBOSL-Seite ..
hier wird angekündigt (und auch gemacht) und da ? .. nix zu sehen außer
dem alten Zeug.
Rings hat geschrieben:...Da aber die Mithilfe an einer Portierung nach 4.3 so in etwa
gegen NULL geht, ist das PBOSL Projekt meiner Meinung
nach gestorben, Zeitpunkt ist version 4.2
'Free' heisst für mich (und da sprech ich sicher auch für
DarkDragon) allerdings nicht das ich meine
freie Zeit weiterhin opfere(...) .
Die Sourcen sind da.
Es scheint aber keinen mehr zu interessieren.

PBOSL, R.I.P.
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

ja .. klar .. logisch

es soll sich da niemand zu nix verpflichtet fühlen.

wäre halt nur schade um den eigentlich guten Ansatz.

aber das wäre ja nicht das erste Projekt was gut angefangen und dann
recht gut auch wieder eingeschlafen ist. ruhe es sanft wenn es denn so
sein soll. Immerhin haben "wir" den Source. :D
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

@rings

Beitrag von stab »

Danke nochmal an alle für die PBOSL.
Das Für und Wieder der UserLibs verfolge ich hier auch und lese auch Kommentare wie "UserLibs sind doch Scheiße. Muss man nach Versionsänderungen alles wieder neu machen. Besser schnell selbst programmieren." usw.. Mir haben die Libs auf jeden Fall schon einige Zeilen Programmierarbeit erspart und Tatsache ist ja, nach Versionänderungen muss man sowie einiges wieder umbauen.

Kurz zu der Include:
Bei mir wurde ein Problem festgestellt und ich soll dieses Problem bitte auch an Microsoft berichten.
Das tue ich erstmal nicht, wahrscheinlich liegt das Problem ja bei mir.

Jedenfalls schmerzlich vermisse ich jetzt nach Umstieg auf 4.30 aus PBOSL: KillAllProcess(LName.s, ExitCode)

Dazu habe ich mir jetzt vorhanden Code geklaut und mir was gebastelt.
Vielleicht braucht es so ja jemand:

Code: Alles auswählen


; PB 4.30
; Remove multiple processes without GUI...

#PROCESS_TERMINATE = $1
#PROCESS32LIB = 9999
#TH32CS_SNAPPROCESS = $2

Procedure KillAllProcessesByName(ProcessName.s)
  If OpenLibrary (#PROCESS32LIB, "kernel32.dll")
    snap= CallFunction (#PROCESS32LIB, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0)
    If snap 
      Define.PROCESSENTRY32 Proc32
      Proc32\dwSize = SizeOf (PROCESSENTRY32)
      If CallFunction (#PROCESS32LIB, "Process32First", snap, @Proc32) 
        Repeat
          If PeekS(@Proc32 + 36, 296) = ProcessName.s 
            phandle = OpenProcess_ (#PROCESS_TERMINATE, #False, PeekL(@Proc32 + 8))
            If phandle <> #Null
              If TerminateProcess_ (phandle, 1)
              result = #True:  EndIf
              CloseHandle_ (phandle)
            EndIf
          EndIf
        Until CallFunction (#PROCESS32LIB, "Process32Next", snap, @Proc32) = 0
      EndIf
      CloseHandle_ (snap)
    EndIf
    CloseLibrary (#PROCESS32LIB)
  EndIf
EndProcedure

KillAllProcessesByName("calc.exe")

End

Gruß stab
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Re: @rings

Beitrag von Rings »

stab hat geschrieben:Kurz zu der Include:
Bei mir wurde ein Problem festgestellt und ich soll dieses Problem bitte auch an Microsoft berichten.
Das tue ich erstmal nicht, wahrscheinlich liegt das Problem ja bei mir.

Jedenfalls schmerzlich vermisse ich jetzt nach Umstieg auf 4.30 aus PBOSL: KillAllProcess(LName.s, ExitCode)
Danke für die hilfreiche Fehlermeldung.
Wäre es möglich einmal den das Problem näher zu schildern ?
(Kurzer source, vorgehensweise,Debugger einschalten ,Onerror aktivieren)
Rings hat geschrieben:ziert sich nich beim zitieren
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Bei mir sagt der Debugger in der Zeile 257 bei einem klick auf den "Refresh"-Button:
>> Invalid Memory Access. (Read error at address 0)
Also ist vermutlich PBOSL_EnumProcessModulesEx 0.

Windows XP Home SP3 - x86
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
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

@rings

Beitrag von stab »

Ja, so wie bei mir.

Refresh ergibt Invalid Memory Access

> Zeile 257

Result=PBOSL_EnumProcessModulesEx(hProcess, .........

XPP SP3
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Beitrag von Rings »

okay, kann ich nachvollziehen....
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hab mal eine der C-Libs gefixed, die anderen sollten eigentlich ohne
Änderungen noch lauffähig sein:
PBOSL_AnimSprite
Hab nur die Desc Datei angepaßt, source und bin für windows ist bei.

Der Download steht nur kurzfristig zur Verfügung, bis sich mit PBOSL was
getan oder auch nicht hat :mrgreen:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Kann jemand mal das nachvollziehen auf XP -32
Ich krieg den Fehler erst beim 2. refresh und
dann beim löschen des treegadget-Inhaltes.
Gibt irgendwie keinen Sinn das ganze.
Kein Threadsicher oder unicode aktiviert.

Den anderen Fehler bei der APi habe ich abgefangen.

Code: Alles auswählen

;PBOSSL Process libary 4.3  x Include
;Rework by Siegfried Rings
;Original by Siegfried Rings
;added Functions by Siegfried Rings
; -GetProcessPIDperName
;License:

;EnableExplicit

;We Define some Prototypes
Prototype Prototype_PBOSL_EnumProcesses(ProcessesArrayMem.i, NbProcessesMax.i, nProcesses.i)
Prototype Prototype_PBOSL_EnumProcessModulesEx(hProcess.i, BaseModule.i, Lenghth.i, cbNeeded.l,dwFilterFlag.l)
Prototype Prototype_PBOSL_EnumProcessModules(hProcess.i, BaseModule.i, Lenghth.i, cbNeeded.l)
Prototype Prototype_PBOSL_GetProcessMemoryInfo(hProcess.i,tPMC.l, SizeOf_tPMC.l)
Prototype Prototype_PBOSL_EmptyWorkingSet(hProcess.i)

Prototype Prototype_PBOSL_GetModuleBaseName(hProcess.i, BaseModule.i, Name.i, LenName.i)
Prototype Prototype_PBOSL_GetModuleFileName(hProcess.i, BaseModule.i, Name.i, LenName.i)
Prototype Prototype_PBOSL_GetModuleInformation(hProcess.i,BaseModule.i,lpModuleInfo,dwSize )

Prototype Prototype_PBOSL_GetExtendedTcpTable(MIB_TCPTABLE , dwSize, a,b,c,d)
Prototype Prototype_PBOSL_GetExtendedUdpTable(MIB_TCPTABLE , dwSize, a,b,c,d)


Global PBOSL_Process_Library.i
Global PBOSL_EnumProcesses.Prototype_PBOSL_EnumProcesses
Global PBOSL_EnumProcessModules.Prototype_PBOSL_EnumProcessModules
Global PBOSL_EnumProcessModulesEx.Prototype_PBOSL_EnumProcessModulesEx
Global PBOSL_GetModuleBaseName.Prototype_PBOSL_GetModuleBaseName
Global PBOSL_GetModuleFileName.Prototype_PBOSL_GetModuleFileName
Global PBOSL_GetProcessMemoryInfo.Prototype_PBOSL_GetProcessMemoryInfo
Global PBOSL_GetModuleInformation.Prototype_PBOSL_GetModuleInformation
Global PBOSL_EmptyWorkingSet.Prototype_PBOSL_EmptyWorkingSet

Global PBOSL_ProcessesArrayMem.i
Global PBOSL_ProcessesArrayModuleMem.i


Prototype Prototype_OpenThread(dwDesiredAccess.l,bInheritHandle.l,dwThreadId.l)
Global OpenThread_.Prototype_OpenThread


Global PBOSL_DriverMem.i
Global PBOSL_DLLMemModule.i
Global PBOSL_nProcessesZeiger.i

#PBOSL_NbProcessesMax=1024

Structure PROCESS_MEMORY_COUNTERS
   cb.l
   PageFaultCount.l
   PeakWorkingSetSize.i
   WorkingSetSize.i
   QuotaPeakPagedPoolUsage.i
   QuotaPagedPoolUsage.i
   QuotaPeakNonPagedPoolUsage.i
   QuotaNonPagedPoolUsage.i
   PageFileUsage.i
   PeakPagefileUsage.i
EndStructure


Structure PBOSL_ProcessesStruct
 PID.i
 Name.s
 Filename.s
 Memory.PROCESS_MEMORY_COUNTERS
EndStructure

Structure ModuleInformation ;Api definition
  lpBaseOfDll.i
  SizeOfImage.i;
  EntryPoint.i
EndStructure

Structure PBOSL_ModuleStruct
  FileName.s
  ModuleInformation.ModuleInformation
EndStructure


Structure thread32
 size.l
 use.l
 idth.l
 parentid.l
 base.l
 delta.l
 flags.l
EndStructure
#TH32CS_SNAPTHREAD=4
#THREAD_SUSPEND_RESUME=2

Procedure.s PBOSL_DebugApiError(el.l)
  Protected Nop.s
  Nop=Space(1024)
  FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0, el,0,@Nop.s,1024,0)
  ProcedureReturn Hex(el)+":"+Nop.s         
EndProcedure

Procedure PBOSL_Process_Init()

CompilerSelect #PB_Compiler_OS
 CompilerCase #PB_OS_Windows
 CompilerDefault
  MessageRequester("Info","Not supported OS for PBOSL_Process_Library",0)
  End
CompilerEndSelect

 
;#PB_Compiler_Processor = #PB_Processor_x86

kernel32dll=OpenLibrary(#PB_Any,"kernel32.dll")
OpenThread_=GetFunction(kernel32dll,"OpenThread") ;Should always work !!

PBOSL_Process_Library=OpenLibrary(#PB_Any,"psapi.dll")

If PBOSL_Process_Library
 PBOSL_EnumProcesses= GetFunction(PBOSL_Process_Library, "EnumProcesses")
 ;Debug PBOSL_EnumProcesses
 
 PBOSL_EnumProcessModules = GetFunction(PBOSL_Process_Library, "EnumProcessModules")
 PBOSL_EnumProcessModulesEx = GetFunction(PBOSL_Process_Library, "EnumProcessModulesEx")
 PBOSL_GetProcessMemoryInfo= GetFunction(PBOSL_Process_Library, "GetProcessMemoryInfo")
 PBOSL_GetModuleInformation=GetFunction(PBOSL_Process_Library, "GetModuleInformation")
 PBOSL_EmptyWorkingSet=GetFunction(PBOSL_Process_Library, "EmptyWorkingSet")
 ;EnumDeviceDrivers= GetProcAddress_(PSAPI, "EnumDeviceDrivers")

 If  #PB_Compiler_Unicode=0
  PBOSL_GetModuleBaseName  = GetFunction(PBOSL_Process_Library, "GetModuleBaseNameA")
  PBOSL_GetModuleFileName  = GetFunction(PBOSL_Process_Library, "GetModuleFileNameExA")
  ;Debug PBOSL_GetModuleFileName
  ;PBOSL_GetDeviceDriversBaseName= GetProcAddress_(PSAPI, "GetDeviceDriverBaseNameA")
 ; GetDeviceDriversFileName= GetProcAddress_(PSAPI, "GetDeviceDriverFileNameA")
 Else
  ;UniCode Mode
  PBOSL_GetModuleBaseName  = GetFunction(PBOSL_Process_Library, "GetModuleBaseNameW")
  PBOSL_GetModuleFileName  = GetFunction(PBOSL_Process_Library, "GetModuleFileNameExW")
;   GetDeviceDriversBaseName= GetProcAddress_(PSAPI, "GetDeviceDriverBaseNameW")
;   GetDeviceDriversFileName= GetProcAddress_(PSAPI, "GetDeviceDriverFileNameW")
  EndIf

;GetDeviceDriverBaseName Lib "psapi.dll" Alias "GetDeviceDriverBaseName" (ImageBase As Any, ByVal lpBaseName As String, ByVal nSize As Long )
;EnumDeviceDrivers Lib "PSAPI.DLL" (lpImageBase() As Long,ByVal cb As Long , lpcbNeeded As Long

 ;reserve some memory

; PBOSL_DriverMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
; PBOSL_DLLMemModule=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
 ;ProcedureReturn PSAPI
 ProcedureReturn PBOSL_Process_Library
Else
 ;Cannot load Library ???
 ProcedureReturn 0
 PBOSL_ProcessesArrayMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
 PBOSL_DriverMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
 PBOSL_DLLMemModule=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)

EndIf
EndProcedure

Procedure PBOSL_Process_End()
If PBOSL_DriverMem
 GlobalFree_(PBOSL_DriverMem)
EndIf
If PBOSL_DLLMemModule
 GlobalFree_(PBOSL_DLLMemModule)
EndIf
If PBOSL_Process_Library
 FreeLibrary_(PBOSL_Process_Library)
EndIf
EndProcedure

Structure myTOKEN_PRIVILEGES
 PrivilegeCount.l
 TheLuid.LUID
 Attributes.l
EndStructure

Procedure SetRights(rightsname.s)
 Define tLuid.LUID
 Define tTokenPriv.myTOKEN_PRIVILEGES
 Define tTokenPrivNew.myTOKEN_PRIVILEGES
 Define lBufferNeeded.l

 ;#PROCESS_ALL_ACCESS = $1F0FFF
 #PROCESS_TERMINAT = $1
 #ANYSIZE_ARRAY = 1
 #TOKEN_ADJUST_PRIVILEGES = $20
 #TOKEN_QUERY = $8
 SE_DEBUG_NAME.s = rightsname.s
 #SE_PRIVILEGE_ENABLED = $2
 lhThisProc = GetCurrentProcess_()
 
 res=OpenProcessToken_(lhThisProc, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @lhTokenHandle)
 res=LookupPrivilegeValue_("", SE_DEBUG_NAME.s, tLuid)

 ;Set the number of privileges to be change
 tTokenPriv\PrivilegeCount = 1
 tTokenPriv\TheLuid\LowPart = tLuid\LowPart
 tTokenPriv\TheLuid\HighPart = tLuid\HighPart

 tTokenPriv\Attributes = #SE_PRIVILEGE_ENABLED

 ;Enable the kill privilege in the access token of this process
 res=AdjustTokenPrivileges_(lhTokenHandle, 0, tTokenPriv, SizeOf(tTokenPrivNew), tTokenPrivNew, @lBufferNeeded)
EndProcedure


ProcedureDLL.i ExamineProcesses(List PBOSL_ProcessList.PBOSL_ProcessesStruct());take a snapshot and examine processes, fill linkedlist
 Protected nProcesses.i
 SetRights("SeDebugPrivilege")
 PBOSL_ProcessesArrayMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
 PBOSL_ProcessesArrayModuleMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
 
 PBOSL_EnumProcesses(PBOSL_ProcessesArrayMem, #PBOSL_NbProcessesMax, @nProcesses.i)
 
 ClearList(PBOSL_ProcessList())
 ;Debug "Anzahl Processe ="+Str(nProcesses)
 If nProcesses/4> 0
  nProcesses=nProcesses/4;SizeOf(Integer)
  Protected iTemp.i
  Protected *L1.LONG
  For iTemp=1 To nProcesses
   ;now fill the LinkedList
    AddElement(PBOSL_ProcessList())
   
   
   Protected tPID.l
   tPID=PeekL(PBOSL_ProcessesArrayMem+(iTemp-1)*4)
   
   If tPID=0
    PBOSL_ProcessList()\Name="IDLE"
    PBOSL_ProcessList()\PID=0
   
   Else
    Protected hProcess.i
    PBOSL_ProcessList()\PID=tPID
    ;SetRights("SeDebugPrivilege")
    hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, 0, tPID)
    If hProcess
     Protected Result.i
     Protected BaseModule.i
     Protected cbNeeded.i
     #LIST_MODULES_32BIT=$01 ;List the 32-bit modules.
     #LIST_MODULES_64BIT=$02 ;List the 64-bit modules.
     #LIST_MODULES_ALL=$03 ;List all modules.
     #LIST_MODULES_DEFAULT=$0 ;Use the Default behavior.
    
     Dim BaseModule.i(#PBOSL_NbProcessesMax)
     If  PBOSL_EnumProcessModulesEx =0 
      Result=PBOSL_EnumProcessModules(hProcess, PBOSL_ProcessesArrayModuleMem, 4, @cbNeeded)
     Else
      Result=PBOSL_EnumProcessModulesEx(hProcess, PBOSL_ProcessesArrayModuleMem, #PBOSL_NbProcessesMax*4, @cbNeeded, #LIST_MODULES_ALL)
     EndIf
     ;Debug "cbNeeded="+Str(cbNeeded)
     If Result<>0
      ;Debug Str(PeekI(PBOSL_ProcessesArrayModuleMem))+"#"+Str(cbNeeded)
      Protected Name$
      Name$ = Space(255)
      Result=PBOSL_GetModuleBaseName(hProcess, PeekI(PBOSL_ProcessesArrayModuleMem), @Name$, Len(Name$))
      If Name$="?"
       PBOSL_ProcessList()\Name="System"
      Else
       PBOSL_ProcessList()\Name=Name$
      EndIf
      Name$=Space(512)
      Result=PBOSL_GetModuleFileName(hProcess, PeekI(PBOSL_ProcessesArrayModuleMem), @Name$, Len(Name$))
      If result=0:Debug "Error GetModuleFileName: " + PBOSL_DebugApiError(GetLastError_()) :EndIf

      PBOSL_ProcessList()\FileName=Name$
      PBOSL_ProcessList()\Memory\cb=SizeOf(PROCESS_MEMORY_COUNTERS )
      Result=PBOSL_GetProcessMemoryInfo(hProcess, PBOSL_ProcessList()\Memory, SizeOf(PROCESS_MEMORY_COUNTERS ))
      If result=0:Debug "Error memoryInfo: " + PBOSL_DebugApiError(GetLastError_()) :EndIf

     
;       If cbNeeded/4>0
;         cbNeeded=cbNeeded/4
;         ;Debug "Anzahl Module="+Str(cbNeeded)
;         Define I.i
;         For I=1 To cbneeded
;          Name$ = Space(255)
;          Result=PBOSL_GetModuleFileName(hProcess, PeekI(PBOSL_ProcessesArrayModuleMem + (I-1)*4), @Name$, Len(Name$))
;         ; Debug "innedrin isses=" +name$
;         Next I
;       EndIf
     
     Else
      ;Debug "ResultEnumProcessModules="+Hex(result)
     EndIf   
     CloseHandle_(hProcess)
    Else
     PBOSL_ProcessList()\Name="cannot open Process"
     PBOSL_ProcessList()\FileName=""
    EndIf
   EndIf     
  Next
 EndIf
 
 If PBOSL_ProcessesArrayMem ;release memory
  GlobalFree_(PBOSL_ProcessesArrayMem)
 EndIf
 If PBOSL_ProcessesArrayModuleMem
  GlobalFree_(PBOSL_ProcessesArrayModuleMem)
 EndIf
 
 ProcedureReturn nProcesses
EndProcedure


ProcedureDLL ExamineProcessDLLS(PID,List PBOSL_ModuleList.PBOSL_ModuleStruct());Examine all DLL's of a process
 hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, 0, PID)
 If hProcess
     Protected Result.i
     Protected BaseModule.i
     Protected cbNeeded.i
     #LIST_MODULES_32BIT=$01 ;List the 32-bit modules.
     #LIST_MODULES_64BIT=$02 ;List the 64-bit modules.
     #LIST_MODULES_ALL=$03 ;List all modules.
     #LIST_MODULES_DEFAULT=$0 ;Use the Default behavior.
     
     ;ok, below Vista the Ex Function is not there
     If OSVersion()< #PB_OS_Windows_Vista
      Result=PBOSL_EnumProcessModules(hProcess, PBOSL_ProcessesArrayModuleMem, #PBOSL_NbProcessesMax*4, @cbNeeded)
     Else
      Result=PBOSL_EnumProcessModulesEx(hProcess, PBOSL_ProcessesArrayModuleMem, #PBOSL_NbProcessesMax*4, @cbNeeded, #LIST_MODULES_ALL)
     EndIf
     If Result<>0
      If cbNeeded/4>0
        ClearList( PBOSL_ModuleList())
        MyStep=SizeOf(Integer)
       
        cbNeeded=cbNeeded/MyStep
        Define I.i
        ; CompilerIf #PB_Compiler_Processor =:#PB_Processor_x86
       
        For I=1 To cbneeded
         Name$ = Space(512)
         
         Base.i=PeekI(PBOSL_ProcessesArrayModuleMem + (I-1)*MyStep)
         Result=PBOSL_GetModuleFileName(hProcess, Base, @Name$, Len(Name$))
         If result=0:Debug "Error ModuleFilename: " + PBOSL_DebugApiError(GetLastError_()) :EndIf
     
         If Trim(Name$)<>""
          AddElement(PBOSL_ModuleList())
          PBOSL_ModuleList()\FileName=Name$
          Result=PBOSL_GetModuleInformation(hProcess, Base,PBOSL_ModuleList()\ModuleInformation,SizeOf(ModuleInformation) )
          If result=0:Debug "Error ModuleInformation: " + PBOSL_DebugApiError(GetLastError_()) :EndIf
         EndIf
        ; Debug "innedrin isses=" +name$
        Next I
      EndIf
     EndIf
  CloseHandle_(hProcess)
  ProcedureReturn cbNeeded
 EndIf
EndProcedure


ProcedureDLL ReArrangeMem(PID)
 SetRights("SeDebugPrivilege")
 hProcess = OpenProcess_(#PROCESS_ALL_ACCESS  , 0, PID)
 If hProcess
  PBOSL_EmptyWorkingSet(hProcess)
  SetProcessWorkingSetSize_(hProcess, -1, -1)
  CloseHandle_(hProcess)
 EndIf
EndProcedure

ProcedureDLL RemovePagefaults(PID);remove unneded memory from Process
 hProcess = OpenProcess_(#PROCESS_ALL_ACCESS  , 0, PID)
 If hProcess
  Result=CallFunctionFast(EmptyWorkingSet, hProcess)
  CloseHandle_(hProcess)
  If Result=0:Debug "Error RemovePageFaults: " + PBOSL_DebugApiError(GetLastError_()):EndIf
  ProcedureReturn Result
 Else
  ProcedureReturn -2
 EndIf
EndProcedure

Procedure GetOwnPID()
 ProcedureReturn GetCurrentProcess_()
EndProcedure

ProcedureDLL GetProcessPIDfromHWND(hwnd);Get a PID from the window handle (hwnd)
 Result=GetWindowThreadProcessId_ (hwnd, @PID)
 ProcedureReturn PID
EndProcedure


ProcedureDLL KillPID(PID,ExitCode);exit the process with Exitcode
  SetRights("SeDebugPrivilege")
  hProcess = OpenProcess_(#PROCESS_TERMINAT, 0, PID)
  If hProcess
    Result=TerminateProcess_(hProcess,ExitCode)
    CloseHandle_(hProcess)
    ProcedureReturn Result
  EndIf
EndProcedure

ProcedureDLL KillAllProcess(LName.s,ExitCode);exit all processes with Name with Exitcode
 SetRights("SeDebugPrivilege")
 NewList priv_ProcessList.PBOSL_ProcessesStruct()
 Protected c1.l
 Protected c2.l
 c1.l=ExamineProcesses(priv_ProcessList())
 If c1
  ForEach priv_ProcessList()
   If LCase(priv_ProcessList()\Name )=LCase(LName)
    If KillPID(priv_ProcessList()\PID,ExitCode)
     c2+1
    EndIf
   EndIf
  Next
 EndIf
ProcedureReturn c2
EndProcedure

ProcedureDLL PauseProcess(PID)
thread.thread32
snap = CreateToolhelp32Snapshot_(#TH32CS_SNAPTHREAD,0)
If snap
 thread\size=SizeOf(thread32)
 Thread32First_(snap,@thread)
 If thread\parentid=PID
  h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
  SuspendThread_(h)
  CloseHandle_(h)
 EndIf
 While Thread32Next_(snap,@thread)
  If thread\parentid=PID
   h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
   SuspendThread_(h)
   CloseHandle_(h)
   success=1
  EndIf
 Wend
EndIf
ProcedureReturn success
EndProcedure


ProcedureDLL ResumeProcess(PID)
thread.thread32
snap = CreateToolhelp32Snapshot_(#TH32CS_SNAPTHREAD,0)
If snap
 thread\size=SizeOf(thread32)
 Thread32First_(snap,@thread)
 If thread\parentid=PID
   h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
   ResumeThread_(h)
   CloseHandle_(h)
 EndIf
 While Thread32Next_(snap,@thread)
  If thread\parentid=PID
   h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
   ResumeThread_(h)
   CloseHandle_(h)
   success=1
  EndIf
 Wend
EndIf
ProcedureReturn success
EndProcedure

ProcedureDLL GetProcessPrio(PID);get the priority of the process
 hProcess.i = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, 0, PID)
 If hProcess
  prio=GetPriorityClass_(hProcess)
  CloseHandle_(hProcess)
  ProcedureReturn prio
 EndIf
EndProcedure

ProcedureDLL SetProcessPrio(PID,Priority);sets the priority of the process
SetRights("SeIncreaseBasePriorityPrivilege")

 hProcess.i = OpenProcess_(#PROCESS_SET_INFORMATION , 1, PID)
 If hProcess
  prio=SetPriorityClass_(hProcess,Priority)
  CloseHandle_(hProcess)
  ProcedureReturn prio
 EndIf
EndProcedure



Structure ConnectionTable
  PID.l
  State.l
  LocalIP.s
  LocalPort.l
  RemoteIP.s
  RemotePort.l
EndStructure


#AF_INET = 2 ;IPV4
#AF_INET6 = 23 ;IPV6

#TCP_TABLE_BASIC_LISTENER = 0
#TCP_TABLE_BASIC_CONNECTIONS = 1
#TCP_TABLE_BASIC_ALL = 2
#TCP_TABLE_OWNER_PID_LISTENER = 3
#TCP_TABLE_OWNER_PID_CONNECTIONS = 4
#TCP_TABLE_OWNER_PID_ALL = 5
#TCP_TABLE_OWNER_MODULE_LISTENER = 6
#TCP_TABLE_OWNER_MODULE_CONNECTIONS = 7
#TCP_TABLE_OWNER_MODULE_ALL = 8

#UDP_TABLE_BASIC = 0
#UDP_TABLE_OWNER_PID = 1
#UDP_TABLE_OWNER_MODULE = 0


Structure MIB_TCPTABLE_OWNER_PID
  dwStats.l
  dwLocalAddr.l
  dwLocalPort.l
  dwRemoteAddr.l
  dwRemotePort.l
  dwOwningPid.l
EndStructure
 Structure MIB_TCPTABLE
  dwNumEntries.l
  table.MIB_TCPTABLE_OWNER_PID[2048]
 EndStructure
 Structure MIB_UDPTABLE_OWNER_PID
  dwLocalAddr.l
  dwLocalPort.l
  dwOwningPid.l
 EndStructure
 Structure MIB_UDPTABLE
  dwNumEntries.l
  table.MIB_UDPTABLE_OWNER_PID[2048]
 EndStructure

Procedure GetConnectionFromPID(PID,List ConnectionTable.ConnectionTable())
Protected cc.l

PBOSL_GetExtendedTcpTable.Prototype_PBOSL_GetExtendedTcpTable
PBOSL_GetExtendedUdpTable.Prototype_PBOSL_GetExtendedUdpTable
iphlpapi.i=OpenLibrary(#PB_Any, "iphlpapi.dll")
If iphlpapi
    PBOSL_GetExtendedTcpTable=GetFunction(iphlpapi,"GetExtendedTcpTable")
    PBOSL_GetExtendedUdpTable=GetFunction(iphlpapi,"GetExtendedUdpTable")

    ClearList(ConnectionTable())
    dwSize = $0
    If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0)   
    If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0) = #NO_ERROR
        For cnt = 0 To tcpTable\dwNumEntries - 1
         If tcpTable\table[cnt]\dwOwningPid=PID
            cc+1
            AddElement(ConnectionTable())
            ConnectionTable()\State=tcpTable\table[cnt]\dwStats
            ConnectionTable()\LocalIP=IPString(tcpTable\table[cnt]\dwLocalAddr)
            ConnectionTable()\LocalPort=htons_(tcpTable\table[cnt]\dwLocalPort)
            ConnectionTable()\RemoteIP=IPString(tcpTable\table[cnt]\dwRemoteAddr)
            ConnectionTable()\RemotePort=htons_(tcpTable\table[cnt]\dwRemotePort)
         EndIf
        Next
    EndIf
    EndIf
   
     dwSize = $0
     If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0)
     If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0) = #NO_ERROR
         For cnt = 0 To udpTable\dwNumEntries - 1
          If udpTable\table[cnt]\dwOwningPid=PID
            cc+1
            AddElement(ConnectionTable())
            ConnectionTable()\State=t-1
            ConnectionTable()\LocalIP= IPString(udpTable\table[cnt]\dwLocalAddr)
            ConnectionTable()\LocalPort=htons_(udpTable\table[cnt]\dwLocalPort)
          EndIf
         Next
    EndIf
    EndIf
;     
    CloseLibrary(iphlpapi)
EndIf
ProcedureReturn cc
EndProcedure

Procedure GetConnections(List ConnectionTable.ConnectionTable())
Protected cc.l
PBOSL_GetExtendedTcpTable.Prototype_PBOSL_GetExtendedTcpTable
PBOSL_GetExtendedUdpTable.Prototype_PBOSL_GetExtendedUdpTable
iphlpapi.i=OpenLibrary(#PB_Any, "iphlpapi.dll")
If iphlpapi
    PBOSL_GetExtendedTcpTable=GetFunction(iphlpapi,"GetExtendedTcpTable")
    PBOSL_GetExtendedUdpTable=GetFunction(iphlpapi,"GetExtendedUdpTable")

    ClearList(ConnectionTable())
    dwSize = $0
    If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0)   
    If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0) = #NO_ERROR
        For cnt = 0 To tcpTable\dwNumEntries - 1
            AddElement(ConnectionTable())
            cc+1
            ConnectionTable()\PID=tcpTable\table[cnt]\dwOwningPid
            ConnectionTable()\State=tcpTable\table[cnt]\dwStats
            ConnectionTable()\LocalIP=IPString(tcpTable\table[cnt]\dwLocalAddr)
            ConnectionTable()\LocalPort=htons_(tcpTable\table[cnt]\dwLocalPort)
            ConnectionTable()\RemoteIP=IPString(tcpTable\table[cnt]\dwRemoteAddr)
            ConnectionTable()\RemotePort=htons_(tcpTable\table[cnt]\dwRemotePort)
        Next
    EndIf
    EndIf
   
     dwSize = $0
     If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0)
     If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0) = #NO_ERROR
         For cnt = 0 To udpTable\dwNumEntries - 1
            cc+1
            AddElement(ConnectionTable())
            ConnectionTable()\PID=udpTable\table[cnt]\ dwOwningPid
            ConnectionTable()\State=t-1
            ConnectionTable()\LocalIP= IPString(udpTable\table[cnt]\dwLocalAddr)
            ConnectionTable()\LocalPort=htons_(udpTable\table[cnt]\dwLocalPort)
         Next
    EndIf
    EndIf
;     
    CloseLibrary(iphlpapi)
EndIf
ProcedureReturn cc
EndProcedure

ProcedureDLL pPeekL(handle,addr);get a Long from the process with Offset
SetRights("SeDebugPrivilege")
 hProcess = OpenProcess_(#PROCESS_VM_READ, 0, handle)
 If hProcess
  ReadProcessMemory_(hProcess,addr,@res,4,0)
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure

ProcedureDLL.w pPeekW(handle,addr);get a word from the process with Offset
SetRights("SeDebugPrivilege")
 hProcess = OpenProcess_(#PROCESS_VM_READ, 0, handle)
 If hProcess
  ReadProcessMemory_(hProcess,addr,@res.w,2,0)
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure

ProcedureDLL.b pPeekB(handle,addr);get a Byte from the process with Offset
SetRights("SeDebugPrivilege")
 hProcess = OpenProcess_(#PROCESS_VM_READ  , 0, handle)
 If hProcess
  ReadProcessMemory_(hProcess,addr,@res.b,1,0)
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure

ProcedureDLL.s pPeekS(handle,addr);get a String from the process with Offset
SetRights("SeDebugPrivilege")
 hProcess = OpenProcess_(#PROCESS_VM_READ , 0, handle)
 If hProcess
  res.s=""
  Repeat
    ReadProcessMemory_(hProcess,addr,@res2.b,1,0)
    res+Chr(res2.b & $FF)
    addr+1
  Until byte=0
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure

ProcedureDLL pReadMemory(handle,addr, DestinationMemoryID, Length);copys Data from the process with Offset to own Process Destinationmemory
SetRights("SeDebugPrivilege")
 hProcess = OpenProcess_(#PROCESS_VM_READ, 0, handle)
 If hProcess
  ReadProcessMemory_(hProcess,addr,DestinationMemoryID,Length,0)
  CloseHandle_(hProcess)
 EndIf
EndProcedure

ProcedureDLL pPokeL(handle,addr,value);Writes a Long to the process with Offset
 hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
 If hProcess 
  OrigMode=1
  Mode=#PAGE_EXECUTE_READWRITE
  VirtualProtectEx_(hProcess,addr,4,Mode,@OrigMode)
  res=WriteProcessMemory_(hProcess,addr,@value,4,0)
  VirtualProtectEx_(hProcess,addr,4,OrigMode,@Mode)
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure

ProcedureDLL pPokeW(handle,addr,value.w);Writes a word to the process with Offset
 hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
 If hProcess
  OrigMode=1
  Mode=#PAGE_EXECUTE_READWRITE
  VirtualProtectEx_(hProcess,addr,2,Mode,@OrigMode)
  res=WriteProcessMemory_(hProcess,addr,@value,2,0)
  VirtualProtectEx_(hProcess,addr,2,OrigMode,@Mode)
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure

ProcedureDLL pPokeB(handle,addr,value.b);Writes a Byte to the process with Offset
 hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
 If hProcess
  OrigMode=1
  Mode=#PAGE_EXECUTE_READWRITE
  VirtualProtectEx_(hProcess,addr,1,Mode,@OrigMode)
  WriteProcessMemory_(hProcess,addr,@value,1,0)
  VirtualProtectEx_(hProcess,addr,1,OrigMode,@Mode)
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure

ProcedureDLL pWriteMemory(handle,addr, SourceMemoryID, Laenge) ;copys Data from Sourcememory(own process) to the process with Offset
 hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
 If hProcess
  OrigMode=1
  Mode=#PAGE_EXECUTE_READWRITE
  VirtualProtectEx_(hProcess,addr,Laenge,Mode,@OrigMode)
  res=WriteProcessMemory_(hProcess,addr,SourceMemoryID,Laenge,0)
  VirtualProtectEx_(hProcess,addr,Laenge,OrigMode,@Mode)
  CloseHandle_(hProcess)
  ProcedureReturn res
 EndIf
EndProcedure


Procedure GetProcessPIDperName(Name.s,List PBOSL_ProcessList.PBOSL_ProcessesStruct())
Name2.s=LCase(Name)
ResetList(PBOSL_ProcessList())
ForEach PBOSL_ProcessList()
 Name1.s=PBOSL_ProcessList()\Name
 If LCase(Name1)=LCase(Name2)
  ProcedureReturn PBOSL_ProcessList()\PID
 EndIf
Next
EndProcedure


Enumeration
  #Window_0
  #Button_Refresh
  #Tree_0
  #Button_Kill
  #Text_process
  #Button_PauseResume
  #Button_RArrangeMem
  #Panel_0
  #Listview_IPLIST
EndEnumeration
  If OpenWindow(#Window_0, 10, 10, 600, 600, "PBOSL Process Include Example",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      ButtonGadget(#Button_Refresh, 10, 10, 70, 30, "Refresh")
      ButtonGadget(#Button_Kill, 90, 10, 90, 30, "Kill Process")
      TextGadget(#Text_process, 10, 510, 480, 20, "Process")
      ButtonGadget(#Button_PauseResume, 190, 10, 90, 30, "Pause/Resume")
      ButtonGadget(#Button_RArrangeMem, 290, 10, 110, 30, "ReArange Memory")
      PanelGadget(#Panel_0, 0, 50, 600, 550)
       AddGadgetItem(#Panel_0, -1, "Processes")
        TreeGadget(#Tree_0, 1, 1, 580, 550)
       AddGadgetItem(#Panel_0, -1, "IP-List")
        ListViewGadget(#Listview_IPLIST, 1, 1, 580, 550)
      CloseGadgetList()
     
       
  EndIf


PBOSL_Process_INIT()
Define ProcessCount.i

NewList priv_ProcessList.PBOSL_ProcessesStruct()
NewList priv_ModuleList.PBOSL_ModuleStruct()


Filename.s="calc.exe"

;RunProgram(Filename)
;RunProgram(Filename)
;RunProgram(Filename)

Repeat ; Start of the event loop
 
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
 
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
 
  GadgetID = EventGadget() ; Is it a gadget event?
 
  EventType = EventType() ; The event type
 
  ;You can place code here, and use the result as parameters for the procedures
 
  If Event = #PB_Event_Gadget
   
    If GadgetID = #Button_Refresh
      
    MessageRequester("Info","Delete Treegadget Trees",0)
      ClearGadgetItems(#Tree_0)
        MessageRequester("Info","Refresh Processes",0)
      Processcount=ExamineProcesses(priv_ProcessList())
      Debug "-----------------------"
      Debug "Processcount="+Str(Processcount)
     
      ForEach priv_ProcessList()
       AddGadgetItem(#Tree_0, -1, Str(priv_ProcessList()\PID) +" " + priv_ProcessList()\Name ,0,0)
       AddGadgetItem(#Tree_0, -1, "located at " + GetPathPart(priv_ProcessList()\FileName) ,0,1)
       
       AddGadgetItem(#Tree_0, -1, "Memory Usage " ,0,1)
       AddGadgetItem(#Tree_0, -1, "WorkingSetSize " + Hex(priv_ProcessList()\Memory\WorkingSetSize ) ,0,2)
       AddGadgetItem(#Tree_0, -1, "PageFaultCount " + Hex(priv_ProcessList()\Memory\PageFaultCount ) ,0,2)
       AddGadgetItem(#Tree_0, -1, "PeakWorkingSetSize " + Hex(priv_ProcessList()\Memory\PeakWorkingSetSize ) ,0,2)
       AddGadgetItem(#Tree_0, -1, "QuotaPeakPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaPeakPagedPoolUsage) ,0,2)
       AddGadgetItem(#Tree_0, -1, "QuotaPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaPagedPoolUsage ) ,0,2)
       AddGadgetItem(#Tree_0, -1, "QuotaPeakNonPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaPeakNonPagedPoolUsage ) ,0,2)
       AddGadgetItem(#Tree_0, -1, "QuotaNonPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaNonPagedPoolUsage) ,0,2)
       AddGadgetItem(#Tree_0, -1, "PageFileUsage " + Hex(priv_ProcessList()\Memory\PageFileUsage ) ,0,2)
       AddGadgetItem(#Tree_0, -1, "PeakPagefileUsage " + Hex(priv_ProcessList()\Memory\PeakPagefileUsage) ,0,2)
 
       Modules=ExamineProcessDLLs(priv_ProcessList()\PID, priv_ModuleList())
       If Modules
        AddGadgetItem(#Tree_0, -1, Str(Modules) + " Module" ,0,1)
 
        ForEach priv_ModuleList()
         AddGadgetItem(#Tree_0, -1, GetFilePart(priv_ModuleList()\FileName) ,0,2)
         AddGadgetItem(#Tree_0, -1, "located at " + GetPathPart(priv_ModuleList()\FileName) ,0,3)
         AddGadgetItem(#Tree_0, -1, "Base of Image in Memory= "+Hex(priv_ModuleList()\ModuleInformation\lpBaseOfDll) ,0,3)
         AddGadgetItem(#Tree_0, -1, "EntryPoint of Image in Memory= "+Hex(priv_ModuleList()\ModuleInformation\EntryPoint) ,0,3)
         AddGadgetItem(#Tree_0, -1, "Size of Image in Memory= "+Hex(priv_ModuleList()\ModuleInformation\SizeofImage) ,0,3)
        Next
       EndIf
     
       NewList  ConnectionTable.ConnectionTable()
       Define o.s
       If GetConnectionFromPID(priv_ProcessList()\PID,ConnectionTable())
        AddGadgetItem(#Tree_0, -1, Str(ListSize(ConnectionTable()) )+ "     CONNECTIONS" ,0,1)
        ForEach ConnectionTable()
         If ConnectionTable()\State=-1
          o.s="UDP-Connection on "+ConnectionTable()\LocalIP+" at "+Str(ConnectionTable()\Localport)
         Else
          o="TCP-Connection on "+ConnectionTable()\LocalIP+"/"+Str(ConnectionTable()\Localport)+" from "+ConnectionTable()\RemoteIP+"/"+Str(ConnectionTable()\Remoteport)
          Select ConnectionTable()\State
          Case 1
           o +" Closed"
          Case 2
           o + " Listening"
          Case 3
           o + " SYN Sent"
          Case 4
           o + " SYN Received"
          Case 5
           o + " Established"
          Case 6
           o + " Waiting For FIN"
          Case 7
           o + " Waiting For FIN"
          Case 8
           o + " Waiting For Close"
          Case 9
           o + " Closing"
          Case 10
           o + " Last ACK"
          Case 11
           o + " Time Wait"
          Case 12
           o + " TCB deleted"
          Default
           o + " unknown"
          EndSelect
        EndIf
        AddGadgetItem(#Tree_0, -1, o ,0,2)
       
      Next
     EndIf
    Next 
   
    If GetConnections(ConnectionTable())
        ClearGadgetItems(#Listview_IPLIST)
        ForEach ConnectionTable()
         If ConnectionTable()\State=-1
          o.s="UDP-Connection on "+ConnectionTable()\LocalIP+" at "+Str(ConnectionTable()\Localport)
         Else
          o="TCP-Connection on "+ConnectionTable()\LocalIP+"/"+Str(ConnectionTable()\Localport)+" from "+ConnectionTable()\RemoteIP+"/"+Str(ConnectionTable()\Remoteport)
          Select ConnectionTable()\State
          Case 1
           o +" Closed"
          Case 2
           o + " Listening"
          Case 3
           o + " SYN Sent"
          Case 4
           o + " SYN Received"
          Case 5
           o + " Established"
          Case 6
           o + " Waiting For FIN"
          Case 7
           o + " Waiting For FIN"
          Case 8
           o + " Waiting For Close"
          Case 9
           o + " Closing"
          Case 10
           o + " Last ACK"
          Case 11
           o + " Time Wait"
          Case 12
           o + " TCB deleted"
          Default
           o + " unknown"
          EndSelect
        EndIf
        AddGadgetItem(#Listview_IPLIST, -1, Str(ConnectionTable()\PID) +" : " + o )
       
      Next
     EndIf
 
 
 
    ElseIf GadgetID = #Tree_0
     
    ElseIf GadgetID = #Button_Kill
     
    ElseIf GadgetID = #Button_PauseResume
     
    ElseIf GadgetID = #Button_RArrangeMem
     
    EndIf
   
  EndIf
 
Until Event = #PB_Event_CloseWindow ; End of the event loop
PBOSL_Process_END()
End



; Debug "GetOwnPID()="+Str(GetOwnPID())
;
; PID=GetProcessPIDperName(Filename,priv_ProcessList())
; Debug PID
; If PID
;  Rearrangemem(PID)
;  PauseProcess(PID)
;  MessageRequester("info","stopping PID " +Str(pid) ,0)
;  ResumeProcess(PID)
;  MessageRequester("info","Killing all " + filename ,0)
;  ;KillPID(PID,0)
;  Debug KillAllProcess("calc.exe",0)
; EndIf 
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
dige
Beiträge: 1183
Registriert: 08.09.2004 08:53

Beitrag von dige »

Habs mal getestet und bekomme mit Pb4.30x86 ebenfalls beim 2. Refresh
in Zeile 809 ClearGadgetItems(#Tree_0) einen IMA.

Vermutlich geht da schon vorher was schief..
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Antworten