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);//é
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
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
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
Récupération de police dans un HANDLE [ par vmsn ]
Bonjour, Voilà j'ai actuellement une application à réaliser qui contrôle une autre application (je réalise un module d'administration pour les modérat
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : SAVEDIALOGRE : SAVEDIALOG par JulioDelphi
Cliquez pour lire la suite par JulioDelphi
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|