Home » » VB.Net Fazla Proje Acmayı Engelleme

VB.Net Fazla Proje Acmayı Engelleme


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

 
Support : Vaganzi
Copyright © 2013. Visual Studio Kod Bankası - All Rights Reserved
Powered By Vaganzi