Code source qui fait râler PB

Programmation d'applications complexes
mangatome
Messages : 80
Inscription : mer. 29/déc./2004 13:19
Contact :

Code source qui fait râler PB

Message par mangatome »

Ca vient de chez moi ou bien?

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
; 
; Explication du programme :
; Lier une fenêtre au bureau. Ainsi, quand on réduit les applications, cette fenêtre reste visible.
; Uniquement pour Win 2000 et XP

; Création de la fenêtre liée au bureau
OpenWindow(0, 0, 0, 100, 100, #PB_Window_BorderLess | #PB_Window_ScreenCentered, "Liée au bureau", GetShellWindow_())
; Il suffit de mettre en parent la fenêtre qui représente le bureau
; La fonction GetShellWindow_() permet de récupérer le handle du bureau

; Création de la GadgetList
CreateGadgetList(WindowID())

ButtonGadget(0, 0, 0, 100, 100, "Quitter")

Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_Event_Gadget
    Select EventGadgetID()
      Case 0 ; Appui sur le bouton quitter
        Event = #PB_EventCloseWindow
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow
Image
http://www.cybisoft.net - mes jeux, mods, tools en PB et autres languages :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Essaye de récupérer le handle comme ça:

Code : Tout sélectionner

If OpenLibrary(0, "user32.dll")
  *ShellWindow = IsFunction(0,"GetShellWindow")
  If *ShellWindow
    hShellWindow = CallFunctionFast(*ShellWindow)
  EndIf
  CloseLibrary(0)
EndIf
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Chez moi aussi, ça plante :roll:

Avec ce qu'il y a dessous normalement c'est bon :D


Procedure GetShellWindow()
sysdir$ = Space (255) : GetSystemDirectory_ ( @sysdir$, 255) : If Right (sysdir$, 1) <> "\" : sysdir$ + "\" : EndIf
lib = OpenLibrary ( #PB_Any , sysdir$+ "user32.dll" )
If lib
res = CallFunction (lib, "GetShellWindow" )
CloseLibrary (lib)
EndIf
ProcedureReturn res
EndProcedure

; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
; Lier une fenêtre au bureau. Ainsi, quand on réduit les applications, cette fenêtre reste visible.
; Uniquement pour Win 2000 et XP

; Création de la fenêtre liée au bureau
OpenWindow (0, 0, 0, 100, 100, #PB_Window_BorderLess | #PB_Window_ScreenCentered , "Liée au bureau" , GetShellWindow())
; Il suffit de mettre en parent la fenêtre qui représente le bureau
; La fonction GetShellWindow_() permet de récupérer le handle du bureau

; Création de la GadgetList
CreateGadgetList ( WindowID ())

ButtonGadget (0, 0, 0, 100, 100, "Quitter" )

Repeat
Event = WaitWindowEvent ()

If Event = #PB_Event_Gadget
Select EventGadgetID ()
Case 0 ; Appui sur le bouton quitter
Event = #PB_EventCloseWindow
EndSelect
EndIf

Until Event = #PB_EventCloseWindow
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

C'est exactement ce que j'ai déjà mis! :?
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

je sais mais lorsque j'ai posté il n'y avait pas de message. J'ai pas actualisé :)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

le fichier user32.lib n'est peut-être pas complet, le code de LSI est peut-être une partie d'un de ses codes ou il déclarait l'ouverture de la dll

A confirmer
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Pour faire ça, j'ai changé de principe, je te conseille d'utiliser ceci :

Code : Tout sélectionner

OpenWindow(0, 0, 0, 100, 100, #PB_Window_BorderLess | #PB_Window_ScreenCentered, "Lier au bureau") 

SetParent_(WindowID(), FindWindow_(0, "Program Manager"))

CreateGadgetList(WindowID()) 

ButtonGadget(0, 0, 0, 100, 100, "Quitter")

Repeat 
  Event = WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget 
    Select EventGadgetID() 
      Case 0 
        Event = #PB_EventCloseWindow 
    EndSelect 
  EndIf 
  
Until Event = #PB_EventCloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
mangatome
Messages : 80
Inscription : mer. 29/déc./2004 13:19
Contact :

Message par mangatome »

ok ça marche, merci bien :)
http://www.cybisoft.net - mes jeux, mods, tools en PB et autres languages :)
Répondre