Page 1 sur 1

Clique impossible hors de la fenêtre

Publié : lun. 27/févr./2006 0:31
par Dorian
Bonjour

J'avais trouvé sur ce forum je crois un code qui permettais de garder une fenêtre (ou ...requester) au premier plan en empêchant les cliques hors de la fenêtre et les combinaison du style ALT + TAB ou encore ALT + F4 ou CTRL + ALT + SUPPR.

Mais j'ai pas réussi à le retrouvé et à disparu de mon pc.

Es-ce que quelqu'un pourrait me donner ce code ou un autre faisant la même chose svp ?

Publié : lun. 27/févr./2006 12:45
par CameleonTH
Pour le CTRL + ALT + SUPPR tu peut toujour utiliser la librairie PBOSL (pas sur du nom) et killer taskmgr.exe.
Moi je fais comme sa.

Publié : lun. 27/févr./2006 14:01
par AWEAR
Si j'ai bien compris ce que tu veux, ce code devrait aller :wink:, à toi de l'adapter :

Code : Tout sélectionner

OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "au")
OpenWindow(1, 0, 0, 200, 200, #PB_Window_WindowCentered, "test", WindowID(0))
CreateGadgetList(WindowID())
ButtonGadget(0, 50, 50, 50, 20, "test")
OpenLibrary(0, "user32.dll")
Repeat
bruit.b = #False
z = CallFunction(0, "GetKeyState", 1)
While CallFunction(0, "GetKeyState", 1) <> 1 And CallFunction(0, "GetKeyState", 1) <> 0 And WindowMouseX() = -1 And WindowMouseY() = - 1
If bruit = #False
CallFunction(0, "MessageBeep", 5)
bruit = #True
EndIf
WindowEvent()
Delay(1)
Wend
Until WaitWindowEvent() = #PB_Event_Gadget And EventGadgetID() = 0
CloseWindow(1)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

Publié : lun. 27/févr./2006 18:18
par Dorian
CameleonTH a écrit :Pour le CTRL + ALT + SUPPR tu peut toujour utiliser la librairie PBOSL (pas sur du nom) et killer taskmgr.exe.
Moi je fais comme sa.
C'est déjà un bon début ^^.

@ AWEAR : désolé mais c'est pas sa :oops:

En fait je cherche à faire que l'on ne puisse pas clique hors de ma fenetre ou que ces clique ne soit pas pris en compte et que tout les truc susceptibe de fermer ou cacher ma fenetre par le clavier soit impossible.

mais je trouve tjr pas ce fichu code ^^.

Publié : lun. 27/févr./2006 18:35
par CameleonTH
Sinon pour eviter que l'on clique hors de ta fenetre tu n'a qu'a mettre ta fenetre en pleine ecran et en borderless.
Ou sinon tu peut toujour vérifier la postition de la souris et si elle est hosr de la fenetre sa la replace sur la fenetre.

Publié : lun. 27/févr./2006 18:43
par Anonyme
Pour la souris, tu peut toujours tester sa position à l'interieur de la fenetre, si elle sort, tu la remplace dans la fenetre.
Pour les touches, regarde du coté des api (j'me rappelle plus trop où)
fait un tour sur codes-sources.

@+

Publié : lun. 27/févr./2006 20:39
par AWEAR
Bon alors ça cette fois ça devrait aller, impossible de désactiver la fenêtre tant que tu cliques pas sur le bouton. Pas visible dans le Gestionnaire de Tâches, visible avec Alt + Tab, mais ne peut normalement pas perdre le focus :

Code : Tout sélectionner

OpenLibrary(0, "user32.dll")
Procedure.s WindowsEnu()
 Static Flag,hWnd
 
  Repeat
    If Flag=0
      hWnd = CallFunction(0, "FindWindowA", 0, 0 )
      Flag=1
    Else
      hWnd = CallFunction(0, "GetWindow", hWnd, 2)
    EndIf
    
    If hWnd <> 0
      If CallFunction(0, "GetWindowLongA", hWnd, -16) & $10000000 = $10000000; pour lister que les fenêtres visibles
        If CallFunction(0, "GetWindowLongA", hWnd, -20) & 256 <> 256 ; pour lister que les fenêtres qui ne sont pas des ToolWindow ou barre d'outils
          retour.s = Space(256)
          CallFunction(0, "GetWindowTextA", hWnd, retour, 256)
          If retour<>"" : Break : EndIf
        EndIf
      EndIf
    Else
      Flag=0 
    EndIf
  Until hWnd=0
  ProcedureReturn retour  
EndProcedure

Procedure GetHandl(WindowsName.s)
 retour= CallFunction(0, "FindWindowA", 0, WindowsName)
 ProcedureReturn retour
EndProcedure

Procedure Tim()
CallFunction(0, "SetForegroundWindow", WindowID())
EndProcedure

Procedure Time(TimerId,Delay,ProcedureAdress)
  CallFunction(0, "SetTimer", WindowID(),TimerId,Delay,ProcedureAdress)
EndProcedure

Procedure TimeKill(TimerId)
  CallFunction(0, "KillTimer", WindowID(),TimerId)
EndProcedure
OpenWindow(1, 0, 0, 0, 0, #PB_Window_Invisible, "", CallFunction(0, "GetDesktopWindow"))
OpenWindow(0, 0, 0, 500, 500, #PB_Window_ScreenCentered, "test", WindowID(1))
CreateGadgetList(WindowID())
ButtonGadget(0, 0, 0, 50, 20, "Ok")

Procedure MakeRequester(WindowId, State)
State =  1 - State
If state = 0
Time(0, 1, @tim())
Else
TimeKill(0)
EndIf
x.s = WindowsEnu()
While x
If GetHandl(x) <> WindowId
CallFunction(0, "EnableWindow", GetHandle(x), State)
EndIf
x = WindowsEnu()
Wend
EndProcedure
MakeRequester(WindowID(), #True)
Repeat
Until WaitWindowEvent() = #PB_Event_Gadget And EventGadgetID() = 0
MakeRequester(WindowID(), #False)
S'il y a besoin d'expliquation ( et bien sur que c'est ca que tu cherches :lol: ), demande et j'essayerais de répondre