-------- 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 .
WIN32.HLP : http://www.cs.virginia.edu/~lcc-win32/
Sous forme de .CHI et .CHM :
ftp://ftp.microsoft.com/developr/PlatformSDK/jan2000/common/help/
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/ :-)
PS : un autre bon site : http://www.codeguru.com/
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>,
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> ou
<//groups.google.com/groups?as_umsgid=3d4f1b42$0$11805$7a62...@news.cl">http://groups.google.com/groups?as_umsgid=3d4f1b42$0$11805$7a62...@news.cl
ub-internet.fr>
* Quel langage/compilateur choisir?
* Compilateurs C++ gratuits
LCC-Win32 : http://www.cs.virginia.edu/~lcc-win32/
Borland C++ 5.5 : http://www.borland.fr/download/compilateurs/
[voir aussi
http://www.geocities.com/SiliconValley/Campus/5642/owlnext.html ]
Dev-C++ 4 : http://www.bloodshed.net/devcpp.html
[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
* 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
[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
* Problᅵmes de connexion (ᅵ internet)
Pour se connecter : RasDial
Pour savoir si on est connectᅵ : RasEnumConnections
Petite prᅵcision d'aprᅵs hyr...@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" <reg...@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
Pour la tᅵlᅵcopie, voir aussi
http://msdn.microsoft.com/library/psdk/fax/mfaxportal_88x1.htm
[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
* 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
* 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
* Tout sur les ᅵconomiseurs d'ᅵcran : http://www.wischik.com/scr/
* 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/
[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>
* 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
http://micromeg.free.fr/HowTo.html
Comment lancer une application et attendre qu'elle se termine?
http://micromeg.free.fr/HowTo.html
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
[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
[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
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
Un exemple : http://www.chez.com/nospam/CreationLiens.cpp
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
http://micromeg.free.fr/HowTo.html
Tout sur les formats de fichiers (fichiers de donnᅵes, images, sons, etc...)
http://www.wotsit.org/
http://www.dcs.ed.ac.uk/home/mxr/gfx/
http://fileformat.virtualave.net/
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
[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>
[10] Divers
Crᅵation d'un AUTORUN.INF :
<http://groups.google.com/groups?oi=djq&selm=an_612302829>
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
Accᅵder au port sᅵrie : CreateFile [API Win32]
cf aussi http://msdn.microsoft.com/library/techart/msdn_serial.htm
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.
Reponsables : Dominique Vaufreydaz.
Version : 18/07/2006
Note: ces conseils d'utilisation, auparavant maintenus par Xavier Humbert
et Corinne Villemin Gacon (merci ᅵ eux) ont ᅵtᅵ mis ᅵ jour par
fr-chartes. Si vous dᅵsirez en devenir le mainteneur, merci de contacter
fr-chartes @ fr-chartes (point) org.
==========================================================================
== CONSEILS D'UTILISATION DU GROUPE fr.comp.os.ms-windows.programmation ==
==========================================================================
---------------------------------------------------------
Nom : fr.comp.os.ms-windows.programmation
Statut : Non modᅵrᅵ
Description : Programmation sous MS-Windows
Date de crᅵation : 22/08/1997 (*)
---------------------------------------------------------
1 - Charte du groupe :
----------------------
Les articles postᅵs dans le groupe devraient remplir les conditions
suivantes :
- ᅵtre spᅵcifiques ᅵ l'environnement Microsoft Windows.
- traiter de questions relatives ᅵ la programmation, entendue au
sens large du terme.
Les sujets peuvent porter : sur un langage particulier (C, C+
Pascal, Java, etc), sur les outils de dᅵveloppement utilisᅵs, sur
les "frameworks" (Microsoft MFC, Borland OWL,...), sur les conditions
de travail des dᅵveloppeurs (documentation, rapports avec Microsoft
et les ᅵditeurs, etc...), et tout autre sujet liᅵ ᅵ la mise en oeuvre
d'un dᅵveloppement logiciel sur Microsoft Windows.
Le groupe s'adresse aux programmeurs de tous niveaux, du dᅵbutant au
programmeur confirmᅵ.
D'autre part, il est rappelᅵ que ce forum est
francophone, que l'usage exclusif de la langue anglaise est considᅵrᅵ
comme inconvenant. Cependant un texte, par exemple en provenance de
Microsoft pourra ᅵtre citᅵ, ᅵ condition d'ᅵtre accompagnᅵ d'un rᅵsumᅵ
en franᅵais.
2 - Conseils d'utilisation :
----------------------------
2.1 - Rᅵdaction des articles :
Dans la mesure oᅵ existent un groupe gᅵnᅵraliste sur Microsoft
Windows (fr.comp.os.ms-windows) et un groupe concernant les serveurs
tournant sous ces systᅵmes (fr.comp.os.ms-windows.serveurs), vous
pouvez y effectuer un postage croisᅵ (crosspost) dans la mesure oᅵ
votre message peut avoir un rapport avec ces aspects, mais le suivi
(champ Followup-To de votre lecteur de news) devra pointer vers
fr.comp.os.ms-windows.programmation.
De la mᅵme faᅵon, on a observᅵ de faᅵon sporadique, des
postages croisᅵs avec les groupes microsoft.*, sans suivi-ᅵ
(Followup-To:) sur le groupe fr.comp.os.ms-windows.programmation.
2.2 - Erreurs frᅵquemment commises :
La hiᅵrarchie fr.* prᅵconise, ᅵ l'exception de tout autre encodage,
le texte ASCII, en 8 bits, ISO-8859-1 ou 8859-15 (dit aussi Latin).
En particulier, il est fortement dᅵconseillᅵ de poster en HTML, en
"Quoted-Printable" ou en MIME/multipart. On ᅵvitera ᅵgalement
d'ajouter des "vcards".
Reportez vous ᅵ la documentation de votre logiciel de news pour le
rᅵglage de ces options.
Il est inutile de prᅵciser que les $$$, !!!SEX!!!, et autres "spams"
sont fortement interdits, seront de toutes faᅵons annulᅵs, et que
leurs auteurs seront mᅵprisᅵs.
2.3 - Une prᅵcision utile :
Si un problᅵme vous semble ᅵtre liᅵ ᅵ votre environnement matᅵriel,
n'hᅵsitez pas ᅵ le dᅵcrire trᅵs prᅵcisᅵment : modᅵle d'UC, processeur,
frᅵquence, disques IDE ou SCSI (nombre, modᅵle de la carte SCSI),
cartes son, etc.
3 - Conclusion :
----------------
Pour obtenir plus de renseignements sur les "Conseils d'utilisation",
vous pouvez vous reporter au message intitulᅵ "A propos des Conseils
d'utilisation" postᅵ dans fr.usenet.reponses et fr.bienvenue.
Pour toutes autres informations et/ou pour dᅵbuter sur Usenet, vous
devriez consulter ces deux groupes et visiter le site web qui a ᅵtᅵ
mis en place ᅵ <http://www.usenet-fr.net/> .
Nous espᅵrons que ces informations et conseils contribueront ᅵ la
qualitᅵ des ᅵchanges dans les forums de discussion, dans l'intᅵrᅵt
et pour le plaisir de tous les lecteurs et auteurs.
--
La prᅵsente publication des documents de fr.usenet.reponses fait suite ᅵ
la panne du robot MaintFAQ. Ce document n'a pas ᅵtᅵ mis ᅵ jour depuis.
Si vous souhaitez maintenir ce document, contactez-moi ᅵ jo...@matabio.net.