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

Le
Dominique.Vaufreydaz
Archive-Name: fr/comp/os/faq-winprog

-- Prambule

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 remercis.

En vous remerciant. Bonne lecture et bonne programmation.

Doms.
-


Le prsent document est un brouillon de dbut 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 rsum des questions les =
plus
frquemment poses sur ce forum, ainsi que les rponses donnes =
sur ce mme
forum.
J'ai mis quelques questions dont je n'ai pas la rponse 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 rponses fournies ; je me suis =
content
de recopier des rponses trouves sur ce forum. Certaines peuvent =
tre
fausses ou obsoltes.


Prambule : MSDN / WIN32.HLP

Pour pouvoir programmer sous Windows, il me parat indispensable =
d'avoir
une rfrence exhaustive de l'API Win32 (Windows 32 bits). Le moyen
habituel d'obtenir cette rfrence est de tlcharger 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 prsent document, la rponse 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 cite.

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 gnral
[2] Multimdia : son, vido, 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 gnral

* KB Q123456 : que es aquo ?

C'est une rfrence la Knowledge Base de Microsoft.
Histoire de faire court : <http://www.edulang.com/kb.php>,
taper le numro de la question dans la bote d'dition.

* Ouvrages de rfrence
Cf la liste Arnold : <http://minilien.com/?sP7rTO1nVT> ou
<//groups.google.com/groups?as_umsgid=3d4f1b42$0$11805$7a628cd7@news.cl=
">http://groups.google.com/groups?as_umsgid=3d4f1b42$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] Multimdia : son, vido, 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 sr pour le contraire)
http://support.microsoft.com/support/kb/articles/Q168/1/80.ASP

* Lire un son : sndPlaySound

* Lire/enregistrer un son, une vido, : 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

* Problmes de connexion ( internet)

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

Petite prcision d'aprs hyronn@club-internet.fr :

RasEnumConnections doit connatre la taille (stock dans dwSize) de =
la
structure RASCONN passe comme argument Logiquement, en C(++), on
utiliserait
RASCONN rasConn;
rasConn.dwSize= sizeof (RASCONN);
Seulement, cette opration dclenche 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 prsente =
que sous
Win95/98. L'utilisation de cette technique n'altre en rien le
fonctionnement du programme sous WinNT/2000


Pour tre averti d'une connexion/dconnexion : =
RasConnectionNotification
De manire gnrale, les fonctions de l'API Win32 se rapportant =
la
connexion par modem commencent par "Ras".

Pour se dconnecter [code fourni par "Rgent" <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 trs rcente [27/03/1997] est disponible :
http://members.xoom.com/lelez/Tapi.zip

Pour la tlcopie, voir aussi
http://msdn.microsoft.com/library/psdk/fax/mfaxportal_88x1.htm


[4] Ecran

* Connatre la taille de l'cran :

GetSystemMetrics (voir aussi le message WM_DISPLAYCHANGE)

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

* Mettre une fentre au premier plan ou l'arrire-plan : =
SetWindowPos

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

* Changer la rsolution de l'cran ou enlever la barre de tche
pour se mettre en plein cran : http://micromeg.free.fr/HowTo.html

* Comment placer une icne dans le systray (zone de la barre de =
tche 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 vnement souris/clavier :

mouse_event / keybd_event (API Win32)

* Intercepter des vnements souris/clavier : il faut crer un =
hook local
(pour intercepter les messages l'intrieur d'une application) ou =
systme
(pour intercepter tous les messages envoys toutes les =
applications).
cf SetWindowsHookEx
[Rponse toffer]

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


[6] Gestion de processus

* Comment tuer un processus en connaissant uniquement le HWND de la =
fentre
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 dtecter si mon application tourne dj pour ne pas =
lancer une
deuxime 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 fentre principale d'une application dont on a le
"process id" (par exemple lance avec CreateProcess) ? Comment =
terminer une
application ?
http://support.microsoft.com/support/kb/articles/Q178/8/93.ASP

[7] Suis-je hors-sujet?

Comment crer 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, dplacement, ) avec =
en
option une fentre indiquant l'avancement de l'opration.
Sinon, on peut utiliser la mthode habituelle de recherche dans l'API =
Win32 :

franais -> anglais -> API
Dplacer fichier -> Move file -> MoveFile (ou MoveFileEx)
Copier fichier -> Copy file -> CopyFile (ou CopyFileEx)
Effacer fichier -> Delete file -> DeleteFile
etc


Cration de raccourcis (dans le menu dmarrer ou ailleurs) :
Utiliser les interfaces IShellLink et IPersistFile.
Un exemple de mon cru http://www.chez.com/nospam/CreationLiens.cpp

Comment trouver le nom rel d'un rpertoire spcial, comme le =
"menu
dmarrer", le rpertoire 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 slection de rpertoire pour que
l'utilisateur puisse choisir un rpertoire -- Bote de dialogue =
"choix d'un
rpertoire" (SHBrowseForFolder) :
http://codeguru.earthweb.com/mfc/comments/2820.shtml
http://micromeg.free.fr/HowTo.html

Tout sur les formats de fichiers (fichiers de donnes, 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

Excutable qui s'auto-dtruit :
http://www.microsoft.com/msj/defaultframe.asp?page=/msj/0198/win320198.=
htm


[9] Base de registre

Ajouter/supprimer/modifier des cls : RegCreateKey, RegCreateKeyEx,
RegDeleteKey, RegFlushKey, RegOpenKey, RegOpenKeyEx, RegSetValue,
RegSetValueEx et toutes les fonctions de l'API commenant par Reg.

Paramtres de REGEDIT.EXE
<http://groups.google.com/groups?oi=djq&selm=an_559631632>


[10] Divers

Cration d'un AUTORUN.INF :
<http://groups.google.com/groups?oi=djq&selm=an_612302829>

En gros, pour lancer un excutable, 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


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

Accder au port srie : CreateFile [API Win32]
cf aussi http://msdn.microsoft.com/library/techart/msdn_serial.htm

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

[11] Bibliographie

AMcD a crit :
Bon, voici une petite bibliographie actualise 2005 pour le codeur =
Windows
Win32/Net. Merci Aurlien, Arnaud, Olivier, etc.

[Programmation Gnrale]

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

[Programmation Avance]

- 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 Systme]

- 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)

[Scurit, 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)

[Rseau]

- 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 mentionns que des ouvrages encore trouvables.
- Certains existent en franais.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Rakotomandimby Mihamina
Le #9800151
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
Yalbrieux
Le #9800131
Bonjour,

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

Yves
Dominique Vaufreydaz
Le #9800121
Bonjour,

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



Je confirme aussi. Je vais voir pourquoi.

Doms.
Dominique Vaufreydaz
Le #9800111
Bonjour,

Je confirme aussi. Je vais voir pourquoi.



Ca devrait etre résolu. Doms.
Poster une réponse
Anonyme