Accueil > > > ACCÉDER À SON ORDINATEUR DEPUIS N'IMPORTE QUELLE MACHINE CONNECTÉE À INTERNET COMME SI C'ÉTAIT UN SITE WEB!
ACCÉDER À SON ORDINATEUR DEPUIS N'IMPORTE QUELLE MACHINE CONNECTÉE À INTERNET COMME SI C'ÉTAIT UN SITE WEB!
Information sur la source
Description
Alors voilà le concept: Imaginez que vous êtes chez un ami, votre ordinateur est allumé chez vous et connecté à Internet, et votre ami (qui a un mac par exemple) est lui aussi connecté à Internet. Et là, brusquement, vous auriez besoin de faire quelque chose à distance sur votre ordinateur, comme par exemple récupérer un fichier, lire vos mails, lancer un erveur réseau de Unreal Tournament ou même l'éteindre... Eh bien ce petit programme vous permet de faire tout cela en passant par une page web qui permet de contrôller votre ordinateur à distance. Il y a 3 fonctions principales: -Prendre le contrôle de la souris, et faire des captures d'écran répétées de ce qu'il y a sur votre moniteur [:D -Explorer vos fichiers comme avec l'explorateur de windows, télécharger ou uploader des fichiers [:O -Avoir une fenêtre comme la fenêtre MS-DOS dans laquelle vous pouvez tapper des commandes à distance et lire les résultats [:P Les seules conditions pour pouvoir l'utiliser sont: -Ne pas oublier de lancer le programme avant de partir de chez vous -Connaître votre addresse IP. Si pas exemple votre addresse IP est 123.456.789.123, il suffit de se connecter au site http://123.456.789.123 et le tour est joué! Evidemment, pour que tout le monde ne puisse pas faire impunément ce qu'il veut sur votre ordinateur, il y a une protection par mot de passe. Pour l'instant, le seul account est: Username=Feux et Password=666666. Pour le changer, il faut éditer la propriété "Accounts" du composant THTTPPasswordRequestFile qui est sur la fiche principale du projet, et vous pouvez réjoutter ou enlever des mots de passe. Simple, non? ATTENTION TOUTEFOIS A NE PAS LAISSER VOIR VOTRE PASSWORD PAR N'IMPORTE QUI, IL AURAIT ALORS ACCES A TOUT VOTRE ORDINATEUR!!!
Source
- Pour faire marcher le code, il faut déjà installer mon pack de composant FileSystem que vous pourrez trouver ici:
- http://www.delphifr.com/code.aspx?ID=27147
- Marche à suivre:
- -Installer FileSystem.dpk
- -Installer HTTPDistantAccess.dpk (inclus dans le zip de cette page)
- -Compiler le projet Project1.dpr
- -Le lancer.
-
- Lorsqu'on lance le projet, une fenêtre apparait, avec un bouton "Local test". Ce boutton permet de tester le server HTTP sur votre propre machine. C'est ce que j'ai fait lors de la capture d'écran, ce qui explique que l'image est récursive: la page web "photographiait" mon écran toutes les 2 secondes, puis se mettait à jour automatiquement, et ainsi de suite...
-
- J'ai testé mes composants JavaScript avec Netscape, ça a l'air de marcher à peu près, mais c'est moins joli qu'avec Internet Explorer.
Pour faire marcher le code, il faut déjà installer mon pack de composant FileSystem que vous pourrez trouver ici:
http://www.delphifr.com/code.aspx?ID=27147
Marche à suivre:
-Installer FileSystem.dpk
-Installer HTTPDistantAccess.dpk (inclus dans le zip de cette page)
-Compiler le projet Project1.dpr
-Le lancer.
Lorsqu'on lance le projet, une fenêtre apparait, avec un bouton "Local test". Ce boutton permet de tester le server HTTP sur votre propre machine. C'est ce que j'ai fait lors de la capture d'écran, ce qui explique que l'image est récursive: la page web "photographiait" mon écran toutes les 2 secondes, puis se mettait à jour automatiquement, et ainsi de suite...
J'ai testé mes composants JavaScript avec Netscape, ça a l'air de marcher à peu près, mais c'est moins joli qu'avec Internet Explorer.
Conclusion
Maintenant je vais parler des composants qui sont inclus dans le package.
J'ai déjà défini un nouveau type de collection (attention, il ne descend pas du TCollection de base de Delphi). C'est la classe TComponentCollection, qui descend de TPersistent. Sa particularité est de contenir des composants sans icône (qui sont enregistrés dans l'IDE via la fonction RegisterNoIcon de Delphi), et qui sont quand même accessibles depuis la fiche, comme par exemple les TMenuItem.
Ce type de collection a une propriété Owner, de type TComponent. Le composant Owner d'une collection doit implémenter l'interface IComponentCollectionOwner, qui a une seule fonction permettant d'accéder à la collection proprement dite. Les composants qui sont des items de la collection doivent implémenter l'interface IComponentCollectionItem, qui permet de retrouver l'Owner de la collection dont ils font partie, ce qui implique qu'un composant ne peut pas être un item de 2 collections différentes, et qu'un composant ne peut pas être l'owner de plusieurs TComponentCollection.
J'ai défini un descendant de TComponent qui implémente déjà toutes les méthodes nécessaires pour un IComponentCollectionItem, c'est la classe TComponentCollectionItem. J'ai programmé un property editor pour gérer les TComponentCollection, qui crée une arborescence (en effet, rien n'empèche un TComponentCollectionitem de posséder lui-même sa propre collection de composants :D)
Lorsqu'on programme un server Web, il faut gérer l'aspect Multithreading de la connection. C'est à dire qu'à chaque fois qu'un nouveau client se connecte, un nouveau thread de connection est créé du côté du server. C'est assez problématique avec Delphi, car la VCL n'est pas "thread-safe"...
Pour pallier à ce (petit) défaut, j'ai décidé de créer un descendant de TDataModule qui contient les données de chaque connection au serveur, c'est la classe TServerDataModule. Chaque instance est créée avec Owner=nil, ce qui permet d'éviter les problèmes de synchronisation de threads, et détruite dans le thread qui l'a créée. Dans la partie initialization de l'unité qui définit le descendant de TServerDataModule, il faut enregistrer la classe descendante avec un appel de la fonction RegisterClass. Pour créer un nouveau type de TServerDataModule, il faut aller dans le menu File->New->Other... puis choisir dans la rubrique HTTP l'item "Server data module". Ensuite, une nouvelle fiche de TDataModule est créée pas Delphi, avec une propriété publiée de type THTTPFiles.
Le composant principal du package HTTPDistantAccess est le composant THTTPDistantAccess. Il a une propriété qui est: ServerDataModuleClass, de type string. Il faut lui affecter un nom de classe de descendant de TServerDataModule valide. Cette classe est instanciée à chaque fois que le server HTTP initialise une nouvelle session.
Pour réaliser un serveur web, il faut ajoutter des HTTPFiles dans la propriété HTTPFiles du THTTPServerModule. J'en ai défini pusieurs classes:
-THTMLDocument: crée un document html. Voir plus bas. -THTTPDynamicGraphicFile: crée une image dynamiquement à chaque requête via un événement. Un autre événement sert à obtenir l'extension du graphique. -THTTPStaticGraphicFile: crée une image statique dont la donnée est dans les resources du programme. -THTTPDynamicFile: un document dynamique quelconque.
Le composant THTMLDocument est le plus important: c'est lui qui permet de faire des pages Web. Il publie une propriété HTMLObjects qui descend de TComponentCollection, et qui contient les objets qui apparaissent sur la page. Ces objets peuvent être de plusieurs types:
-THTMLRawCode: du code HTML brut, statique, stocké dans les resources du programme. -THTMLDynamicRawCode: la même chose, mais le code HTML est généré dynamiquement via un événement. -THTMLEdit: comme un TEDit, mais sur une page Web -THTMLButton, THTMLCombobox, THTMLListBox, THTMLMemo...: des contrôles HTML standards -THTMLGraphicObject: une image, avec une propriété HTTPGraphicFile qu'il faut relier à une THTTPGraphicFile comme défini plus haut. -D'autres encore que j'oublie et à venir.
Le principe est le suivant: on fait coopérer du code Javascript du côté du client avec le code Delphi du côté du server, de façon à ce que les événements et les propriétés des contrôles de la page Web soient réacheminés du côté du server. Ainsi, lorsqu'on définit un événement OnClick pour un THTMLButton, l'événement est lancé sur le server chaque fois que le client clique sur le bouton. De plus, si par exemple il y a un THTMLEdit sur la page et que le client en a modifié le contenu, la propriété Text correspondante du server est mide à jour. Ainsi, lorsqu'on programme la page Web du côté du server, on programme de la même façon que si les contrôles étaient des contrôles standard Delphi. Puissant, non?
J'ai testé mon programme avec Internet Explorer et avec Netscape, ça a l'air de fonctionner à peu près. J'ai eu du mal au début car les 2 browser n'utilisent pas la même gestion des événements.
Voilà, c'est tout pour l'instant pour les explications. Le code est encore en version Bêta, je l'ai commencé il y a seulement 4 jours, et dès que j'ai le temps je le commente.
En attendant, toute remarque ou commentaire seront les bienvenus.
Là encore, les composants ont été écrits avec Delphi 7, je ne sais pas s'ils seront compatibles avec les versions antérieures de Delphi. Est-ce que quelqu'un peut me dire s'il a réussi à les installer et à les faire marcher? Merci!
Historique
- 01 novembre 2004 18:11:20 :
- Juste une petite précision: si vous regardez l'unité ConsoleThread.pas, vous verrez qu'un autre processus externe est lancé: il s'agit du programme cmd de windows XP (la commande MS-DOS). Dans certains cas, lorsque par exemple vous quittez le programme du server avec alt+ctrl+suppr, il se peut que ce processus ne soit pas arrêté. Il faut alors l'arrêter manuellement avec alt+ctrl+suppr (il s'appelle "cmd" dans la liste). Sinon, lorsqu'on tente de lancer à nouveau le server, on obtient une erreur du genre:
"could not connect, address and port are already in use"
Bientôt, je mettrai une mise à jour pour connecter et déconnecter manuellement le server, pour l'instant le server se connecte dès qu'il est créé et se déconnecte lorsqu'il est détruit.
- 04 novembre 2004 02:09:42 :
- ATTENTION: pour que cette mise à jour fonctionne, il faut aussi mettre à jour le package FileSystem, sinon il se produit parfois des bugs lorsqu'on utilise la TFileSystemSaveDialog. La mise à jour est disponible sur la page où vous avez pu télécharger le package FileSystem la première fois:
http://www.delphifr.com/code.aspx?ID=27147
Bugs corrigés dans cette version:
-Aucun je crois, apparemment personne ne m'a dit s'il y en avait dans la version précédente. Ah si, j'oubliais: BenXbox m'a signalé que lorsqu'il installait le package puis ensuite essayait de compiler l'exe, Delphi lui disait qu'il n'arrivait pas à trouver les *.pas du packages utilisés dans l'exe. Ceci est je pense un bug de Delphi, je l'ai déjà rencontré dans des situations assez particulières, par exemple lorsqu'on change de répertoire le source d'un package déjà installé, et qu'on installe le nouveau source qui a changé de place. Dans ces cas là je crois avoir trouvé une solution: il faut remettre le package à l'endroit précédent, puis l'ouvrir avec Delphi, le retirer de la liste des packages installés. Ensuite, fermer Delphi, détruire le fichier .bpl correspondant dans le répertoire /bpl/ où Delphi stocke les packages installés dans l'IDE, changer le package de place, le réouvrir et le réinstaller. Bonne chance!
Sinon, on peut aussi rajoutter à la main les *.pas manquant au projet (Shif+F11) mais ça risque de le refaire à chaque fois que vous voudrez créer un nouveau projet qui utilise mes composants :-(
Modifications du package HTTPDistantAccess:
Apparemment ce n'était pas une bonne idée de faire descendre THTTPDistantAccess de TidCustomHTTPServer, car ce dernier publie malheureusement des événements qui n'ont aucun sens dans le contexte de mon composant, comme par exemple OnSessionStart. En plus, je les ai déjà utilisés pour autre chose. Donc la liste est la suivante:
-Ajout d'un TPropertyEditor pour la propriété HTTPServerModuleClassName: c'est toute la magie de Delphi en une page de code. Le property editor va scanner toutes les unités qui contiennent un Designer, et sélectionner uniquement les classes qui descendent de THTTPServerDataModule. Il prévient ensuite l'utilisateur qu'il faut enregister la classe avec RegisterClass dans son code.
-Ajout des propriétés les plus importantes du TIdHttpServer au THTTPDistantAccess. C'est bourrin mais ça marche.
-Gràce à la propriété Bindings et DefaultPort, on peut changer le mappage des adresses IP et des ports du server.
-Grâce à la propriété Active, on peut déconnecter ou reconnecter le server
-Ajout des événements OnStatus, OnServerOnLine, OnServerOffLine.
Modifications de l'exe: cette fois on a un server HTTP qu'on peut paramétrer avec pas mal d'options.
-Les options sont stockées dans un .ini, pour revenir aux options par défaut il suffit de détruire le fichier ini avant de lancer le programme.
-On peut forcer le server à se connecter au démarrage.
-On peut mettre lr programme en icone dans la barre des tâches. Il suffit de minimiser la fenêtre.
-On peut faire créer à distance sur un site FTP une page web qui contient un lien vers le server. Par exemple, si votre IP n'est pas fixe (c'est le cas pour l'ADSL wanadoo standard par exemple), vous pouvez ouvrir un compte HTTP gratuit (par exemple chez Free ou IFrance). Après, il suffit de mettre dans la propriété "FTP file name" le nom d'un fichier du FTP de votre compte. Par exemple, si vous ouvrez un compte chez IFrance, il suffit d'utiliser le TFileSystemSaveDialog en cliquant sur "...", de mettre l'host FTP: "ftp.ifrance.com", votre login et votre mot de passe, puis ensuite d'utiliser la boite de dialogue comme celle standard de windows.
ATTENTION parfois le programme ne fait rien pendant plusieurs secondes, ce n'est pas qu'il est bloqué, mais que le composant met parfois du temps à se connecter et est écrit pour fonctionner en mode "bloquant".
-On peut gérer les Accounts pendant l'exécution.
-Il y a un historique de ce qu'il se passe sur le server.
-La console MS-DOS est maintenant en blanc sur fond noir.
-Je crois que c'est tout!
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Indy HTTP Server [ par guiguikun ]
Bonjour,comment puis-je faire pour désactiver les msgbox d'erreur du composant Indy HTTP Server ?un peu comme ErrorCode = 0 avec TServerSocket
accéder à une base de données sur le web [ par yvescollet ]
bonjour,j'aimerais savoir s'il est possible d'accéder à une base de données sur le web.c'est-à-dire, j'ai p.ex une base de donn
Visualiser une requête HTTP [ par poufrin ]
Je souhaiterais visualiser les requêtes qui arrivent sur mon serveur Web en direct.J'ai bien essayé de me connecter sur le serveur mais, 
comment acceder a une BDD SQL Server a distance [ par fbsoft ]
salut TLM j'ai ecrit une application base de donnee avec SQL server, elle fonctionne bien sous reseau local, mais j'aimerai bien savoir comment faire
BDE sous Windows Server 2008 [ par MAURICIO ]
Salut à tous!voilà mon problème : - Accédez à une table DBase dans mon cas, sous Windows Server 2008. La table est sur le disque local. - Ouvrez cette
Formules 3D [ par Bacterius ]
Bonsoir,je cherche, dans mes moments perdus, à réaliser un labyrinthe en 3D, rien d'extraordinaire, juste des murs avec des textures, et une caméra qu
Comment charger un fichier txt du web dans un memo Dlphi - Pascal [ par michaelminelli1 ]
Hello ,<img src="http://www.codes-sources.com/imgs2
Deadlock SQL server 2000 [ par eiwa ]
bonjour,on a un problem de deadlock qu'on arrive pas à resoudre:on une procedure stocke qui contient un select et un update sur la même table du type:
installation de SQL SERVER [ par algerian001 ]
bonsoir, je suis debutant en programmation avec delphi. pouvez vous m'expliquer les etapes de l'installation de MS SQL SERVER 2000 en details svp
|
Derniers Blogs
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
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
Comparez les prix

HTC Hero
Entre 550€ et 550€
|