Page 1 sur 1

[RESOLU] Equivalent clavier Ctrl + F5

Publié : dim. 05/déc./2021 15:21
par PhM
Bonjour,
Après avoir ouvert par le programme une page html, j'aimerai la mettre à jour régulièrement par l'équivalent programme des touches Ctrl + F5 pour rafraichir la page déjà ouverte (sans ouvrir un nouvel onglet dans le navigateur).
Avez-vous la solution pour cela ???

Re: Equivalent clavier Ctrl + F5

Publié : dim. 05/déc./2021 20:01
par TazNormand
Salut,

comme ça peut-être :

Code : Tout sélectionner

  refreshdelay=5000
  If OpenWindow(0, 0, 0, 1024, 768, "WebGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    WebGadget(0, 10, 10, 1000, 700, "http://placeimg.com/640/480/any") 
    ;SetGadgetAttribute(0, #PB_Web_NavigationCallback, @NavigationCallback())
    
    refstart.q  = ElapsedMilliseconds()
    Delay(1)
    Debug refstart

    Repeat
      reftime.q =ElapsedMilliseconds()
      If reftime % refreshdelay = 0        
        Debug "refresh after "+Str(refreshdelay)+" milliseconds"
        SetGadgetState(0,#PB_Web_Refresh)
      EndIf
      
    Until WindowEvent() = #PB_Event_CloseWindow 
  EndIf

Re: Equivalent clavier Ctrl + F5

Publié : lun. 06/déc./2021 7:04
par PhM
Merci TazNormand pour ton approche.

Si j'ai bien compris, cette solution ne fonctionne que dans le cadre d'une fenêtre WebGadget().

Mon souhait serait de rafraichir une page web dans le navigateur par défaut de Windows et ta méthode ne correspond pas à ce cas.

Je pensai qu'il y avait une possibilité de simuler des touches du clavier (Ctrl F5) en commandes programmées, ce qui ne semble pas être simple...

Re: Equivalent clavier Ctrl + F5

Publié : lun. 06/déc./2021 15:22
par falsam
Ce petit code te permet de rafraichir une page web

Principe
- Utiliser le Desktop comme handle de fenêtre.
- Créer une boucle en systray pouvant être interrompu avec la touche Escape.
-- Dans la boucle :
--- Un delay d'attente entre deux rafraichissement.
--- Envoyer/relacher la touche Controle + F5 (API Windows)
--- Tester la touche Escape pour sortir de la boucle

Code : Tout sélectionner

Define WindowID, Message.s

;Utiliser le DeskTop comme handle de fenêtre.
WindowID = GetDesktopWindow_()

;Créer un processus en Systray
SysTray = AddSysTrayIcon(#PB_Any, WindowID, LoadIcon_( 0, #IDI_EXCLAMATION ) );
SysTrayIconToolTip(SysTray, "Presser la touche Escape" +#CRLF$+ "pour interrompre le rafraichissement")

;Demander à l'utilisateur de donner le focus à un navigateur 
Message = "Fermez ce message d'information" + #CRLF$ + 
          "puis cliquez sur l'onglet de la page que vous voulez rafraichir automatiquement." + #CRLF$ +
          "Touche Escape pour terminer le rafraichissement"

MessageRequester("Information", Message)

;Lancer le processus de rafraichissement toutes les 2 secondes
Repeat 
  Delay(2000)
  res = keybd_event_(#VK_CONTROL,0,0,0)    ;Appuyer sur CTRL
  res = keybd_event_(#VK_F5,0,0,0)         ;Appuyer sur F5
  res = keybd_event_(#VK_F5,0,2,0)         ;Relacher F5
  res = keybd_event_(#VK_CONTROL,0,2,0)    ;Relacher CTRL
Until GetAsyncKeyState_(#VK_ESCAPE) & $1

;Le raffraichissment est interrompu
MessageRequester("Information", "Rafraichissement interrompu.")

Re: Equivalent clavier Ctrl + F5

Publié : mar. 07/déc./2021 8:34
par PhM
Merci Falsam pour ton exemple qui fonctionne.
Néanmoins, je reste surpris qu'il n'y ait pas de méthode plus simple pour simuler l'appui de touches du clavier :!:
Mais, tu n'y est pour rien...

Re: Equivalent clavier Ctrl + F5

Publié : mar. 07/déc./2021 10:27
par falsam
Plus simple nativement PureBasic il y a pas. Par contre le SysTray n'est pas obligatoire. Ca donnait la possibilité de créer un menu.

On peut donc faire plus simple.

Code : Tout sélectionner

Define WindowID, Message.s

;Demander à l'utilisateur de donner le focus à un navigateur 
Message = "Fermez ce message d'information" + #CRLF$ + 
          "puis cliquez sur l'onglet de la page que vous voulez rafraichir automatiquement." + #CRLF$ +
          "Touche Escape pour terminer le rafraichissement"

MessageRequester("Information", Message)

;Lancer le processus de rafraichissement toutes les 2 secondes
Repeat 
  Delay(2000)
  res = keybd_event_(#VK_CONTROL,0,0,0)    ;Appuyer sur CTRL
  res = keybd_event_(#VK_F5,0,0,0)         ;Appuyer sur F5
  res = keybd_event_(#VK_F5,0,2,0)         ;Relacher F5
  res = keybd_event_(#VK_CONTROL,0,2,0)    ;Relacher CTRL
Until GetAsyncKeyState_(#VK_ESCAPE) & $1

;Le raffraichissment est interrompu
MessageRequester("Information", "Rafraichissement interrompu.")
La seule partie importante est dans la boucle Repeat.

Re: Equivalent clavier Ctrl + F5

Publié : mar. 07/déc./2021 10:48
par falsam
Je viens de trouver une liste de "Virtual Key Codes" que je ne connaissais pas.
http://www.kbdedit.com/manual/low_level_vk_list.html

et on y trouve VK_BROWSER_REFRESH pour actualiser le navigateur.

Donc on peut faire encore plus court dans la boucle repeat.

Code : Tout sélectionner

Repeat 
  Delay(2000)
  res = keybd_event_(#VK_BROWSER_REFRESH,0,0,0) 
Until GetAsyncKeyState_(#VK_ESCAPE) & $1
et ca fonctionne ^.^ Yeahhhhh i'm happy.

Re: Equivalent clavier Ctrl + F5

Publié : mar. 07/déc./2021 10:58
par Ar-S
Le delay n'est pas gênant dans le gestionnaire de tâche ?
Perso j'aurai mis une fen invisible et un timer de 2s

Re: Equivalent clavier Ctrl + F5

Publié : mar. 07/déc./2021 11:18
par PhM
Merci Falsam,
Ton dernier message sur la base de VK_BROWSER_REFRESH est vraiment cool, je prends !
Et, ton lien est à conserver :idea:
Encore merci de t’être penché sur ce cas.

Re: [RESOLU] Equivalent clavier Ctrl + F5

Publié : mer. 08/déc./2021 23:28
par Ekim
Bonsoir à tous

Puisqu'on est dans le sujet Webgadget j'aimerais en profiter pour demander la méthode si l'on veux effectuer un Ctrl + A pour la sélection du
contenu du fameux gadget en cliquant sur un bouton, en espérant que cette question puisse accessoirement profiter ce topic :P