Usenet Replayer



iso-8859-15


Path:  news2.ip-mobilphone.net ! NNTPLoader.ip-mobilphone.net ! not-for-mail
Subject:  [FAQ] fr.comp.os.ms-windows.programmation
From:  Dominique.Vaufreydaz@imag.fr (Dominique Vaufreydaz)
Newsgroups:  fr.comp.os.ms-windows.programmation
Supersedes:  <1d0900291119.201452.maintdoc@jeffrey.matabio.net>
Sender:  Joseph Boudou <jogo@matabio.net>
Content-Type:  text/plain; charset=ISO-8859-15
User-Agent:  MaintDoc v0.6
Date:  Mon, 02 Jun 2014 06:01:01 +0200
Expires:  Thu, 03 Jul 2014 06:01:01 +0200
Message-ID:  <76770028e9ae.201462.maintdoc@jeffrey.matabio.net>
Organization:  Matabio H2O
NNTP-Posting-Date:  Thu, 05 Jun 2014 19:48:15 +0200
X-Trace:  jeffrey.matabio.net 76770028e9ae Thu, 05 Jun 2014 19:48:15 +0200
X-Complaints-To:  jogo@matabio.net
X-Received-Body-CRC:  3996988372
X-Received-Bytes:  16627
Xref:  news2.ip-mobilphone.net fr.comp.os.ms-windows.programmation:48518


Archive-Name: fr/comp/os/faq-winprog

-------- Préambule ------------

Voici une petite mise à jour de la FAQ. J'ai rajouté une bibliographie
faite conjointement par plusieurs contributeurs et mise en forme
par AMcD. Qu'ils en soient remerciés.

En vous remerciant. Bonne lecture et bonne programmation.

Doms.
-------------------------------


Le présent document est un brouillon de début de FAQ pour le forum
"fr.comp.os.ms-windows.programmation". Il ne s'agit pas d'une traduction
des FAQ de forums anglophones, mais d'un résumé des questions les plus
fréquemment posées sur ce forum, ainsi que les réponses données sur ce même
forum.
J'ai mis quelques questions dont je n'ai pas la réponse sous la main. Je
chercherai (un jour, peut-être !), mais si quelqu'un veut m'aider, il est
le bienvenu ;-)
Je ne garantis pas la validité des réponses fournies ; je me suis contenté
de recopier des réponses trouvées sur ce forum. Certaines peuvent être
fausses ou obsolètes.


Préambule : MSDN / WIN32.HLP

Pour pouvoir programmer sous Windows, il me paraît indispensable d'avoir
une référence exhaustive de l'API Win32 (Windows 32 bits). Le moyen
habituel d'obtenir cette référence est de télécharger le fichier WIN32.HLP
(s'il n'est pas fourni avec votre compilateur), ou de vous procurer le MSDN
(Microsoft Development Network) sur CD-ROM ; consultable également en ligne
: http://msdn.microsoft.com (Who's computer is this?) .

WIN32.HLP : http://www.cs.virginia.edu/~lcc-win32/ (Who's computer is this?)
Sous forme de .CHI et .CHM :
ftp://ftp.microsoft.com/developr/PlatformSDK/jan2000/common/help/ (Who's computer is this?)

Il existe aussi "WindowsNT Win32 API Super Bible",
auteur : Richard J. Simon.
éditeur : "Waite Group Press"

Dans le présent document, la réponse à beaucoup de questions consiste en
un simple nom de fonction (exemple : "RasDial"). C'est à chacun de faire
l'effort d'aller voir dans la documentation comment se servir de la
fonction citée.

Dernier point : je ne parlerai pas ici des MFC (Microsoft Foundation
Class), et ce, pour trois raisons :
1/ Je n'y connais rien
2/ C'est limite hors-sujet AMHA (mais ça se discute)
3/ Quelqu'un l'a fait à ma place : http://LaFaqMfc.com/ (Who's computer is this?) :-)

PS : un autre bon site : http://www.codeguru.com/ (Who's computer is this?)



Sommaire :

[1] Questions d'ordre général
[2] Multimédia : son, vidéo, lecteur de CD
[3] Modem / internet
[4] Ecran et affichages
[5] Clavier / souris / scanner
[6] Gestion des processus
[7] Suis-je hors-sujet?
[8] Fichiers : gestion, formats
[9] Base de registre
[10] Divers
[11] Bibliographie


[1] Questions d'ordre général

* KB Q123456 : que es aquo ?

C'est une référence à la Knowledge Base de Microsoft.
Histoire de faire court : <http://www.edulang.com/kb.php (Who's computer is this?) >,
taper le numéro de la question dans la boîte d'édition.

* Ouvrages de référence
Cf la liste à Arnold : <http://minilien.com/?sP7rTO1nVT (Who's computer is this?) > ou
<//groups.google.com/groups?as_umsgid=3d4f1b42$0$11805$7a628cd7@news.cl">http://groups.google.com/groups?as_umsgid=3d4f1b42$0$11805$7a628cd7@news.cl
ub-internet.fr>

* Quel langage/compilateur choisir?

* Compilateurs C++ gratuits

LCC-Win32 : http://www.cs.virginia.edu/~lcc-win32/ (Who's computer is this?)
Borland C++ 5.5 : http://www.borland.fr/download/compilateurs/ (Who's computer is this?)
[voir aussi
http://www.geocities.com/SiliconValley/Campus/5642/owlnext.html (Who's computer is this?) ]
Dev-C++ 4 : http://www.bloodshed.net/devcpp.html (Who's computer is this?)

[2] Multimédia : son, vidéo, lecteur de CD

* Ouvrir/fermer le tiroir du lecteur de CD :

DeviceIOControl(...,IOCTL_STORAGE_EJECT_MEDIA,.....)
mciSendString("set cdaudio door open", lpszReturn, sizeof(lpszReturn),
NULL); (closed bien sûr pour le contraire)
http://support.microsoft.com/support/kb/articles/Q168/1/80.ASP (Who's computer is this?)

* Lire un son : sndPlaySound

* Lire/enregistrer un son, une vidéo, ... : le plus simple est d'utiliser
les fonctions MCI. Cela qui veut se lancer là-dedans doit commencer par
lire le fichier MMEDIA.HLP [Multimedia API Reference], normalement fourni
avec votre compilateur. Sinon, une version datant du 25/3/97 est disponible
à http://members.xoom.com/lelez/Mmedia.zip (Who's computer is this?)

[3] Modem / internet

* Envoi d'e-mails :
Utiliser MAPI (ou Simple MAPI). Cf MAPI.HLP ou la MSDN
Voir aussi Blat : http://www.interlog.com/~tcharron/blat.html (Who's computer is this?)

* Problèmes de connexion (à internet)

Pour se connecter : RasDial
Pour savoir si on est connecté : RasEnumConnections

Petite précision d'après hyronn@club-internet.fr :

RasEnumConnections doit connaître la taille (stocké dans dwSize) de la
structure RASCONN passée comme argument... Logiquement, en C(++), on
utiliserait
RASCONN rasConn;
rasConn.dwSize= sizeof (RASCONN);
Seulement, cette opération déclenche une erreur "Invalid Buffer" sous
Windows95/98. Il faut donc mettre
const int RASCONN_dwSize= 412;
rasConn.dwSize= RASCONN_dwSize;
et tout fonctionne. Il semblerait que cette erreur ne soit présente que sous
Win95/98. L'utilisation de cette technique n'altère en rien le
fonctionnement du programme sous WinNT/2000


Pour être averti d'une connexion/déconnexion : RasConnectionNotification
De manière générale, les fonctions de l'API Win32 se rapportant à la
connexion par modem commencent par "Ras".

Pour se déconnecter [code fourni par "Régent" <regent@yahoo.fr>] :

en C++
---------
#include <ras.h>

VOID Disconnect ()
{
RASCONN rc;
DWORD cConnections;
rc.dwSize = sizeof (rc);
RasEnumConnections (&rc, &rc.dwSize, &cConnections);
RasHangUp (rc.hrasconn);
}

en VB :
---------

Type RASCONN
dwsize As Long
hRascon As Long
szentryname As String * 256
szdevicetype As String * 16
szdevicename As String * 32
End Type

Declare Function RasEnumConnections Lib "RasApi32.dll" Alias
"RasEnumConnectionsA" (lpRasCon As Any, lpcb As Long, lpcConnection As Long)
As Long
Declare Function RasHangup Lib "RasApi32.dll" Alias "RasHangUpA" (ByVal
hRascon As Long) As Long

Sub Disconnect ()
Dim RC As RASCONN
RC.dwsize = Len(RC) + 100
RasEnumConnections RC, RC.dwsize, 0&
RasHangup RC.hRascon
End Sub


* Gestion du modem hors internet :

Il faut utiliser TAPI (Telephony Application Programming Interface) - cf
TAPI.HLP. Si ce fichier n'est pas fourni avec votre compilateur, une copie
pas très récente [27/03/1997] est disponible à :
http://members.xoom.com/lelez/Tapi.zip (Who's computer is this?)

Pour la télécopie, voir aussi
http://msdn.microsoft.com/library/psdk/fax/mfaxportal_88x1.htm (Who's computer is this?)


[4] Ecran

* Connaître la taille de l'écran :

GetSystemMetrics (voir aussi le message WM_DISPLAYCHANGE)

* Faire des fenêtres non rectangulaires : SetWindowRgn.
NB : C'est sans doute faisable directement avec les MFC ou les OWL, mais
c'est beaucoup plus délicat.
Pour les fenetres avec des bordures et des couleurs speciales il faut
traiter les messages Non Client WM_NC*.
voir aussi http://micromeg.free.fr/HowTo.html (Who's computer is this?)

* Mettre une icône dans la "traybar" (en bas à droite à côté de l'horloge)
Shell_NotifyIcon

* Mettre une fenêtre au premier plan ou à l'arrière-plan : SetWindowPos

* Afficher des JPEG : cf interface IStream (OleLoadPicture(), Render())

* Changer la résolution de l'écran ou enlever la barre de tâche
pour se mettre en plein écran : http://micromeg.free.fr/HowTo.html (Who's computer is this?)

* Comment placer une icône dans le systray (zone de la barre de tâche où
se trouve l'heure, le volume sonore...) :
http://micromeg.free.fr/HowTo.html (Who's computer is this?)

* Tout sur les économiseurs d'écran : http://www.wischik.com/scr/ (Who's computer is this?)

* Comment mettre le curseur à un endroit donné de l'écran dans un programme
console ?

void GotoXY (int X, int Y)
{
HANDLE hStdOut;
COORD coPos;
coPos.X = X; coPos.Y = Y;
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdOut != INVALID_HANDLE_VALUE)
SetConsoleCursorPosition(hStdOut,coPos);
}

[5] Clavier/souris

* Simuler un événement souris/clavier :

mouse_event / keybd_event (API Win32)

* Intercepter des événements souris/clavier : il faut créer un hook local
(pour intercepter les messages à l'intérieur d'une application) ou système
(pour intercepter tous les messages envoyés à toutes les applications).
cf SetWindowsHookEx
[Réponse à étoffer]

* Piloter un scanner : http://www.twain.org/ (Who's computer is this?)


[6] Gestion de processus

* Comment tuer un processus en connaissant uniquement le HWND de la fenêtre
principale de l'application?

[Merci Christian Astor!]
Pour passer du hWnd au hProcess pour le killer:
- GetWindowThreadProcessId(hWnd, nProcessId);
- hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, nProcessId );
- TerminateProcess( hProcess, 99 );
- CloseHandle(hProcess);

* Lister les processus :

CreateToolhelp32Snapshot()
Process32First()
Process32Next()
<http://groups.google.com/groups?oi=djq&selm=an_650031009 (Who's computer is this?) >

* Comment détecter si mon application tourne déjà pour ne pas lancer une
deuxième session en Win32?
cf CreateMutex [API Win32]
http://www8.zdnet.com/pcmag/issues/1515/pcmg0084.htm (Who's computer is this?)
http://micromeg.free.fr/HowTo.html (Who's computer is this?)

Comment lancer une application et attendre qu'elle se termine?
http://micromeg.free.fr/HowTo.html (Who's computer is this?)

Comment retrouver la fenêtre principale d'une application dont on a le
"process id" (par exemple lancée avec CreateProcess) ? Comment terminer une
application ?
http://support.microsoft.com/support/kb/articles/Q178/8/93.ASP (Who's computer is this?)

[7] Suis-je hors-sujet?

Comment créer un site web? Comment faire telle ou telle chose sur un site web?

cf le forum fr.comp.infosystemes.www.auteurs

Comment faire telle ou telle chose sous Windows 95/98/2K/NT?

Si votre question ne concerne pas explicitement la programmation, elle est
hors-sujet sur ce forum.
Il y a des chances pour que les forums fr.comp.os.ms-windows.win95 et
fr.comp.os.ms-windows.winnt soient plus accueillants ; attention toutefois
à bien lire leur FAQ avant de poster.
Pour plus d'informations : fr.bienvenue ou
http://www.citeweb.net/aminaute/forums/tablefr.html (Who's computer is this?)



[8] Fichiers : gestion, formats

SHFileOperation fait pas mal de trucs (copie, déplacement, ...) avec en
option une fenêtre indiquant l'avancement de l'opération.
Sinon, on peut utiliser la méthode habituelle de recherche dans l'API Win32 :

français -> anglais -> API
Déplacer fichier -> Move file -> MoveFile (ou MoveFileEx)
Copier fichier -> Copy file -> CopyFile (ou CopyFileEx)
Effacer fichier -> Delete file -> DeleteFile
etc...


Création de raccourcis (dans le menu démarrer ou ailleurs) :
Utiliser les interfaces IShellLink et IPersistFile.
Un exemple de mon cru à http://www.chez.com/nospam/CreationLiens.cpp (Who's computer is this?)

Comment trouver le nom réel d'un répertoire spécial, comme le "menu
démarrer", le répertoire des polices...
http://micromeg.free.fr/HowTo.html (Who's computer is this?)
Un exemple : http://www.chez.com/nospam/CreationLiens.cpp (Who's computer is this?)

Comment trouver le nom court (ou "nom MS-DOS") d'un fichier (à la
"MESDOC~1") : GetShortPathName [API Win32]

Comment ouvrir une boite de sélection de répertoire pour que
l'utilisateur puisse choisir un répertoire -- Boîte de dialogue "choix d'un
répertoire" (SHBrowseForFolder) :
http://codeguru.earthweb.com/mfc/comments/2820.shtml (Who's computer is this?)
http://micromeg.free.fr/HowTo.html (Who's computer is this?)

Tout sur les formats de fichiers (fichiers de données, images, sons, etc...)
http://www.wotsit.org/ (Who's computer is this?)
http://www.dcs.ed.ac.uk/home/mxr/gfx/ (Who's computer is this?)
http://fileformat.virtualave.net/ (Who's computer is this?)
Pour les fichiers "de base" (BMP, WAV, ...) voir aussi WIN32.HLP

Exécutable qui s'auto-détruit :
http://www.microsoft.com/msj/defaultframe.asp?page=/msj/0198/win320198.htm (Who's computer is this?)


[9] Base de registre

Ajouter/supprimer/modifier des clés : RegCreateKey, RegCreateKeyEx,
RegDeleteKey, RegFlushKey, RegOpenKey, RegOpenKeyEx, RegSetValue,
RegSetValueEx et toutes les fonctions de l'API commençant par Reg.

Paramètres de REGEDIT.EXE
<http://groups.google.com/groups?oi=djq&selm=an_559631632 (Who's computer is this?) >


[10] Divers

Création d'un AUTORUN.INF :
<http://groups.google.com/groups?oi=djq&selm=an_612302829 (Who's computer is this?) >

En gros, pour lancer un exécutable, la structure de l'AUTORUN.INF est
celle-ci :
[AUTORUN]
run=machin.exe
icon=icone.ico (facultatif)

Pour lancer autre chose, remplacer run=machin.exe par
shellexecute=machin.truc


Mélanger code 16 bits / 32 bits :
http://support.microsoft.com/support/kb/articles/Q155/7/63.ASP (Who's computer is this?)

Accéder au port série : CreateFile [API Win32]
cf aussi http://msdn.microsoft.com/library/techart/msdn_serial.htm (Who's computer is this?)

Et enfin (roulement de tambour...) la "polémique" de
fr.comp.os.ms-windows.programmation : peut-on programmer _sérieusement_
sous Windows sans savoir lire l'anglais?
Réponse la plus objective que j'aie réussi à trouver : Rien n'indique que
c'est impossible, mais à ma connaissance personne n'a encore réussi. La
question est donc ouverte ;-)

[11] Bibliographie

AMcD a écrit :
Bon, voici une petite bibliographie actualisée 2005 pour le codeur Windows
Win32/Net. Merci à Aurélien, Arnaud, Olivier, etc.

[Programmation Générale]

- Programming Windows, The Definitive Guide to the Win 32 API (5th Ed), par
Charles Petzold (1998)

[Programmation Avancée]

- Multithreading Applications in Win32, par Jim Beveridge (1996)
- Win32 Programming, par Brent Rector (1997)
- Multithreaded Programming with Win32, par Thuan Pham (1998)
- Programming Applications for Microsoft Windows (4th Ed), par Jeffrey
Richter (2000)

[Programmation Système]

- Undocumented Windows NT, par Prasad Dabak (1999)
- Win32 System Services, par Marshall Brain (2000)
- Windows NT/2000 Native API Reference, par Gary Nebbett (2000)
- Undocumented Windows 2000 Secrets, par Sven Schreiber (2001)
- Win32 System Programming (3rd Ed), par Jonhson Hart (2004)
- Windows Internal (4th Ed), par David Solomon et Mark Russinovich (2005)

[Sécurité, Debugging]

- Programming Windows Security, par Keith Brown (2000)
- Debugging Applications, par John Robbins (2000)
- Programming Server-Side Applications for Microsoft Windows 2000, par
Jeffrey Richter (2000)
- Writing Secure Code (2nd Ed), par Michael Howard (2002)
- Microsoft Windows Security Resource Kit, par Ben Smith (2003)
- Microsoft Windows XP Inside Out (2nd Ed), par Ed Bott (2004)

[Drivers]

- The Windows 2000 Device Driver Book, par Art Baker (1999)
- Developing Windows NT Device Drivers, par Edward Dekker (2000)
- Programming the Microsoft Windows Driver Model (2nd Ed), par Walter Oney
(2002)

[Graphisme]

- Windows Graphics Programming : Win32 GDI and DirectDraw, par Feng Yuan
(2000)
- Introduction to 3D Game Programming with DirectX 9.0, par Franl Luna
(2003)
- Graphics Programming with GDI+ & DirectX, par Alex Polyakov (2005)

[Réseau]

- Network Programming for Microsoft Windows, par Anthony Jones (1999)

[ATL, COM, COM+, DCOM]

- Essential COM, par Don Box (1997)
- Learning DCOM, par Thuan Thai (1999)
- Understanding COM+, par David Platt (1999)
- ATL Internals, par Brent Rector (1999)
- Understanding DCOM, par William Rubin (1998)

[.NET]

- Programming Microsoft .NET, par Jeff Prosise (2002)
- Applied Microsoft .NET Framework Programming, par Jeffrey Richter (2002)
- Introducing Microsoft .Net, par David Platt (2003)
- Programming .NET Components, par Juval Lowy (2003)
- Inside Microsoft Visual Studio .NET 2003, par Marc Young (2003)

[C#]

- Programming Windows with C#, par Charles Petzold (2001)
- Microsoft Visual C# .NET Language Reference, par Microsoft (2002)
- Programming C# (3rd Ed), par Jesse Liberty (2003)

Notes.

- Ne sont mentionnés que des ouvrages encore trouvables.
- Certains existent en français.



--
Document publié par MaintDoc depuis le 2008-04-07.
Responsable(s) : Dominique Vaufreydaz.



Where you can get the newsgroup fr.comp.os.ms-windows.programmation