|
auteur : mabu |
Pour simuler l'appui sur une touche, on peut utiliser la fonction keybd_event. Le code suivant fait clignoter les LED num-lock et caps-lock du clavier :
# include <stdio.h>
# include <conio.h>
# include <windows.h>
void press_key (BYTE key)
{
keybd_event (key, 0 , 0 , 0 );
Sleep (50 );
keybd_event (key, 0 , KEYEVENTF_KEYUP, 0 );
Sleep (50 );
}
int main (void )
{
printf (" Appuyez sur une touche pour terminer.\n " );
while (! _kbhit ())
{
press_key (VK_CAPITAL);
press_key (VK_NUMLOCK);
Sleep (100 );
}
return 0 ;
}
|
Il y a aussi la fonction mouse_event qui permet de simuler un événement de la souris et enfin
SendInput qui généralise les fonctions keybd_event et mouse_event (entre autres !).
|
|
auteur : Melem |
Cela peut se faire en utilisant les fonctions d'administration réseau de Windows. Elles sont déclarées dans lm.h (LAN Manager)
et contenues dans netapi32.dll. Il ne faut donc pas oublier d'ajouter netapi32.lib dans les entrées du linkeur. Voici quelques fonctions
vraiment basiques.
Fonction |
Description |
NetUserAdd |
Crée un nouvel utilisateur. |
NetUserGetInfo |
Permet d'obtenir des informations concernant un compte d'utilisateur. |
NetUserSetInfo |
Permet de modifier les informations concernant un compte d'utilisateur. |
NetUserChangePassword |
Permet de modifier le mot de passe d'un utilisateur. |
NetUserDel |
Permet de supprimer un compte d'utilisateur. |
Le programme suivant crée un compte administrateur au nom de "developpez" avec le mot de passe "1234".
# include <windows.h>
# include <lm.h>
int main ()
{
USER_INFO_1 userinfo;
DWORD level = 1 , dwError;
ZeroMemory (& userinfo, sizeof (userinfo));
userinfo.usri1_name = L" developpez " ;
userinfo.usri1_password = L" 1234 " ;
userinfo.usri1_priv = USER_PRIV_ADMIN;
userinfo.usri1_flags = UF_SCRIPT;
NetUserAdd (NULL , level, (LPBYTE)& userinfo, & dwError);
return 0 ;
}
|
Il est important de savoir que créer un utilisateur est différent de faire en sorte qu'il soit visible dans le gestionnaire des
comptes d'utilisateur du panneau de configuration. Pour gérer les utilisateurs et les groupes locaux, éditez le document lusrmgr.msc
qui se trouve dans le répertoire système (system32).
L'API du LAN Manager comprend également des fonctions de gestion des groupes. Le nom de ces fonctions commencent tous par NetGroup.
|
|
auteur : Melem |
A l'aide des fonctions exportées par advapi32.dll (Advanced APIs). Voici quelques fonctions d'usage courant :
Fonction |
Description |
RegCreateKeyEx |
Crée un handle vers une clé. La clé sera créée si elle n'existe pas encore. |
RegOpenKeyEx |
Crée un handle vers une clé existante (RegCreateKeyEx avec moins de paramètres). |
RegSetValueEx |
Crée une nouvelle valeur. Modifie la valeur si elle existe déjà. |
RegQueryValueEx |
Lit une valeur. |
RegDeleteKey |
Supprime une clé. |
RegDeleteValue |
Supprime une valeur. |
Voici un petit bout de code en guise d'illustration.
# include <windows.h>
int main ()
{
HKEY Developpez;
char s[100 ] = " http://www.developpez.com/ " ;
RegCreateKeyEx ( HKEY_CURRENT_USER, " Software\\Developpez " , 0 , NULL , 0 , KEY_ALL_ACCESS, NULL ,
& Developpez, NULL );
RegSetValueEx (Developpez, " index " , 0 , REG_SZ, (LPBYTE)s, (DWORD)strlen (s));
RegCloseKey (Developpez);
return 0 ;
}
|
|
|
auteur : Melem |
A l'aide de la fonction GetEnvironmentVariable. Il y a aussi la fonction ExpandEnvironmentStrings qui permet
de développer une chaîne contenant une ou plusieurs variables d'environnement données sous la forme %mavariable%. Par exemple :
# include <stdio.h>
# include <windows.h>
int main ()
{
char lpBuffer[256 ];
if (GetEnvironmentVariable (" username " , lpBuffer, sizeof (lpBuffer)) ! = 0 )
{
printf (" username=%s\n " , lpBuffer);
if (GetEnvironmentVariable (" userdomain " , lpBuffer, sizeof (lpBuffer)) ! = 0 )
{
printf (" userdomain=%s\n " , lpBuffer);
if (ExpandEnvironmentStrings (" %username%@%userdomain% " , lpBuffer, sizeof (lpBuffer)) ! = 0 )
printf (" username@userdomain=%s\n " , lpBuffer);
}
}
return 0 ;
}
|
|
|
auteur : Melem |
A l'aide de GetLogicalDrives ou GetLogicalDriveStrings. Cette dernière est plus simple à utiliser
car elle retourne directement la liste des lecteurs avec les lettres de lecteur (X:\) et non avec des entiers. Cette liste sera
stockée dans un tableau fourni en paramètre sous la forme A:\$B:\$C:\$...Z:\$$ où les $ sont en fait des '\0'.
Le dernier caractère nul termine la liste (le nul devant ce dernier termine Z:\). Il est donc très simple
d'afficher cette liste.
# include <stdio.h>
# include <windows.h>
int main ()
{
char lpBuffer[500 ], * p;
GetLogicalDriveStrings (sizeof (lpBuffer), lpBuffer);
for (p = lpBuffer; * p ! = ' \0 ' ; p + = 4 )
printf (" %s\n " , p);
return 0 ;
}
|
|
|
auteur : Melem |
GetDriveType("X:\"). Comparez avec les constantes DRIVE_XXX pour obtenir le type du lecteur.
|
|
auteur : Melem |
Pour quitter Windows (EWX_LOGOFF) et éventuellement éteindre (EWX_POWEROFF) ou redémarrer (EWX_REBOOT) l'ordinateur, utilisez la fonction ExitWindowsEx.
Par exemple : ExitWindowsEx(EWX_POWEROFF, 0); /* Demande l'arrêt de l'ordinateur */
L'application doit avoir le privilège SE_SHUTDOWN_NAME.
|
lien : Comment ajuster les privilèges d'un processus ?
|
|
auteur : Melem |
LockWorkStation();
Windows 2000 et plus récents uniquement. Il faut définir _WIN32_WINNT à 0x0500 avant d'inclure windows.h.
|
|
auteur : Melem |
SYSTEM_POWER_STATUS status;
GetSystemPowerStatus (& status);
|
Avec la structure SYSTEM_POWER_STATUS définie ainsi :
typedef struct _SYSTEM_POWER_STATUS {
BYTE ACLineStatus;
BYTE BatteryFlag;
BYTE BatteryLifePercent;
BYTE Reserved1;
DWORD BatteryLifeTime;
DWORD BatteryFullLifeTime;
} SYSTEM_POWER_STATUS, * LPSYSTEM_POWER_STATUS;
|
Pour utiliser cette fonction, il faut définir la macro _WIN32_WINNT à 0x0400 avant d'inclure windows.h.
Le message WM_POWERBROADCAST permet également d'avoir des informations concernant l'état de la battérie dès qu'un événement
se produit (secteur coupé ou revenu, battérie faible, etc.). wParam contient l'événement qui s'est produit
(PBT_APMPOWERSTATUSCHANGE, PBT_APMBATTERYLOW, etc.) et lParam d'éventuelles informations supplémentaires mais contient
0 la plupart du temps. Généralement, les applications appellent GetSystemPowerStatus pour connaître les détails d'une notification.
|
|
auteurs : Melem, Médinoc |
Il faut le demander à une fenêtre ! Cela se fait en lui envoyant le message WM_SYSCOMMAND avec comme paramètres : wParam = SC_MONITORPOWER
et lParam = 1 ou 2 (éteindre l'écran) ou -1 (rallumer). Si la fenêtre accepte la demande, c'est-à-dire passe le message à DefWindowProc, alors elle
sera exhaussée, sous réserve que la commande soit supportée par le périphérique. On peut donc arriver à notre fin en appelant directement DefWindowProc
avec les bons paramètres.
# include <windows.h>
int main ()
{
DefWindowProc (GetDesktopWindow (), WM_SYSCOMMAND, SC_MONITORPOWER, 1 );
Sleep (2000 );
DefWindowProc (GetDesktopWindow (), WM_SYSCOMMAND, SC_MONITORPOWER, - 1 );
return 0 ;
}
|
|
|
auteur : Melem |
En appelant la fonction SetSystemPowerState avec la valeur du paramètre Suspend égale à TRUE si on veut mettre l'ordinateur en veille
et FALSE si on veut le mettre en veille prolongée (si la mise en veille prolongée est supportée, sinon ce paramètre est tout simplement
ignoré est l'ordinateur est mis en veille). Par exemple : SetSystemPowerState(FALSE, 0); /* Demande la mise en veille de l'ordinateur */.
|
Consultez les autres F.A.Q's
Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs :
- Les contributions de LFE sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de LFE tant que cette note apparaît clairement :
"Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement".
- Pour ce qui est des autres contributions : Copyright © 2002-2006 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peux en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.