سلام
حتما پایان برنامه بدون Focus بر روی برنامه ای که قبلا فعال شده نمی تواند مفید باشد. فرض کنید چندیدن برنامه بر روی ویندوز باز باشد، پس حتما کاربر برنامه ما را از یاد برده که سعی در اجرای مجدد آن می نماید. (اگر برنامه پیامی را ندهد یا روی برنامه Focus نشود. احتمالا چند فحش قشنگ خواهیم خورد). اما روال کار به صورت زیر است :
'VB6 Code
Public Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (ByVal hwnd As Long) As Long
Public Sub Main()
If App.PrevInstance Then
Dim lngHWND As Long
lngHWND = FindWindow(vbNullString, "YourProgramCaption")
Call FlashWindow(lngHWND, True)
Sleep 500
Call FlashWindow(lngHWND, True)
Sleep 500
Call FlashWindow(lngHWND, True)
Call SetActiveWindow(lngHWND)
Else
frmStartup.Show
End If
End Sub
و روال کار در VB.NET به صورت زیر است :
'VB.Net Changes
'Sleep API Changes to : Thread.Sleep
'App.PrevInstance Changes to : ...
Function PrevInstance() As Boolean
If Ubound(Diagnostics.Process.GetProcessesByName& #40;Diagnostics.Process.GetCurrentProcess.ProcessN ame)) > 0 Then
Return True
Else
Return False
End If
End Function
در ضمن یه نگاهی هم به موضوع (جایگزین توابع API معروف FlashWindow و SetActiveWindow؟) بزن.