Accueil > Forum > > > > Savoir si une application est en plein écran
Savoir si une application est en plein écran
mercredi 26 mars 2008 à 15:19:55 |
Savoir si une application est en plein écran

bionicleman
|
Bonjour, Je suis entrain de développer une application et je voudrais qu'elle "remplace" le programme de mise en veille de windows. J'ai un bout de code que j'ai fais. J'ai utilisé les fonctions FindWindow & GetWindowRect dont j'ai pris exemple [ Lien ]Voilà mon code : procedure TForm1.Timer1Timer(Sender: TObject); var Position: TPoint; Handle: Thandle; winrect: Trect; begin //timer de detection des mouvements de la souris et de mise en veille GetCursorPos(Position); label1.Caption:=inttostr(Position.Y); label2.caption:=inttostr(Position.X); if Position.X = mouseX then begin if Position.Y = mouseY then begin if form6.label3.caption='Activée'then begin Handle:=FindWindow(nil, 'Media Player Classic'); GetWindowRect(Handle, WinRect); ifnot winrect.top=0then begin ifnot winrect.left=0then begin showmessage('veille on'); //SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1); end else showmessage('veille off'); //partie de test si veille off end; end; end; end; mouseX:=Position.X; mouseY:=Position.Y; end; Le problème, c'est qu'aucun des deux message (veille on & veille off) ne s'affiche lors de l'execution du timer (les autres conditions étant vraies). Merci 
|
|
mercredi 26 mars 2008 à 18:29:55 |
Re : Savoir si une application est en plein écran

rt15
|
Réponse acceptée !
Salut, form6.label3.caption='Activée'
Ce truc est syntaxiquement correcte, mais bon, il pique un peu les yeux quand même, pour des raisons de perfs... (C'est encore le C qui déteind sur mon Delphi ça... ) La comparaison de chaînes est plus lourde que la comparaison d'entiers ou de Booléens. Poser un Boolean en private dans ta form peut améliorer les perfs. M'enfin c'est un détail contestable...
Attention à l'indentation, mais ça, c'est peut être le copier coller.
if Position.X = mouseX then begin if Position.Y = mouseY then begin if form6.label3.caption='Activée'then begin Handle:=FindWindow(nil, 'Media Player Classic'); GetWindowRect(Handle, WinRect); if not winrect.top = 0 then begin if not winrect.left = 0 then begin showmessage('veille on'); end else showmessage('veille off'); end; end; end; end;
Avec l'indentation, on voit que le else se rapporte au winrect.left, donc en cas de top = 0, rien ne se passe. Tu aurais probablement voulu écrire : if (winrect.top = 0) and (winrect.left = 0) then showmessage('veille off') else showmessage('veille on');
Attention de vérifer le handle retourné par FindWindow (Comparer à 0. Si différent de 0, c'est ok). Au fait, si c'est pour faire un écran de veille perso, pas besoin d'aller si loin. Tu peux conserver le prog de windows, et faire un .exe que tu renommes en heuuu... .scr si je ne m'abuse
|
|
mercredi 26 mars 2008 à 20:02:10 |
Re : Savoir si une application est en plein écran

bionicleman
|
Merci de cette réponse, je n'ai pas le temps de voir ce code maintenant, je verrais ça plus tard. Mon programme est enfait un "concentré" de programme : avec je lance mes vidéos, mes musiques, je lance certains programmes lorsqu'ils sont arrêtés ; cette partie qui met en veille l'écran se déclanche losque je ne touche plus à la souris (Position. X = mouseX,Position. Y = mouseY), puis la partie avec FindWindow et GetWindowRect doit vérifier que mon player ne soit plus en plein écran [car mon player désactive automatiquement l'écran de veille losqu'il est ouvert. Vous pourrez me dire de le fermer mais je ne le fairais pas : j'ai une télécommande  de mon lit, c'est le pied  ]. Bonne soirée =)
|
|
jeudi 27 mars 2008 à 06:54:05 |
Re : Savoir si une application est en plein écran

bionicleman
|
Bonjour, eh bien voilà j'ai testé le code, le message "veille off" s'affiche bien lorsque mon application n'est pas en plein écran, mais il s'affiche aussi lorsque mon application l'est... procedure TForm1.Timer1Timer(Sender: TObject); var Position: TPoint; Handle: Thandle; winrect: Trect; begin //timer de detection des mouvements de la souris et de mise en veille GetCursorPos(Position); label1.Caption:=inttostr(Position.Y); label2.caption:=inttostr(Position.X); if Position.X = mouseX then begin if Position.Y = mouseY then begin if form6.label3.caption='Activée' then begin Handle:=FindWindow(nil, 'Media Player Classic'); GetWindowRect(Handle, WinRect); if not (winrect.Top=0) and (winrect.left=0) then begin showmessage('veille on'); //SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1); end else showmessage('veille off'); end; end; end; mouseX:=Position.X; mouseY:=Position.Y; end;
|
|
jeudi 27 mars 2008 à 16:42:55 |
Re : Savoir si une application est en plein écran

rt15
|
Réponse acceptée !
not (winrect.Top=0) and (winrect.left=0) Avec des tests multiples, il faut faire attention aux parenthèses ou bien connaitre la priorité des opérateurs. Le not pourrait aussi bien s'appliquer sur le (winrect.Top=0) que sur le ((winrect.Top=0) and (winrect.left=0)) La première solution a plusieurs avantages : Elle marche quel que soit le langage. Ceux qui lisent le code et qui ne connaissent pas l'ordre de priorité (Moi par exemple  ) comprennent quand même. Elle ne prend pas de place dans le cerveau.  Donc pour lever l'ambiguité : not ((winrect.Top=0) and (winrect.left=0)) Plus généralement, tu devrais acquérir les méthodes te permettant de te dépatouiller de ce genre de problème tout seul. Delphi possède un débogueur permettant par exemple de faire du pas à pas dans les instructions, et d'espionner les valeurs des variables. Bon, c'est vrai que dans ton cas, c'est un peu compliqué car tu dois avoir le lecteur en plein écran... Mais rien ne t'empèche d'écrire manuellement les valeurs de winrect dans un TMemo par exemple. Pour finir, que tu ne tiennes pas compte de ma remarque sur la comparaison de chaîne, je l'admet... Certaines personne pourraient la contester. Par contre, concernant le test du retour de FindWindow, là y a pas photo -> faut tester !  On emploit pas une handle (Ou une variable...) si on est pas sûr qu'il est OK.
|
|
jeudi 27 mars 2008 à 18:14:15 |
Re : Savoir si une application est en plein écran

bionicleman
|
Bonjour bonjour !! Tout d'abord, merci à toi rt15 pour ces conseils que j'vais suivre =D Mon programme marche parfaitement grâce à toi !
|
|
jeudi 27 mars 2008 à 19:10:20 |
Re : Savoir si une application est en plein écran

cirec
|
Salut,
Pour connaitre l'état d'une application il y avait tout simplement :
Function GetAppState(Const aHandle : THandle):Integer; Var Placement : TWindowPlacement; Begin Placement.Length := SizeOf(TWindowPlacement); GetWindowPlacement(aHandle, @Placement); Result := Placement.showCmd; End;
//Pour tester un TButton et un TLabel Procedure Tfrm_Main.Button1Click(Sender: TObject); Const StrState : Array[0..10] Of String[14] = ('HIDE', 'SHOWNORMAL', 'SHOWMINIMIZED', 'SHOWMAXIMIZED', 'SHOWNOACTIVATE', 'SHOW', 'MINIMIZE', 'SHOWNA', 'RESTORE', 'SHOWDEFAULT', 'MAX'); Var HWnd : THandle; Begin HWnd := FindWindow(Nil, 'Éditeur du Registre'); If HWnd > 0Then Label1.Caption := StrState[GetAppState(HWnd)] Else Label1.Caption := 'Application non trouvée'; End;
Mais tu peux t'en servir plus simplement :
dans ton cas une fois que tu as le Handle du Média player :
If GetAppState(HandleMedia) = SW_SHOWMAXIMIZED Then ....
Mais je comprend pas vraiment ce que tu veux faire !!!!
Tu veux détecter si le screen saver est actif ou non ? @+ Cirec
|
|
vendredi 28 mars 2008 à 12:23:28 |
Re : Savoir si une application est en plein écran
|
Cette discussion est classée dans : application, handle, position, veille, winrect
Répondre à ce message
Sujets en rapport avec ce message
allumer éteindre / veille [ par Maniaxman ]
bonjour, j'ai trouvé ces deux fonctions si pour allumer et éteindre l'écran : SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);//é
Désactiver un bouton d'une application extérieure [ par nabil351974 ]
bonjour à toutes et à tous, comme le titre l'indique, y a -t-il un moyen de désactiver un bouton d'une application extérieure après un nombre de cliq
Trouver le nom d'un contrôle à partir de son handle ... [ par jnmchl ]
Bonjour,Je cherche à récupérer le nom d'un contrôle à partir de son handle. Bien sûr le contrôle concerné se situe dans une autre application que je v
ShowWindow(Application.Handle, SW_HIDE); [ par sarssor ]
Salut le code minimise mon programe, mais aucune autre fenêtre obtenir le focus [code=pas] procedure TForm1.Button1Click(Sender: TObject); begin Sho
Traducteur Delphi please ! [ par minipod ]
Un sympatique delphinaute m'a dit de faire ceci pour résoudre mon problème. Le problème c'est que je sais pas faire çà en Delphi. Est-ce que quelqu'un
position fenetre active [ par desstrain ]
Bonjour, je suis parvenu a récuperer la position de ma fenetre delphi grace à la methode : Screen.ActiveForm.ClientOrigin; mais cela ne fonctionne p
Reconnaitre et fermer une application sans handle [ par jmp77 ]
Bonjour à tous et toues,Voilà je voudrais pouvoir retrouver tous les processes qui tournent sur mon pc. Pour les process qui ont un handle je sais à p
Affichage dans une fenetre directX [ par blackharu ]
bonjour,Voilà j'ai une application faite avec directX dont je n'est pas les sources...Cependant en utilisant des fonctions windows...j'arrive à recupé
Comment selectionner le texte d'une autre application ? [ par globule ]
Bonjour, Comment selectionner le texte d'une autre application (en ayant son handle)J'ai trouvé la commande pour copier le texte :SendMessage(Handle,
récupérer le handle de winzip [ par hysteria74 ]
Bonjour,grace à la fonction ci dessous, je lance mon programme winzip pour zipper un fichier contenue dans le chamein (concatenation)ShellExecute( App
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit TECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVERTECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVER par ROMELARD Fabrice
Speaker : Nadia Ben El Kadi Configuration machine La session commence par la toute première question à se poser lors de la mise en place d'environnement SQL Server, la configuration des machines : Type de mac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SITECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SI par ROMELARD Fabrice
Speakers : Fabrice Barbin, Samuel Blanchard, Julien Lo Presti Titre Prometteur et attractif invitant à voir comment lier le composant ludique Kinect dans le cadre d'une structure IT classique, notamment au travers de la plat...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOURTECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOUR par ROMELARD Fabrice
KeyNotes du premier jour pour les développeurs. La session est principalement axée sur une des principales directions prise par Microsoft à travers tous ses nouveaux produits : Cloud privé ou public (Solution Azure) ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : BONJOUR A VOUSRE : BONJOUR A VOUS par pierrotk10d
Cliquez pour lire la suite par pierrotk10d
Logiciels
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 Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.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 LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|