Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Programma in ascolto in background
Forum - Visual Basic 6 - Programma in ascolto in background

Avatar
gawogawo (Normal User)
Newbie


Messaggi: 2
Iscritto: 10/12/2007

Segnala al moderatore
Postato alle 22:03
Lunedì, 10/12/2007
Salve.
Innanzitutto, felice di conoscervi e buon giorno a tutti, visto che mi sono appena iscritto.
Ora sottopongo il mio problema.

Premetto, uso il VB6 perchè per il momento non ho a disposizione altre versioni, e non ho tempo e possibilità di imparare altri linguaggi per Windows, per cui mi necessita un aiuto su come fare una cosa esclusivamente in VB6, se si può fare.

Il problema è questo: dovrei scrivere un programmino che possa girare in background, o anche semplicemente ridotto a icona, e mantenersi "in ascolto", in attesa che l'utente prema una specifica combinazione di tasti, la quale lo riporterebbe in primo piano, visualizzando un normale Form che accetti dei dati, e alla pressione di un comando "OK" esegua qualche operazione, e poi automaticamente il programma ritorni a minimizzare o a girare in background.

Ora, so come rendere un Form generalmente "aware" sulla pressione di tasti quando è in primo piano, ma non so come renderlo sensibili a questi quando è minimizzato o gira come servizio (sempre che un servizio in vb6 si riesca a fare agevolmente).

qualcuno mi sa aiutare? Spero di avere illustrato chiaramente la necessità che ho.

Grazie in anticipo e ciao a tutti!


PM Quote
Avatar
LuigiBiasi (Normal User)
Expert


Messaggi: 237
Iscritto: 15/09/2006

Segnala al moderatore
Postato alle 14:11
Martedì, 11/12/2007
Ciao, innanzitutto dovresti iniziare con l'usare l'api per la notify icon (mettere il programma nella "toolbar" in basso a destra)
Codice sorgente - presumibilmente VB.NET

  1. Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long



più la struttura
Codice sorgente - presumibilmente VB.NET

  1. Type NOTIFYICONDATA
  2. cbSize As Long
  3. hwnd As Long
  4. uID As Long
  5. uFlags As Long
  6. uCallbackMessage As Long
  7. hIcon As Long
  8. szTip As String * 64
  9. End Type



i parametri da passare al paramentro dwMessage sono:
Codice sorgente - presumibilmente Plain Text

  1. NIM_ADD = &H0 'Aggiunge una icona nella  Tray Bar
  2. NIM_DELETE = &H2 'Rimuove l'cona dalla Tray Bar
  3. NIM_MODIFY = &H1 Modifica l'icona nella Tray Bar



mentre al secondo parametro lpData devi passare la struttura, che va inizializzata in questo modo, questo è un po una guida.

*********************************************
cbSize Dimensione della struttura

hwnd  Handle della finestra che riceve messaggi di notifica associati all'icona nella System Tray.

uID Identificatore dell'icona nella Tray Bar definito dalla applicazione

uFlags Array di flags che indica quali altri membri contengono dati validi. Questo membro, può essere la combinazione dei seguenti valori:

NIF_ICON = &H2 Il membro  hIcon è stato impostato
NIF_MESSAGE = &H1 Il membro uCallbackMessage è stato impostato
NIF_TIP = &H4 Il membro szTip è stato impostato

uCallbackMessage definisce l’identificatore per il messaggio che il sistema invierà alla finestra specificata (identificata dal parametro hwnd) ogni qual volta vi e' un evento del mouse all’interno del rettangolo dell’icona.

hIcon Handle all'icona da aggiungere, modificare, rimuovere

szTip Stringa da visualizzare quale tooltip dell’icona nella tray.(Terminare con carattere Null)
****************************************
Questo usato correttamente dovrebbe permetterti di inserire un programma nella "toolbar" in basso a destra(vicino l'orologio)

Spero di esserti stato di aiuto.
e
Spero si capisca.

Ultima modifica effettuata da LuigiBiasi il 11/12/2007 alle 14:18
PM Quote
Avatar
gius (Ex-Member)
Expert


Messaggi: 294
Iscritto: 20/06/2007

Segnala al moderatore
Postato alle 8:08
Mercoledì, 12/12/2007
Oppure molto piu facile

per nasconderlo
Codice sorgente - presumibilmente Visual Basic 6

  1. Me.Visible = False
  2. App.TaskVisible = False



per renderlo visibile
Codice sorgente - presumibilmente Visual Basic 6

  1. Me.Visible = True
  2. App.TaskVisible = True


PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 18:56
Mercoledì, 12/12/2007
manca la parte piu importante. come leggere quale tasto e` stato premuto senza avere il focus sul form?
si utilizza anche stavolta un'api
Codice sorgente - presumibilmente VB.NET

  1. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer



poi per controllare se un tsto e` stato premuti usi l'istruzione
If GetAsyncKeyState(keynumber) <> 0 then

ps:qua c'e` un esempio.
la funzione e` usata per fare un keylogger.
http://www.pierotofy.it/pages/extras/forum/6/10887-registr ...

PM Quote
Avatar
gawogawo (Normal User)
Newbie


Messaggi: 2
Iscritto: 10/12/2007

Segnala al moderatore
Postato alle 17:15
Giovedì, 13/12/2007
Ciao,

innanzitutto grazie mille a tutti perchè il comportamento del programma è esattamente quello che volevo.
In effetti, non ho avuto bisogno di far apparire il programma nel tray, a me bastava che, una volta partito e minimizzato nella barra degli strumenti, venisse "tirato su" ogni volta che premevo un tasto, e questo lo fa perfettamente.

E' un altro il problema che incontro: se dopo aver lanciato quel programma ne faccio partire un altro, quando apro la finestra con il tasto, questa finestra appare dietro le altre che ho nel frattempo aperto in seguito.
Questa cosa si può risolvere?

Grazie, ciao

PM Quote
Avatar
LuigiBiasi (Normal User)
Expert


Messaggi: 237
Iscritto: 15/09/2006

Segnala al moderatore
Postato alle 18:50
Giovedì, 13/12/2007
credo che cosi dovrebbe andare:
Codice sorgente - presumibilmente VB.NET

  1. Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, _
  2.     ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
  3.     ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  4. Private Const HWND_TOP As Long = 0
  5. Private Const HWND_TOPMOST As Long = -1
  6. Private Const HWND_NOTOPMOST As Long = -2
  7. Private Const SWP_NOMOVE As Long = &H2
  8. Private Const SWP_NOSIZE  As Long = &H1



per tenerla in primo piano:
Codice sorgente - presumibilmente Plain Text

  1. SetWindowPos Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE


Ciao.

PM Quote