[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.
-- 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.
[...]
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
Je confirme qu'il y a un problème avec les accentuées.
Yves
Je confirme aussi. Je vais voir pourquoi.
Doms.
Ca devrait etre résolu. Doms.