Hej. Använd dig av App.PrevInstance. Kolla i msdn-hjälpen för detta! Hej min namne: Hmm... Förstår inte riktigt vad du menar och varför det inte fungerar... men har det löst sig eller? Hej Kenneth Du kanske skall köra din Unload me sist i proceduren? Får ingen ordning, behöver testa en del varianter. Jag har för mig att det är som Mikael säger. Hej Thomas Jag har väldigt svårt att förstå vad det är du menar, men har du Unload Me så lägg den sist i koden. I filen lista .exe skall du under load lägga in följande Prog snutt. HejFörhindra dubbelkörning av exe.fil i Shell ??
Öppnar en separat exe. fil till mitt program. Vill hindra att man öppnar programmet Skapa lista.EXE fler en 1 ggr. Som det nu är öppnas hur många som helst ????
Har kollat på Pellesoft men hittar inget motsvarande.
Plus att går det att förhindra via en Msgbox eller ngt att (Skapa lista.EXE) tvingas att avslutas innan man fortsätter i det ordinarie programmet.
Tillägg: (Skapa lista.EXE) är satt till vara över alla forms innan den kompillerats till exe.fil.
påverkar det negativt på ngt sätt??
Bra lösningar ??
(Inga problem att avsluta programmet Skapa lista.EXE.)
Private ProcessID As Long
Private Const SYNCHRONIZE = &H100000
Private Const PROCESS_TERMINATE As Long = &H1
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Sub Skapalista_Click()
ProcessID = Shell("D:\Skapa lista.EXE", vbNormalFocus)
End Sub
Private Sub Avsluta_Click()
Unload Me
Unload Resultat1
Unload Hjälpen2
Dim hProcess As Long
If ProcessID Then
hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, 0&, ProcessID)
If hProcess Then
TerminateProcess hProcess, 0&
CloseHandle hProcess
ProcessID = 0
End If
End If
Välkommen.Show
End Sub
Har testat den version som finns på Pellesoft där
man stänger ner vid dubbelkörning och där en form av Msgbox dyker upp med information.
Den funkar såtillvida att "dubletten av exe.filen försvinner, men där jag ändå har en dublett när jag stänger ner det ordinarie programmet ???
Mvh KennethSv: Förhindra dubbelkörning av exe.fil i Shell ??
Sv:Förhindra dubbelkörning av exe.fil i Shell ??
Tyvärr som jag beskrev (ej utryckligt) har jag använt mig av denna funktion via Helpen MSDN.
Det funkar visuellt till en början, men antagligen inte (eftersom) att jag lagt den externa exe.filen som över alla andra forms i det ordinarie exe.filen. Klurigt tycker jag????
Jag har så att säga fortfarande 1 extern exe.fil fast jag stängt ner exekveringen av Informationsfilen att programmet redan körs.
Ja ????
Mvh
Kenneth till KennethSv: Förhindra dubbelkörning av exe.fil i Shell ??
Sv: Förhindra dubbelkörning av exe.fil i Shell ??
'Kod i ordinarie exe plus extra exe
Private ProcessID As Long
Private Const SYNCHRONIZE = &H100000
Private Const PROCESS_TERMINATE As Long = &H1
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Sub Skapalista_Click()
ProcessID = Shell("C:\Skapa lista.EXE", vbNormalFocus)
End Sub
Private Sub Avsluta_Click()
Unload Me
Unload Resultat1
Unload Hjälpen2
Dim hProcess As Long
If ProcessID Then
hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, 0&, ProcessID)
If hProcess Then
TerminateProcess hProcess, 0&
CloseHandle hProcess
ProcessID = 0
End If
End If
Välkommen.Show
End Sub
I den externa exe.filen (Skapalista)
Option Explicit
Private Declare Function GetSystemMenu Lib "User32" _
(ByVal hWnd As Long, _
ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "User32" _
(ByVal hMenu As Long) _
As Long
Private Declare Function RemoveMenu Lib "User32" _
(ByVal hMenu As Long, ByVal _
nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function DrawMenuBar Lib "User32" _
(ByVal hWnd As Long) As Long
Private Const MF_BYPOSITION = &H400&
Private Const MF_REMOVE = &H1000&
Dim Använd As Variant
Private Sub Form_Load()
SetWindowPos Me.hWnd, HWND_TOPMOST, Me.Left / 15, Me.Top / 15, Me.Width / 15, Me.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW
If App.PrevInstance = True Then
MsgBox "Programmet körs redan.", vbInformation, "Information"
Unload Me
Next
End If
'Om nedre baren är aktiverad kommer
'den att ligga över
Me.WindowState = vbMaximized
End Sub
Module
Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
'När jag öppnar Skapa lista först 1 gång (inga problem). Sedan öppnar jag den en gång till...
MsgBox "Programmet körs redan.", vbInformation, "Information"
'Allt OK så långt när jag klickar på OK försvinner en av Skapa lista....
'När jag sedan vill avsluta i ordinarie programmet ska den Skapa lista som finns kvar försvinna, vilket den inte gör.
' Har jag endast öppnat en Skapa lista försvinner den när jag vill avsluta fönstret i ordinarie programmet enl. kod
Private Sub Avsluta_Click()
Unload Me
Unload Resultat1
Unload Hjälpen2
Dim hProcess As Long
If ProcessID Then
hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, 0&, ProcessID)
If hProcess Then
TerminateProcess hProcess, 0&
CloseHandle hProcess
ProcessID = 0
End If
End If
Välkommen.Show
End Sub
Ja vad är fel eller ???
Mvh
KennethSv:Förhindra dubbelkörning av exe.fil i Shell ??
Annars slutar väl programmet att köra innan den terminerat processen?
Alltså: Unload Me efter Välkommen.Show
/mickeSv: Förhindra dubbelkörning av exe.fil i Shell ??
Kanske ditt exempel är rätt med modifieringar
Mvh
KennethSv: Förhindra dubbelkörning av exe.fil i Shell ??
Har man kod efter Unload Me så kommer nog fönstret att laddas upp igen.
ThomasSv:Förhindra dubbelkörning av exe.fil i Shell ??
Unload Me i det här fallet är ju att
en del av huvudprogrammets fönster
är "Öppet" men ska stängas ner inkl Skapa lista.EXE
Mvh
KennethSv: Förhindra dubbelkörning av exe.fil i Shell ??
Kan du förklara exakt vad det är du ska ha programmet till?
ThomasSv: Förhindra dubbelkörning av exe.fil i Shell ??
Detta bör lösa ditt problem
If App.PrevInstance Then
MsgBox "Detta program är redan öppnat.", 64, "LPd Systemutveckling"
End
End IfSv:Förhindra dubbelkörning av exe.fil i Shell ??
No, problems still going on. Ja jag vet inte.... På något sätt förstår inte programmet eller programeraren (jag) hur eller varför. (När det gäller unload forms kan man ju ange unload all forms etc), men på ngt sätt i det här fallet är det första öppnade alternativet av Skapa lista.Exe fortfarande kvar trots avslut med OK i MsgBox vilket i sig hindrar dubbelkörning.
Alltså vad jag menar:
I det läget är allt status que och man tror att man är tillbaka innan MsgBox öppnades om att dubbelkörning pågår.
När huvudprogrammet körs och man öppnar upp Skapa lista.EXE endast 1 ggr är allt OK och det stänger sedan ner jag går vidare i mitt ordinarie program.
Jag tror vi ger oss och jag bibehåller Me.WindowState = vbMaximized och Border Style satt till Sizeable i Skapa lista.EXE eftersom det då täcker hela skärmem utom nedre baren.
Tanken med hela det här var om jag Sizar ner programmets storlek ska jag inte öppna en gång till av misstag.
Egentligen var inte det här så "viktigt", men trots allt dynamiken hade varit roligare om det funkat.
Tack i alla fall