Home > Visual Basic > How can I detect whether my program is already running?

How can I detect whether my program is already running?

January 1, 2010

Wah judulnya pake bahasa wong londo😀, ya kira-kira kalo kita artikan lebih kurang “Bagaimana cara mengecek program saya sudah jalan atau belum ?”.

Kan sangat riskan sekali kalau program kita bisa dijalankan beberapa kali dalam waktu bersamaan dan dikomputer yang sama ditambah data yang diakses kritis lagi, karena secara default program/file exe yang dihasilkan oleh vb kalau dijalankan selalu membuat instance yang baru, dan tentunya ini tergantung kasus dimana kita ingin program kita tidak boleh dijalankan lebih dari 1 kali diwaktu dan komputer yang sama.

Sebenarnya sih penyelesaiannya gampang kita cukup mengetikkan kode berikut di form utama/form yang pertama kali dijalankan/load :

Private Sub Form_Load()
    If App.PrevInstance Then
        MsgBox "Program udah dijalankan", vbExclamation, "Peringatan"
        End
    End If
End Sub

Nah bagaimana kalo kita ingin program kita langsung aktif/fokus jika sebelumnya program sudah dijalankan (ya pengennya sih mirip Winamp gitu), caranya juga gampang kita tinggal revisi kode diatas trus tambahkan sebuah module dan copy paste kode berikut:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long
Private Const SW_RESTORE = 9

Public Sub Main()
    Dim hWnd As Long
    Dim lres As Long

    If App.PrevInstance Then
        hWnd = FindWindow(0&, "Menu Utama")
        If hWnd <> 0 Then
            If IsIconic(hWnd) Then lres = ShowWindow(hWnd, SW_RESTORE)

            AppActivate "Menu Utama"
            Exit Sub
        End If

    Else
        frmMain.Show
    End If
End Sub

Sample diatas dengan asumsi form utama properties namenya diset = frmMain dan untuk captionnya diset = Menu Utama, selain itu Startup Object harus di set menjadi Sub Main

Tetapi cara kedua hanya bekerja dengan baik jika kita menggunakan model SDI tidak untuk MDI, karena kode diatas untuk mengecek program kita sudah dijalankan atau belum berdasarkan properties Caption form utama. Oke mari kita lihat perbedaannya.

Jadi kode kedua juga harus kita revisi lagi menjadi seperti berikut :

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Const SW_RESTORE = 9

Public Sub Main()
    Dim formCaption As String * 256

    Dim hwnd        As Long
    Dim lres        As Long

    If App.PrevInstance Then
        hwnd = FindWindow("ThunderRT6MDIForm", vbNullString) 'ThunderRT6MDIForm -> nama class MDIForm di VB
        If hwnd <> 0 Then
            GetWindowText hwnd, formCaption, 256 'GetWindowText -> untuk mengambil judul/caption form
            If IsIconic(hwnd) Then lres = ShowWindow(hwnd, SW_RESTORE)

            AppActivate formCaption
        End If

    Else
        'TODO : tampilkan frmLogin atau frmUtama disini
    End If
End Sub

Selamat mencoba🙂

  1. AngeL
    February 11, 2011 at 11:45 pm

    Mas, Lha kaLo mo dibuat apLikasinya jaLan Lebih dari satu di kumpi yg sama, ada tips-nya ga, biar apLikasinya ga tubrukan perintahnya?

    • February 12, 2011 at 1:09 am

      Ya udah fungsi pengecekan diatas dinonaktifkan

  2. March 27, 2014 at 1:10 am

    mas kalau mau menutup aplikasi lain menggunakan vb net 2008 ,, misal mau menutup exel yg lg kebuka,, gitu,,gi mana ya caranya,,,

  1. No trackbacks yet.
Comments are closed.
%d bloggers like this: