Question: intercepter le clic droit sur un WebGadget [OK]
Question: intercepter le clic droit sur un WebGadget [OK]
Bonjour a tous,
La question est dans le titre.
Je cherche désespéramment a intercepter le clic droit sur un WebGadget.
J'ai essayé avec GetKeyState_(#VK_RBUTTON) et GetAsyncKeyState_(#VK_RBUTTON)
mais l'interception est globale quelle que soit l'application ou on fait clic droit, même le bureau.
Je cherche l'équivalent, mais uniquement pour mon application.
Auriez vous une solution a me proposer.
Merci a vous.
CAGE
La question est dans le titre.
Je cherche désespéramment a intercepter le clic droit sur un WebGadget.
J'ai essayé avec GetKeyState_(#VK_RBUTTON) et GetAsyncKeyState_(#VK_RBUTTON)
mais l'interception est globale quelle que soit l'application ou on fait clic droit, même le bureau.
Je cherche l'équivalent, mais uniquement pour mon application.
Auriez vous une solution a me proposer.
Merci a vous.
CAGE
Dernière modification par cage le ven. 05/avr./2019 21:31, modifié 1 fois.
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Question: intercepter le clic droit sur un WebGadget
Pour étayer ma demande, voici un bout de code qui illustre le problème.
La fenêtre comprend un Button, un WebGadget et une StatusBar
Les trois sont affichés et le menu Popup n'apparait que si on clique droit sur la partie au dessus ou au dessous du WebGadget, y compris la StatusBar
Si on fait disparaitre le WebGadget en cliquant sur le bouton, le clic droit fonctionne sur toute la fenêtre.
Le clic droit fonctionne aussi sur l'icône de systray.
L'icône est disponible iciMerci pour toute l'aide que vous pourrez m'apporter.
CAGE
La fenêtre comprend un Button, un WebGadget et une StatusBar
Les trois sont affichés et le menu Popup n'apparait que si on clique droit sur la partie au dessus ou au dessous du WebGadget, y compris la StatusBar
Si on fait disparaitre le WebGadget en cliquant sur le bouton, le clic droit fonctionne sur toute la fenêtre.
Le clic droit fonctionne aussi sur l'icône de systray.
L'icône est disponible ici
Code : Tout sélectionner
EnableExplicit
Declare appAbout()
Declare appHelp()
#winMain = 100
#bgcolor = 14474460 ; bgcolor = RGB(220,220,220) ; $00DCDCDC
Enumeration Menus
#menuMain
#menuTray
#menuPopup
EndEnumeration
Enumeration FormMenus
#about
#quit
#help
EndEnumeration
Enumeration Gadgets
#btn
#web
#status
#canvas
EndEnumeration
DataSection;Images
Image_App:
IncludeBinary "windows.ico"
EndDataSection
Enumeration Images
#Image_App
EndEnumeration
Global IconApp = CatchImage(#Image_App, ?Image_App)
ExamineDesktops()
#appWidth = 800
#appHeight = 600
Define X = (DesktopWidth(0)-#appWidth)/2
Define Y = (DesktopHeight(0)-#appHeight)/2
Define Titre$ = "Bonjour a tous - Question: comment intercepter le clic droit sur un WebGadget"
Define Flags = #PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_SystemMenu
If OpenWindow(#winMain, X, Y, #appWidth, #appHeight, Titre$, Flags)
CanvasGadget(#canvas, 0, 0, #appWidth, #appWidth, #PB_Canvas_Container)
StartDrawing(CanvasOutput(#canvas))
FillArea(0, 0, -1,#bgcolor)
StopDrawing()
ButtonGadget(#btn, 3, 3, 250, 25, "Afficher/MAsquer le WebGadget")
SetGadgetData(#btn, #True)
;; sans le WebGadget, le menu PopUp fonctionne sur toute la fenêtre
WebGadget (#web, 0, 100, #appWidth, 400, "purebasic.fr")
SetGadgetData(#web, #False)
CreateStatusBar(#status, WindowID(#winMain))
AddStatusBarField(#PB_Ignore)
CloseGadgetList()
AddSysTrayIcon(#winMain, WindowID(#winMain), IconApp)
If CreatePopupMenu(#menuPopup)
MenuItem(#help , "Aide"+Chr(9)+"F1")
MenuItem(#about , "A propos de l'application"+Chr(9)+"F2")
MenuBar()
MenuItem(#quit , "Quitter"+Chr(9)+"Ctrl+Q")
EndIf
Define Event
Repeat
Event = WaitWindowEvent(20)
; ; If Event = #PB_EventType_RightClick
; ; If GetKeyState_(#VK_RBUTTON)
; If GetAsyncKeyState_(#VK_RBUTTON)
; DisplayPopupMenu(#menuPopup, WindowID(#winMain))
; EndIf
Select Event
;---- Events MENUS
Case #PB_Event_Menu
Select EventMenu()
Case #about
appAbout()
Case #help
appHelp()
Case #quit
Break
EndSelect
;---- Events GADGETS
Case #PB_Event_Gadget
Select EventGadget()
Case #btn
SetGadgetData(#web, Bool(GetGadgetData(#web) = 0))
HideGadget(#web, GetGadgetData(#web))
EndSelect
Select EventType()
Case #PB_EventType_RightClick
DisplayPopupMenu(#menuPopup, WindowID(#winMain))
EndSelect
;---- Events SYSTRAY
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_RightClick
DisplayPopupMenu(#menuPopup, WindowID(#winMain))
EndSelect
;---- Events SYSTEM WINDOW
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
Procedure appHelp()
Debug "Procédure appHelp()"
EndProcedure
Procedure appAbout()
Debug "Procédure appAbout()"
EndProcedure
End
CAGE
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Question: intercepter le clic droit sur un WebGadget
Vieux code remis au gout du jour
Code : Tout sélectionner
Declare Start()
Declare onRightClick(nCode,wParam,lParam)
Declare onSelectItem()
Declare Exit()
Start()
Procedure Start()
OpenWindow(0, 0, 0, 800, 600, "Disable browser right click menu", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
;Disable the window (browser gadget) right click menu
hInstance=GetModuleHandle_(0)
lpdwProcessId=GetWindowThreadProcessId_(WindowID(0),0)
SetWindowsHookEx_(#WH_MOUSE,@onRightClick(), hInstance, lpdwProcessId)
WebGadget(1,0,0,800,600,"http://www.purebasic.com")
CreatePopupMenu(0)
MenuItem(1,"Open")
MenuItem(2,"Save")
MenuItem(3,"Exit")
;Déclencheur
BindEvent(#PB_Event_Menu, @onSelectItem())
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat : WaitWindowEvent() : ForEver
EndProcedure
Procedure onRightClick(nCode,wParam,lParam)
If wParam=#WM_RBUTTONDOWN
DisplayPopupMenu(0,WindowID(0))
ProcedureReturn 1
EndIf
ProcedureReturn 0
EndProcedure
Procedure onSelectItem()
Select EventMenu()
Case 1
Debug "Open"
Case 2
Debug "Save"
Case 3
Debug "Exit"
Exit()
EndSelect
EndProcedure
Procedure Exit()
End
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Question: intercepter le clic droit sur un WebGadget
Un grand merci falsam, cela fonctionne maintenant comme je le voulais.
Il y a quand même des gens bien dans le forum France.
CAGE
Il y a quand même des gens bien dans le forum France.
CAGE
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Question: intercepter le clic droit sur un WebGadget
Il y a un code plus général si ta demande varie à l'avenir. Il n'est pas à jour. Le titre c'est le << couteau suisse de Chris >>. Un gars bien qui me suggérait de m'enfiler par mes propres moyens du beurre du Poitou dans le rectum il y a huit ans. J'atteste que je ne lui en tiens pas rigueur, et qu'il s'agissait d'une figure élaborée de style à situation politique.
Mais son couteau suisse dont, il me semble, Chris indique l'origine, permettait de dicerner les différents handles de zones graphiques pointées par la souris avec handles d'apparenté, le tout sous Windows uniquement.
Mais son couteau suisse dont, il me semble, Chris indique l'origine, permettait de dicerner les différents handles de zones graphiques pointées par la souris avec handles d'apparenté, le tout sous Windows uniquement.
Re: Question: intercepter le clic droit sur un WebGadget
Bonjour Ollivier,
J'ai bien trouvé le code (du moins je crois), mais il me sort un erreur.
Merci quand même.
CAGE
J'ai bien trouvé le code (du moins je crois), mais il me sort un erreur.
Code : Tout sélectionner
Repeat
GetCursorPos_(CurPos)
HObjet = WindowFromPoint_(CurPos\x, CurPos\y) ; <-- Line 105: WindowFromPoint_(): Incorrect number of parameters.
Ce code commence a dater.The WindowFromPoint function retrieves the handle of the window that contains the specified point.
HWND WindowFromPoint(
POINT Point // structure with point
);
Parameters
Point
Specifies a POINT structure that defines the point to be checked.
Merci quand même.
CAGE
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Question: intercepter le clic droit sur un WebGadget
Bonjour CaGe,
au vu de l'erreur mentionnée et, si mes souvenirs sont bons, c'est, il me semble, une modification de la fonction API, par Microsoft, une mise à jour.
Soit la fonction existe sous une autre forme :
Soit la fonction n'est plus disponible. Auquel cas, une aide en ligne a indiqué durant quelques années, la manière de la remplacer. Et je n'ai pas suivi cette mise à jour.
Soit, cas moins probable, la fonction n'est plus disponible définitivement.
au vu de l'erreur mentionnée et, si mes souvenirs sont bons, c'est, il me semble, une modification de la fonction API, par Microsoft, une mise à jour.
Soit la fonction existe sous une autre forme :
Code : Tout sélectionner
; ancienne forme
Result = WindowFromPoint_(x, y)
; nouvelle forme
Define Coord.POINT
Coord\x = x
Coord\y = y
Result = WindowFromPoint_(Coord)
Soit, cas moins probable, la fonction n'est plus disponible définitivement.
Re: Question: intercepter le clic droit sur un WebGadget
Ça semble être le 3ème cas :
https://docs.microsoft.com/en-us/window ... wfrompoint
En espérant que ça fonctionne.
Il y a aussi une commande dans la page URL donnée ci-dessus : ChildWindowFromPoint_(...) qui est l'apparenté "descendant". Peut-être une piste pour décomposer aussi ce qui est dans la page Web en différents handles. A suivre...
https://docs.microsoft.com/en-us/window ... wfrompoint
Code : Tout sélectionner
Define Co.POINT
Co\x = x
Co\y = y
Handle = WindowFromPoint_(Co)
Il y a aussi une commande dans la page URL donnée ci-dessus : ChildWindowFromPoint_(...) qui est l'apparenté "descendant". Peut-être une piste pour décomposer aussi ce qui est dans la page Web en différents handles. A suivre...
Re: Question: intercepter le clic droit sur un WebGadget
Bonsoir,
Le problème étant résolu, je poste ci-dessous le code qui fonctiooneMerci pour votre aide précieuse.
CAGE
Le problème étant résolu, je poste ci-dessous le code qui fonctioone
Code : Tout sélectionner
EnableExplicit
Declare appAbout()
Declare appHelp()
Declare onMouse(nCode,wParam,lParam)
#winMain = 100
#bgcolor = 14474460 ; bgcolor = RGB(220,220,220) ; $00DCDCDC
Enumeration Menus
#menuMain
#menuTray
#menuPopup
EndEnumeration
Enumeration FormMenus
#about
#quit
#help
EndEnumeration
Enumeration Gadgets
#btn
#web
#status
#canvas
EndEnumeration
DataSection;Images
Image_App:
IncludeBinary "windows.ico"
EndDataSection
Enumeration Images
#Image_App
EndEnumeration
Global IconApp = CatchImage(#Image_App, ?Image_App)
ExamineDesktops()
#appWidth = 800
#appHeight = 600
Define X = (DesktopWidth(0)-#appWidth)/2
Define Y = (DesktopHeight(0)-#appHeight)/2
Define Titre$ = "Bonjour a tous - Question: comment intercepter le clic droit sur un WebGadget"
Define Flags = #PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_SystemMenu
If OpenWindow(#winMain, X, Y, #appWidth, #appHeight, Titre$, Flags)
CanvasGadget(#canvas, 0, 0, #appWidth, #appWidth, #PB_Canvas_Container)
StartDrawing(CanvasOutput(#canvas))
FillArea(0, 0, -1,#bgcolor)
StopDrawing()
ButtonGadget(#btn, 3, 3, 250, 25, "Afficher/MAsquer le WebGadget")
SetGadgetData(#btn, #True)
;; sans le WebGadget, le menu PopUp fonctionne sur toute la fenêtre
WebGadget (#web, 0, 100, #appWidth, 400, "purebasic.fr")
SetGadgetData(#web, #False)
CreateStatusBar(#status, WindowID(#winMain))
AddStatusBarField(#PB_Ignore)
CloseGadgetList()
AddSysTrayIcon(#winMain, WindowID(#winMain), IconApp)
If CreatePopupMenu(#menuPopup)
MenuItem(#help , "Aide"+Chr(9)+"F1")
MenuItem(#about , "A propos de l'application"+Chr(9)+"F2")
MenuBar()
MenuItem(#quit , "Quitter"+Chr(9)+"Ctrl+Q")
EndIf
Define hInstance=GetModuleHandle_(0)
Define lpdwProcessId=GetWindowThreadProcessId_(WindowID(#winMain),0)
SetWindowsHookEx_(#WH_MOUSE, @onMouse(), hInstance, lpdwProcessId)
Define Event
Repeat
Event = WaitWindowEvent(20)
Select Event
;---- Events MENUS
Case #PB_Event_Menu
Select EventMenu()
Case #about
appAbout()
Case #help
appHelp()
Case #quit
Break
EndSelect
;---- Events GADGETS
Case #PB_Event_Gadget
Select EventGadget()
Case #btn
SetGadgetData(#web, Bool(GetGadgetData(#web) = 0))
HideGadget(#web, GetGadgetData(#web))
EndSelect
Select EventType()
Case #PB_EventType_RightClick
DisplayPopupMenu(#menuPopup, WindowID(#winMain))
EndSelect
;---- Events SYSTRAY
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_RightClick
DisplayPopupMenu(#menuPopup, WindowID(#winMain))
EndSelect
;---- Events SYSTEM WINDOW
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
Procedure onMouse(nCode,wParam,lParam)
Select wParam
Case #WM_RBUTTONDOWN
DisplayPopupMenu(#menuPopup,WindowID(#winMain))
Debug "onMouse=RIGHT_BUTTON_DOWN"
ProcedureReturn 1
Case #WM_LBUTTONDOWN
Debug "onMouse=LEFT_BUTTON_DOWN"
EndSelect
ProcedureReturn 0
EndProcedure
Procedure appHelp()
Debug "Procédure appHelp()"
EndProcedure
Procedure appAbout()
Debug "Procédure appAbout()"
EndProcedure
End
CAGE
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr