CStruct:Examples:Show All Processes

    # CStruct Examples
    require 'windows/tool_helper'
    require 'win32struct'
    include Windows::ToolHelper

    module Windows
        MAX_PATH = 260
        module ToolHelper
            class PROCESSENTRY32 < Win32Struct
                DWORD   :dwSize
                DWORD   :cntUsage
                DWORD   :th32ProcessID
                DWORD   :th32DefaultHeapID
                DWORD   :th32ModuleID
                DWORD   :cntThreads
                DWORD   :th32ParentProcessID
                LONG    :pcPriClassBase
                DWORD   :dwFlags
                CHAR    :szExeFile,[MAX_PATH]
            end
        end
    end

    def show_all_processes
        proc_enrty32 = PROCESSENTRY32.new
        proc_enrty32.dwSize = PROCESSENTRY32.__size__
        snap_handle  = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS,0)

        if Process32First(snap_handle,proc_enrty32.data)
            show_process proc_enrty32
            while true
                break if !Process32Next( snap_handle,proc_enrty32.data )
                show_process proc_enrty32
            end
        end

    end

    def show_process proc_enrty32
        printf"%20s 0x%08X\n",proc_enrty32.szExeFile.to_cstr,proc_enrty32.th32ProcessID
    end

    printf"%20s %s\n","<Process Name>","<PID>"
    printf"%20s %s\n","--------------","-----"
    show_all_processes