Newsgroup: it.comp.lang.visual-basic
Titolo: Come stabilire se esiste gia' 1 programma in esecuzione?

Salve, 
so che la domanda e' abbastanza stupida e forse gia' stata richiesta
migliaia di volte....
ma il mio problema e' questo :
voglio che un utente, se lancia la mia applicazione per una seconda
volta, questa non si apra di nuovo, ma venga messa in primo piano la
finestra della prima istanza....
qualcuno potrebbe farmi un esempio semplice semplice del listato che
dovrei inserire?
Grazie a tutti!

Beh, per sapere quante istanze attive ci sono del tuo programma puoi usare
la proprietą dell'oggetto path: app.previnstance (o qualcosa di simile...),
per riportare la prima istanza del tuo prog. in primo piano... Beh, questo
non lo so... anche se potrebbero esserci API che fanno al caso tuo...
Io ti consiglio:
Sub Form_load()
    If app. previnstance>0 then
      Msgbox("Programma gią attivo!")
      end
    end if
...
End Sub
        Ciao
            Allanon
Maurizio ha scritto nel messaggio ...


 Maurizio ha scritto nel messaggio ...


            Allanon


Beh... é un po' generico... come errore...
Posta il codice che usi per mandare la finestra in primo piano...
        Ciao
            Allanon




 ha scritto nel messaggio
news:8v3g27$pqj$1...@fe1.cs.interbusiness.it...


 (errore 5) .....qualcuno sa da cosa puo' dipendere?
Se non ricordo male, l' errore 5 e' chiamata di funzione non valida.
Un es. e' passare un numero negativo alla funzione mid$, oppure assegnare un
valore negativo a qualche larghezza o altezza.
Postare codice, plz !
Ciao
Aldo

news:j6r91tsb202a0ca6o...@4ax.com...


Mi sono sbrigato prima del previsto! 8-)
allora ecco tutto il codice che son riuscito a trovare in rete per il
mio scopo, ma NON FUNZIONA quando la finestra e' minimizzata o la
stessa e' resa invisibile.
Qualcuno potrebbe aiutarmi? Grazie mille!
----------------------------
Module1.bas
----------------------------
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
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)
Global Const HWND_TOPMOST = -1
Global Const HWND_NOTOPMOST = -2
----------------------------------------------------------
Form1.frm
---------------------------------------------------------
Sub Form_Load()
    '---------------------------------------
    '     -----------------------------------
    'Form1 Caption property should be set to
    '     NullStr
    '---------------------------------------
    '     -----------------------------------
    If App.PrevInstance Or FindWindow("Mio", App.Title) > 0 Then
        AppTitle$ = App.Title
 
        App.Title = "#$#"
        Form1.Caption = "#$#"
            AppActivate AppTitle$
            End
 
        End If
        Form1.Caption = App.Title
        End Sub
-----------------------------------------------------
l'errore che mi genera, e'  Run-time Error 5 : Invalid Procedure Call
or Argument.
Grazie a tutti coloro che tenteranno di aiutarmi!!! :)
Ciao!


Prova a farlo girare cosi':
''''''''''''''''''''''''
Option Explicit
Sub Form_Load()
    '---------------------------------------
    '     -----------------------------------
    'Form1 Caption property should be set to
    '     NullStr
    '---------------------------------------
    '     -----------------------------------
Dim AppTitle As String
If App.PrevInstance Then
      AppTitle$ = "#$#"
     App.Title = AppTitle$
      Form1.Caption = AppTitle
      AppActivate "Project1"
      End
    End If
    Form1.Caption = App.Title
End Sub
'''''''''''''''''''''''
Hai capito cos' era ?         ;-)
P.S. Nel programma vero togli quell' istruzione End.
Ciao
Aldo

Hai capito cos' era ?         ;-)
non funziona, mi da sempre errore di run-time 5 :(
sembra che la finestra minimizzata, quando viene chiamata generi un
errore o magari c'e' un bug che si risolve con qualche SP? attualmente
io ho VB6 con SP3......
se hai qualche idea, potresti aiutarmi?
(cmq grazie per il tuo suggerimento!)

 wrote in message
news:3rdk1tkv9fgls7q3g...@4ax.com...

Mi viene il sospetto che nelle prove che ho fatto ieri non avevo iconizzato
la finestra.
Credo che l' AppActivate non ne voglia proprio sapere di ripristinare le
applicazioni minimizzate. Ho rovistato sui cd dell' msdn (bibbia
insostituibile) e, secondo me, stavolta ci siamo.
Fai un progetto con un form, impostato come oggetto di startup:
'''''''''''''''''''''''''''''''''
Option Explicit
Private Sub Form_Load()
      If App.PrevInstance Then
               ActivatePrevInstance
      End If
End Sub
In un modulo metti la "chicca":
''''''''''''''''''''''''''''''''''''''''''''''''
Option Explicit
      Public Const GW_HWNDPREV = 3
      Declare Function OpenIcon Lib "user32" (ByVal hwnd As Long) As Long
      Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) _
         As Long
      Declare Function GetWindow Lib "user32" _
        (ByVal hwnd As Long, ByVal wCmd As Long) As Long
      Declare Function SetForegroundWindow Lib "user32" _
        (ByVal hwnd As Long) As Long
      Sub ActivatePrevInstance()
         Dim OldTitle As String
         Dim PrevHndl As Long
         Dim result As Long
         'Save the title of the application.
         OldTitle = App.Title
         'Rename the title of this application so FindWindow
         'will not find this application instance.
         App.Title = "unwanted instance"
         'Attempt to get window handle using VB4 class name.
         PrevHndl = FindWindow("ThunderRTMain", OldTitle)
         'Check for no success.
         If PrevHndl = 0 Then
            'Attempt to get window handle using VB5 class name.
            PrevHndl = FindWindow("ThunderRT5Main", OldTitle)
         End If
         'Check if found
         If PrevHndl = 0 Then
         'Attempt to get window handle using VB6 class name
         PrevHndl = FindWindow("ThunderRT6Main", OldTitle)
         End If
         'Check if found
         If PrevHndl = 0 Then
            'No previous instance found.
            Exit Sub
         End If
         'Get handle to previous window.
         PrevHndl = GetWindow(PrevHndl, GW_HWNDPREV)
         'Restore the program.
         result = OpenIcon(PrevHndl)
         'Activate the application.
         result = SetForegroundWindow(PrevHndl)
         'End the application.
         End
      End Sub
'''''''''''''''''''''''''''''
Spero che stavolta vada. Da me, ha funzionato.
Fammi sapere.
Ciao
Aldo