Accueil > Forum > > > > Boutons dans TOUTES les barres de titres
Boutons dans TOUTES les barres de titres
jeudi 28 février 2008 à 13:41:20 |
Boutons dans TOUTES les barres de titres

oommeeggaa3d
|
Bonjour Je développe actuellement un logiciel de multi-écrans virtuels et j'aimerais ajouter des fonctionnalités aux fenêtres windows à l'aide de boutons qui viendraient s'ajouter dans les barres de titre. (dans le style de ce que fait Ultramon par exemple avec deux boutons supplémentaires dans les barres de titre) La difficulté étant ici de rajouter ce bouton sur toutes les fenêtres et non sur la seule fenêtre de mon appli. Auriez-vous, s'il vous plait, des pistes, infos, ou codes là-dessus ? Merci d'avance.
|
|
jeudi 28 février 2008 à 22:44:23 |
Re : Boutons dans TOUTES les barres de titres

PCPT
|
salut, regarde dans les sources de DarkSidious (il me semble), tu devrais en trouver une concernant l'ajout d'un bouton en barre de titre pour icônifier les fenêtres ++ Prenez un instant pour répondre à ce sondage svp 
|
|
vendredi 29 février 2008 à 06:14:02 |
Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d
|
Merci je vais regarder ça ! Jusque là, je n'ai trouvé que des sources pour ajouter un bouton dans la form de l'appli, mais pas dans la fenetre de son choix. (ou toutes)
|
|
lundi 31 mars 2008 à 11:08:59 |
Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d
|
hello
Je relance le sujet ... j'ai bien avancé en reprenant les sources dont PCPT parlait. Ca marche très bien pour la barre du programme mais beaucoup moins avec une fenetre quelconque.
Avec le code suivant j'arrive parfaitement à gérer le bouton et à le "coller" à l'intérieur n'importe quelle fenêtre, mais pas dans la barre de titre. Ici le bouton est collé dans le coin gauche supérieur de la fenêtre (donc juste sous la barre de titre) (je sais, le code n'est pas clean, mais c'est du test.)
Public Sub InstallBouton() Dim FormRect As Rect sonparent = 656502 '3474518 'laFrm.hwnd Call GetWindowRect(sonparent, FormRect) ButtonHwnd& = CreateWindowEx(0&, "Button", "*", &H40000000, FormRect.Right - FormRect.Left - 22, 0, 14, 14, sonparent, 0&, App.hInstance, 0&) Call ShowWindow(ButtonHwnd&, 1) WHook = SetWindowsHookEx(4, AddressOf HookProc, 0, App.ThreadID) Call SetWindowLong(ButtonHwnd&, GWL_EXSTYLE, &H80) Call SetParent(ButtonHwnd&, sonparent) End Sub
Public Sub DesinstallBouton() Call UnhookWindowsHookEx(WHook) Call SetParent(ButtonHwnd&, Form1.hWnd) End Sub
Private Function HookProc&(ByVal nCode&, ByVal wParam&, Inf As CWPSTRUCT) Dim FormRect As Rect Static LastParam&
If Inf.hWnd = ButtonHwnd& Then If Inf.Message = &H82 Then 'destroy Form1.Label1.Caption = "Suppression bouton" Call DesinstallBouton End If If Inf.Message = 243 Then 'click Form1.Label1.Caption = "Appui sur le bouton" End If End If
If Inf.hWnd = sonparent Then If Inf.Message = WM_NCPAINT Or Inf.Message = WM_MOVE Then Call GetWindowRect(sonparent, FormRect) Call SetWindowPos(ButtonHwnd&, 0, 0, 0, 17, 14, SWP_FRAMECHANGED) Else End If End If End Function
le hic c'est que je n'arrive pas à intercepter les messages pour une fenêtre quelconque, et du coup, pas moyen de repositionner le bouton si la fenêtre est déplacée. ici, le message WM_NCPAINT ou WM_MOVE n'est jamais traité. Normal, vous me direz car j'ai mis App.ThreadID quand j'ai crée le hook. Mais je n'arrive pas à utiliser un autre ThreadID que celui-ci. Faire un getparent de la variable "sonparent" (qui ne veut rien dire), renvoie 0.
C'est un peu confus, mais si quelqu'un a une idée, je suis preneur. Merci !!!
|
|
lundi 31 mars 2008 à 12:49:20 |
Re : Boutons dans TOUTES les barres de titres

PCPT
|
si tu veux qu'on teste, çà serait pas mal de copier les types et api ;)
|
|
lundi 31 mars 2008 à 14:48:25 |
Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d
|
Merci de ta réponse. Je remets tout proprement et je rajoute un findwindow sur une fenêtre calculatrice (calculator sur mon pc) D'ailleurs en rajoutant ce findwindow, je m'aperçois que je n'ai pas la place d'afficher mon contrôle supplémentaire sur une fenêtre notepad. (avec le menu, les scrollbars et la zone de texte, il ne reste plus de place) Il me faut donc vraiment trouver un moyen de placer ce bouton dans la barre de titre et faire en sorte que le bouton se repositionne automatiquement.
voici donc le code complet : (dans un module) Option Explicit Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As Rect) As Long Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function 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) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook&) As Long Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Public Declare Function SetActiveWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hWnd As Long) As Long Private Declare Function GetLastError Lib "kernel32" () As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Type Rect Left As Long Top As Long Right As Long Bottom As Long End Type Private Type CWPSTRUCT lParam As Long wParam As Long Message As Long hWnd As Long End Type Const WM_LBUTTONDOWN = &H201 Const WM_MOVE = &H3 Const WM_SETCURSOR = &H20 Const WM_NCPAINT = &H85 Const WM_COMMAND = &H111 Const SWP_FRAMECHANGED = &H20 Const GWL_EXSTYLE = -20 Private WHook& Private ButtonHwnd As Long Public laFrm As Form Dim sonparent As Long
Public Sub InstallBouton() Dim FormRect As Rect sonparent = FindWindow(vbNullString, "Calculator") If sonparent = 0 Then End ButtonHwnd& = CreateWindowEx(0&, "BUTTON", "*", &H40000000, FormRect.Right - FormRect.Left - 22, 0, 14, 14, sonparent, 0&, App.hInstance, 0&) Call ShowWindow(ButtonHwnd&, 1) WHook = SetWindowsHookEx(4, AddressOf HookProc, 0, App.ThreadID) If WHook = 0 Then MsgBox "err" End End If Call SetWindowLong(ButtonHwnd&, GWL_EXSTYLE, &H80) Call SetParent(ButtonHwnd&, sonparent) End Sub
Public Sub DesinstallBouton() Call UnhookWindowsHookEx(WHook) Call SetParent(ButtonHwnd&, Form1.hWnd) End Sub
Private Function HookProc&(ByVal nCode&, ByVal wParam&, Inf As CWPSTRUCT) Dim FormRect As Rect Static LastParam&
If Inf.hWnd = ButtonHwnd& Then If Inf.Message = &H82 Then 'destroy 'Form1.Label1.Caption = "Suppression bouton" Call DesinstallBouton End If If Inf.Message = 243 Then 'click Form1.Label1.Caption = "Appui sur le bouton" 'Call DesinstallBouton End If End If
If Inf.hWnd = sonparent Then If Inf.Message = WM_NCPAINT Or Inf.Message = WM_MOVE Then Call GetWindowRect(sonparent, FormRect) Call SetWindowPos(ButtonHwnd&, 0, 0, 0, 17, 14, SWP_FRAMECHANGED) Else End If End If End Function
il y a aussi une form tout simple avec qui appelle le bazar :
Private Sub Form_Load() InstallBouton End Sub
Private Sub Form_Unload(Cancel As Integer) DesinstallBouton End Sub
Merci d'avance. Un sacré casse-tête pour moi.
|
|
mercredi 2 avril 2008 à 16:15:42 |
Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d
|
personne ne peut m'aider ? ou c'est mon explication qui n'est pas claire :-)
|
|
mercredi 2 avril 2008 à 19:00:52 |
Re : Boutons dans TOUTES les barres de titres

PCPT
|
salut, pas eu le temps... je jette un oeil dans la soirée (sans promesse  ) ++ Prenez un instant pour répondre à ce sondage svp 
|
|
mercredi 2 avril 2008 à 21:48:50 |
Re : Boutons dans TOUTES les barres de titres

PCPT
|
re, après quelques tests, j'arrive à poser le bouton sur la fenêtre CALC ou autre, ou libre (pas de Parent) mais pas non plus directement dans la barre de titre (sauf la form de l'appli) j'ai pas trop le temps en ce moment donc j'vais pas pouvoir t'aider des masses  essaye de faire un tour sur [ Lien ] , il y a peut-être un code adéquat... et pour le subclassing complet (pas que dans le thread de l'appli) tu peux regarder cette sourcebon courage Prenez un instant pour répondre à ce sondage svp 
|
|
jeudi 3 avril 2008 à 09:08:00 |
Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d
|
Merci. Je vais continuer à chercher. Je suis étonné que le sujet n'ait jamais été abordé ! (enfin il me semble)
|
|
Cette discussion est classée dans : boutons, ajouter, barres, fenêtres, titres
Répondre à ce message
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : TEST RéSEAURE : TEST RéSEAU par klachinkof
Cliquez pour lire la suite par klachinkof
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|