Memik Yanık - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim

Aynı Programın Birden Fazla Kez Çalıştırılmasını Engellemek


Bazen kullanıcı program çalıştırmaya yarayan kısayolu çift tıklarken hemen tepki almadığında sanki tıklama yapmamış gibi 2. kez tıklama yapabilir. Bu durumda aynı program 2. kez çalıştırılır. Bu gibi sorunların önüne geçmek veya hazırladığınız programın aynı oturumda aynı anda 2. kez çalıştırılmasını önlemek istiyorsanız Windows’un GlobalAddAtom, GlobalFindAtom ve GlobalDeleteAtom fonksiyonlarından yararlanabilirsiniz. Bu fonksiyonların Visual Basic’e uyarlanmış yapılarını aşağıda görebilirsiniz.

 

<DllImport("kernel32.dll")> _

Public Shared FunctionGlobalAddAtom(ByVallpString As String) As UShort

End Function

 

<DllImport("kernel32.dll")> _

Public Shared FunctionGlobalFindAtom(ByVallpString As String) As UShort

End Function

 

<DllImport("kernel32.dll")> _

Public Shared FunctionGlobalDeleteAtom(ByVallpString As UShort) As UShort

End Function

 

Tahmin edebileceğiniz Windows'un API adı verilen fonksiyonları .NET Framework ile gelen DLLImport adlı nitelikten yararlanılarak Visual Basic uygulamaları dahilinde kullanılmaktadır. Fonksiyonları bu şekilde deklare ettikten sonra projenin ilk formunun Load olayını temsil eden metodu aşağıdaki gibi düzenledim. Bu kodda önce GlobalFindAtom() fonksiyonu ile söz konusu programın daha önce çalıştırılıp çalıştırılmadığı araştırılıyor.

 

 Private SubForm1_Load(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) Handles MyBase.Load

   Dimstr As String

   str = Application.ProductName + Application.ProductVersion

   DimAtom As UShort= GlobalFindAtom(str)

   IfAtom > 0 Then

      MessageBox.Show("Bu program zaten çalışıyor")

      Application.Exit()

   Else

     Atom = GlobalAddAtom(str)

  End If

End Sub

 

Program veya proje daha önce çalıştırılmadıysa GlobalFindAtom() fonksiyonu geriye 0 gönde­receğinden programın çalışması engellenmez. Bu sırada GlobalAddAtom() fonksiyonu ile sistem programın çalıştırıldığı konusunda bilgilendirilir.



 

Program 2. kez çalıştırıldığında GlobalFindAtom() fonksiyonu geriye 0’dan farklı bir değer göndereceği için programın daha önce çalıştırıldığı mesajı verilip Application.Exit() ile programın çalışması sona erdirilir. Ancak bu durumda projenin çalışması sona erdirildiğinde sistemin bundan haberdar edilmesi gerekir. FormClosed olayını temsil eden metotta GlobalDeleteAtom fonksiyonu kullanılmazsa Windows yeniden başlatılana kadar aynı program tekrar çalıştırılamaz.

 

Private SubForm1_FormClosed(ByValsender AsObject, ByVale AsFormClosedEventArgs) Handles MyBase.FormClosed

  DimStr As String

  Str = Application.ProductName + Application.ProductVersion

  Dimatom As UShort= GlobalFindAtom(Str)

  GlobalDeleteAtom(atom)

End Sub

 

Bu konuda bilgiyi başka kaynaklarda bulmanız yüksek bir ihtimaldir. Çünkü bu metnin benzerini 3 yıl öncesinde birkaç forumda sorulan soruya cevap olarak verdim. Ayrıca burada yazılanlar tecrübeli programcılar tarafından bilinmedik şeyler değildir. 

VB.NET 08.04.2009 22:05:02

2 YORUM


YorumlarYorum Yaz
Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Memik Yanık 2004-2009 © Tüm Hakları Saklıdır.
Hazırlayan www.semgoksu.com