OVH Cloud OVH Cloud

Raccourci clavier pour faire rapparaitre une fenetre

4 réponses
Avatar
Sendell
Bonjour
devant réaliser un programme qui doit fonctionner discretement, je
souhaiterai ameliorer la solution de la reduction dans le systray: que le
programme n'apparaisse ni dans la barre des taches ni dans le systray (seul
le gestionnaire des taches pouvant donc permettre de fermer le programme de
force). Le probleme n'est pas de le cacher mais de le faire apparaitre:
Existe-t-il un moyen de faire que lorsque mon programme est lancé et caché
(et n'a donc pas le focus), une combinaison de touche (raccourci clavier
divers) permette de montrer la fenetre de mon programme ??
Je pense au logiciel SetiCommander par exemple, qui peut etre totalement
dissimulé et apparaitre avec la combinaison de touches "Control Alt Shift S"

Merci
(je code avec visual basic 6)

4 réponses

Avatar
Zoury
Salut Sendell!

Il faudrait enregistrer ton programme en tant que Service (sur NT, win2K,
XP) ce qui est impossible à faire en VB (du moins de manière fiable).
Ensuite ton service devra implémenter un hook clavier sur le système en
entier ce qui, encore une fois, n'est pas possible à faire en VB.

Alors soit tu convertis ton code en C++... soit tu laisses tomber cette
ammélioration. :O/

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
François Picalausa
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Sendell!

Il faudrait enregistrer ton programme en tant que Service (sur NT,
win2K, XP) ce qui est impossible à faire en VB (du moins de manière
fiable). Ensuite ton service devra implémenter un hook clavier sur le
système en entier ce qui, encore une fois, n'est pas possible à faire
en VB.

Alors soit tu convertis ton code en C++... soit tu laisses tomber
cette ammélioration. :O/



Bonjour/soir,

Ce serait peut-être faisable en utilisant n ActyiveX Exe qui pourrait
réveiller l'application en lui envoyant un événement et en plaçant sur le
bureau un raccourci vers cet activeX Exe ave un raccourci clavier au
choix...

Sinon, plus facile et probablement plus approprié: WM_SETHOTKEY:
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputmessages/wm_sethotkey.asp

Autre possibilité encore (et encore plus appropriée, il me semble):
RegisterHotKey
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/registerhotkey.asp

Voici un exemple montrant l'usage de la dernière technique:
(SubclassIt.SubClassing est un composant de sous classement)
Option Explicit

'Form1
' Visible = False

Private WithEvents Subclasser As SubclassIt.SubClassing
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long,
ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long

Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4

Private Const WM_HOTKEY = &H312

Private Sub Command1_Click()

End Sub

Private Sub Form_Load()
Set Subclasser = New SubclassIt.SubClassing
Subclasser.SubClass Me.hWnd
Me.Visible = False

If RegisterHotKey(Me.hWnd, 10, MOD_CONTROL Or MOD_SHIFT, vbKeyE) = 0
Then
MsgBox "Fonctionne pas :-("
Me.Visible = True
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
Subclasser.UnSubclassAll
End Sub

Private Sub Subclasser_Message(ByVal hWnd As Long, ByVal Msg As Long, ByVal
wParam As Long, ByVal lParam As Long, SetNewValue As Boolean, NewValue As
Long)
Select Case Msg
Case WM_HOTKEY
'on peut déterminer la touche pressée en fonction de lParam
Me.Show
End Select
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
Zoury
> Sinon, plus facile et probablement plus approprié: WM_SETHOTKEY:



Huuummm... hoootkeey!!
merci! ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Sendell
Merci

"François Picalausa" a écrit dans le message de
news:
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> Salut Sendell!
>
> Il faudrait enregistrer ton programme en tant que Service (sur NT,
> win2K, XP) ce qui est impossible à faire en VB (du moins de manière
> fiable). Ensuite ton service devra implémenter un hook clavier sur le
> système en entier ce qui, encore une fois, n'est pas possible à faire
> en VB.
>
> Alors soit tu convertis ton code en C++... soit tu laisses tomber
> cette ammélioration. :O/

Bonjour/soir,

Ce serait peut-être faisable en utilisant n ActyiveX Exe qui pourrait
réveiller l'application en lui envoyant un événement et en plaçant sur le
bureau un raccourci vers cet activeX Exe ave un raccourci clavier au
choix...

Sinon, plus facile et probablement plus approprié: WM_SETHOTKEY:



http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputmessages/wm_sethotkey.asp

Autre possibilité encore (et encore plus appropriée, il me semble):
RegisterHotKey



http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/registerhotkey.asp

Voici un exemple montrant l'usage de la dernière technique:
(SubclassIt.SubClassing est un composant de sous classement)
Option Explicit

'Form1
' Visible = False

Private WithEvents Subclasser As SubclassIt.SubClassing
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long,
ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long

Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4

Private Const WM_HOTKEY = &H312

Private Sub Command1_Click()

End Sub

Private Sub Form_Load()
Set Subclasser = New SubclassIt.SubClassing
Subclasser.SubClass Me.hWnd
Me.Visible = False

If RegisterHotKey(Me.hWnd, 10, MOD_CONTROL Or MOD_SHIFT, vbKeyE) = 0
Then
MsgBox "Fonctionne pas :-("
Me.Visible = True
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
Subclasser.UnSubclassAll
End Sub

Private Sub Subclasser_Message(ByVal hWnd As Long, ByVal Msg As Long,


ByVal
wParam As Long, ByVal lParam As Long, SetNewValue As Boolean, NewValue As
Long)
Select Case Msg
Case WM_HOTKEY
'on peut déterminer la touche pressée en fonction de lParam
Me.Show
End Select
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com