

<DllImport("Kernel32.DLL")> _
Private Shared Function GetProcessId(ByVal Process As IntPtr) As Integer
End Function
Private Function GetProcId(ByVal ProcessName As String) As Integer
Try
Dim ProcessHandle As IntPtr = Process.GetProcessesByName(ProcessName)(0).Handle
Dim ProcessID As Integer = GetProcessId(ProcessHandle)
Return ProcessID
Catch ex As IndexOutOfRangeException
Return 0
End Try
End Function
MsgBox(GetProcId("Notepad"))
Dim pFileName As String = Process.GetProcessByName("NotePad")(0).MainModule.FileName))
Dim pIcon As Icon = Icon.ExtractAssociatedIcon(pFileName)
Dim pImage As Image = pIcon.ToBitmap
Dim hicon As IntPtr = ExtractAssociatedIcon(Handle, "C:\Program Files\Internet Explorer\iexplore.exe", 1)
Dim ico As Icon = Icon.FromHandle(hicon)
Me.Icon = ico

Public Class Form1
''// No Windows API Declaration
Public Function TestSub(ByVal procName As String) As Int32
Dim _proc As System.Diagnostics.Process = Process.GetProcessesByName(procName)(0)
Return _proc.Id() '' with this logic, why bother creating another temporary..simply return .ByName(0).Id...TODO: handle process not found.
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Const targetProcName As String = "notepad"
Dim _newID As Int32 = TestSub(targetProcName)
MsgBox("Target App: " & targetProcName & Environment.NewLine _
& "Process ID: " & _newID.ToString())
End Sub
End Class
Public Function TestFunc(ByVal procName As String) As Int32
Dim _procs() As System.Diagnostics.Process = Process.GetProcessesByName(procName)
If _procs.Length = 0 Then
''Process not found
Return 0
Else
''Process found
Return _procs(0).Id()
End If
End Function



Private Sub Listview()
Dim proceso As Process
Try
ps = Process.GetProcesses()
Listview1.BeginUpdate()
Listview1.Clear()
Listview1.Columns.Add("Name", 100, HorizontalAlignment.Left)
Listview1.Columns.Add("ID", 60, HorizontalAlignment.Left)
Listview1.Columns.Add("Priority", 60, HorizontalAlignment.Right)
Listview1.Columns.Add("Memory", 100, HorizontalAlignment.Right)
Dim p As Process
For Each p In proceso
Dim lvi As ListViewItem = New ListViewItem()
lvi.Text = p.ProcessName
lvi.SubItems.Add(p.Id.ToString())
lvi.SubItems.Add(p.BasePriority.ToString())
lvi.SubItems.Add(p.WorkingSet64.ToString())
Listview1.Items.Add(lvi)
Next p
Listview1.EndUpdate()
Catch e As Exception
MessageBox.Show(e.Message)
End Try
End Sub