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

Le
Dominique.Vaufreydaz
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 .

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

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