Oppure

Loading
18/09/12 18:07
PcBase
Ciao

Ho creato un programma .exe in Vb6 dalle dimensioni ridotte, compare solamente la barra del titolo e il pulsante X per chiudere l'applicazione.
Chiedo quale tecnica codice devo utilizzare per richiamare la barra del titolo in automatico ogni tot secondi a partire da quando perde il Focus?
Ho assoluta necessità di effettuare questa operazione per ipedire ad un programma che utilizzo sul lavoro di rimanere per troppo tempo (10 minuti) col focus attivo.

Ringrazio anticipatamente per qualunque informazione in merito.
aaa
19/09/12 7:51
Uno sciame di API
Non avendo a portata di mano Vb6, ho scritto un codice in vb.net ma credo che si possa convertire facilmente. :)
Ecco il codice:
Public Class myTimer
WithEvents mostrafrm As New Timer
Dim disattivo As Boolean
Dim trascorsi, minuti As Integer
Private Sub mostrafrm_Tick() Handles mostrafrm.Tick
If disattivo = True Then
If trascorsi = 0 Then Activate() Else trascorsi -= 1
End If
End Sub
Private Sub Deactivatefrm() Handles MyBase.Deactivate
disattivo = True
End Sub
Private Sub Activatedfrm() Handles MyBase.Activated
trascorsi = minuti * 60
disattivo = False
End Sub
Private Sub Form1_Load() Handles MyBase.Load
mostrafrm.Interval = 1000 '1 secondo
mostrafrm.Enabled = True
minuti = 10
Activatedfrm()
End Sub
End Class
Ultima modifica effettuata da Uno sciame di API 20/09/12 14:39
aaa
19/09/12 20:40
PcBase
Ciao

Ho provato invano ad eseguire il codice proposto...

Intanto ho preso alcuni spunti e ho ricreato un nuovo file

Ecco il codice che testerò domani penso possa bastare attivare il programma in questo modo ogni 60 secondi.

VERSION 5.00
Begin VB.Form Form1 
   ClientHeight    =   0
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   915
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   0
   ScaleWidth      =   915
   StartUpPosition =   3  'Windows Default
   Begin VB.Timer Timer1 
      Interval        =   60000
      Left            =   360
      Top             =   1560
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Function SetWindowPos Lib "user32.dll" (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) As Long
Private Const HWND_TOP As Long = 0
Private Const HWND_TOPMOST As Long = -1
Private Const HWND_NOTOPMOST As Long = -2
Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOSIZE  As Long = &H1

Private Sub Form_Initialize()
    SetWindowPos Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
End Sub

Private Sub Timer1_Timer()
    Form1.Show
End Sub

aaa
20/09/12 10:52
PcBase
Ciao

Oggi ho provato la mia soluzione:
Funziona solo al 98%

Private Sub Timer1_Timer()
   Form1.Show
End Sub


Non seleziona perfettamente la chiamata al Form, ciclo non disabilita la barra dell'applicazione come da richiesta.

Non so se può bastare un DoEvents altrimenti mi servirebbe attivare il form diversamente da codice.
aaa