Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[FAQ] fr.comp.os.ms-windows.programmation

4 réponses
Avatar
Dominique.Vaufreydaz
Archive-Name: fr/comp/os/faq-winprog

-------- Pr=E9ambule ------------

Voici une petite mise =E0 jour de la FAQ. J'ai rajout=E9 une =
bibliographie
faite conjointement par plusieurs contributeurs et mise en forme
par AMcD. Qu'ils en soient remerci=E9s.

En vous remerciant. Bonne lecture et bonne programmation.

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


Le pr=E9sent document est un brouillon de d=E9but 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=E9sum=E9 des questions les =
plus
fr=E9quemment pos=E9es sur ce forum, ainsi que les r=E9ponses donn=E9es =
sur ce m=EAme
forum.
J'ai mis quelques questions dont je n'ai pas la r=E9ponse sous la main. =
Je
chercherai (un jour, peut-=EAtre !), mais si quelqu'un veut m'aider, il =
est
le bienvenu ;-)
Je ne garantis pas la validit=E9 des r=E9ponses fournies ; je me suis =
content=E9
de recopier des r=E9ponses trouv=E9es sur ce forum. Certaines peuvent =
=EAtre
fausses ou obsol=E8tes.


Pr=E9ambule : MSDN / WIN32.HLP

Pour pouvoir programmer sous Windows, il me para=EEt indispensable =
d'avoir
une r=E9f=E9rence exhaustive de l'API Win32 (Windows 32 bits). Le moyen
habituel d'obtenir cette r=E9f=E9rence est de t=E9l=E9charger 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 =E9galement 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.
=E9diteur : "Waite Group Press"

Dans le pr=E9sent document, la r=E9ponse =E0 beaucoup de questions =
consiste en
un simple nom de fonction (exemple : "RasDial"). C'est =E0 chacun de =
faire
l'effort d'aller voir dans la documentation comment se servir de la
fonction cit=E9e.

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 =E7a se discute)
3/ Quelqu'un l'a fait =E0 ma place : http://LaFaqMfc.com/ :-)

PS : un autre bon site : http://www.codeguru.com/



Sommaire :

[1] Questions d'ordre g=E9n=E9ral
[2] Multim=E9dia : son, vid=E9o, 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=E9n=E9ral

* KB Q123456 : que es aquo ?

C'est une r=E9f=E9rence =E0 la Knowledge Base de Microsoft.
Histoire de faire court : <http://www.edulang.com/kb.php>,
taper le num=E9ro de la question dans la bo=EEte d'=E9dition.

* Ouvrages de r=E9f=E9rence
Cf la liste =E0 Arnold : <http://minilien.com/?sP7rTO1nVT> ou
<//groups.google.com/groups?as_umsgid=3D3d4f1b42$0$11805$7a628cd7@news.cl=
">http://groups.google.com/groups?as_umsgid=3D3d4f1b42$0$1180
5$7a628cd7@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=E9dia : son, vid=E9o, 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=FBr pour le contraire)
http://support.microsoft.com/support/kb/articles/Q168/1/80.ASP

* Lire un son : sndPlaySound

* Lire/enregistrer un son, une vid=E9o, ... : le plus simple est =
d'utiliser
les fonctions MCI. Cela qui veut se lancer l=E0-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
=E0 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=E8mes de connexion (=E0 internet)

Pour se connecter : RasDial
Pour savoir si on est connect=E9 : RasEnumConnections

Petite pr=E9cision d'apr=E8s hyronn@club-internet.fr :

RasEnumConnections doit conna=EEtre la taille (stock=E9 dans dwSize) de =
la
structure RASCONN pass=E9e comme argument... Logiquement, en C(++), on
utiliserait
RASCONN rasConn;
rasConn.dwSize=3D sizeof (RASCONN);
Seulement, cette op=E9ration d=E9clenche une erreur "Invalid Buffer" =
sous
Windows95/98. Il faut donc mettre
const int RASCONN_dwSize=3D 412;
rasConn.dwSize=3D RASCONN_dwSize;
et tout fonctionne. Il semblerait que cette erreur ne soit pr=E9sente =
que sous
Win95/98. L'utilisation de cette technique n'alt=E8re en rien le
fonctionnement du programme sous WinNT/2000


Pour =EAtre averti d'une connexion/d=E9connexion : =
RasConnectionNotification
De mani=E8re g=E9n=E9rale, les fonctions de l'API Win32 se rapportant =
=E0 la
connexion par modem commencent par "Ras".

Pour se d=E9connecter [code fourni par "R=E9gent" <regent@yahoo.fr>] :

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

VOID Disconnect ()
{
RASCONN rc;
DWORD cConnections;
rc.dwSize =3D 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 =3D 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=E8s r=E9cente [27/03/1997] est disponible =E0 :
http://members.xoom.com/lelez/Tapi.zip

Pour la t=E9l=E9copie, voir aussi
http://msdn.microsoft.com/library/psdk/fax/mfaxportal_88x1.htm


[4] Ecran

* Conna=EEtre la taille de l'=E9cran :

GetSystemMetrics (voir aussi le message WM_DISPLAYCHANGE)

* Faire des fen=EAtres non rectangulaires : SetWindowRgn.
NB : C'est sans doute faisable directement avec les MFC ou les OWL, mais
c'est beaucoup plus d=E9licat.
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=F4ne dans la "traybar" (en bas =E0 droite =E0 c=F4t=E9 =
de l'horloge)
Shell_NotifyIcon

* Mettre une fen=EAtre au premier plan ou =E0 l'arri=E8re-plan : =
SetWindowPos

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

* Changer la r=E9solution de l'=E9cran ou enlever la barre de t=E2che
pour se mettre en plein =E9cran : http://micromeg.free.fr/HowTo.html

* Comment placer une ic=F4ne dans le systray (zone de la barre de =
t=E2che o=F9
se trouve l'heure, le volume sonore...) :
http://micromeg.free.fr/HowTo.html

* Tout sur les =E9conomiseurs d'=E9cran : http://www.wischik.com/scr/

* Comment mettre le curseur =E0 un endroit donn=E9 de l'=E9cran dans un =
programme
console ?

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

[5] Clavier/souris

* Simuler un =E9v=E9nement souris/clavier :

mouse_event / keybd_event (API Win32)

* Intercepter des =E9v=E9nements souris/clavier : il faut cr=E9er un =
hook local
(pour intercepter les messages =E0 l'int=E9rieur d'une application) ou =
syst=E8me
(pour intercepter tous les messages envoy=E9s =E0 toutes les =
applications).
cf SetWindowsHookEx
[R=E9ponse =E0 =E9toffer]

* Piloter un scanner : http://www.twain.org/


[6] Gestion de processus

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

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

* Lister les processus :

CreateToolhelp32Snapshot()
Process32First()
Process32Next()
<http://groups.google.com/groups?oi=3Ddjq&selm=3Dan_650031009>

* Comment d=E9tecter si mon application tourne d=E9j=E0 pour ne pas =
lancer une
deuxi=E8me 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=EAtre principale d'une application dont on a le
"process id" (par exemple lanc=E9e avec CreateProcess) ? Comment =
terminer une
application ?
http://support.microsoft.com/support/kb/articles/Q178/8/93.ASP

[7] Suis-je hors-sujet?

Comment cr=E9er 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
=E0 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=E9placement, ...) avec =
en
option une fen=EAtre indiquant l'avancement de l'op=E9ration.
Sinon, on peut utiliser la m=E9thode habituelle de recherche dans l'API =
Win32 :

fran=E7ais -> anglais -> API
D=E9placer fichier -> Move file -> MoveFile (ou MoveFileEx)
Copier fichier -> Copy file -> CopyFile (ou CopyFileEx)
Effacer fichier -> Delete file -> DeleteFile
etc...


Cr=E9ation de raccourcis (dans le menu d=E9marrer ou ailleurs) :
Utiliser les interfaces IShellLink et IPersistFile.
Un exemple de mon cru =E0 http://www.chez.com/nospam/CreationLiens.cpp

Comment trouver le nom r=E9el d'un r=E9pertoire sp=E9cial, comme le =
"menu
d=E9marrer", le r=E9pertoire 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 (=E0 la
"MESDOC~1") : GetShortPathName [API Win32]

Comment ouvrir une boite de s=E9lection de r=E9pertoire pour que
l'utilisateur puisse choisir un r=E9pertoire -- Bo=EEte de dialogue =
"choix d'un
r=E9pertoire" (SHBrowseForFolder) :
http://codeguru.earthweb.com/mfc/comments/2820.shtml
http://micromeg.free.fr/HowTo.html

Tout sur les formats de fichiers (fichiers de donn=E9es, 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=E9cutable qui s'auto-d=E9truit :
http://www.microsoft.com/msj/defaultframe.asp?page=3D/msj/0198/win320198.=
htm


[9] Base de registre

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

Param=E8tres de REGEDIT.EXE
<http://groups.google.com/groups?oi=3Ddjq&selm=3Dan_559631632>


[10] Divers

Cr=E9ation d'un AUTORUN.INF :
<http://groups.google.com/groups?oi=3Ddjq&selm=3Dan_612302829>

En gros, pour lancer un ex=E9cutable, la structure de l'AUTORUN.INF est
celle-ci :
[AUTORUN]
run=3Dmachin.exe
icon=3Dicone.ico (facultatif)

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


M=E9langer code 16 bits / 32 bits :
http://support.microsoft.com/support/kb/articles/Q155/7/63.ASP

Acc=E9der au port s=E9rie : CreateFile [API Win32]
cf aussi http://msdn.microsoft.com/library/techart/msdn_serial.htm

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

[11] Bibliographie

AMcD a =E9crit :
Bon, voici une petite bibliographie actualis=E9e 2005 pour le codeur =
Windows
Win32/Net. Merci =E0 Aur=E9lien, Arnaud, Olivier, etc.

[Programmation G=E9n=E9rale]

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

[Programmation Avanc=E9e]

- 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=E8me]

- 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=E9curit=E9, 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=E9seau]

- 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=E9s que des ouvrages encore trouvables.
- Certains existent en fran=E7ais.

4 réponses

Avatar
Rakotomandimby Mihamina
Dominique Vaufreydaz wrote:
-------- 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.


[...]

Bonjour, c'est mon newsreader qui est mal réglé ou bien il y a un
problème avec les caractères accentués?


--
Miroir de logiciels libres http://www.etud-orleans.fr
Avatar
Yalbrieux
Bonjour,

Je confirme qu'il y a un problème avec les accentuées.

Yves
Avatar
Dominique Vaufreydaz
Bonjour,

Je confirme qu'il y a un problème avec les accentuées.



Je confirme aussi. Je vais voir pourquoi.

Doms.
Avatar
Dominique Vaufreydaz
Bonjour,

Je confirme aussi. Je vais voir pourquoi.



Ca devrait etre résolu. Doms.