Activer completionchar (completion automatique en console dos)

Soyez le premier à donner votre avis sur cette source.

Vue 7 232 fois - Téléchargée 186 fois

Description

A chaque fois que je réinstalle ma machine, je me dis qu'il faut que je fasse ce petit programme, maintenant c'est fait.

Cela sert à positionner le mode de completion dans la console dos (non activé par défaut sous windows), ainsi en appuyant sur tab dans la console, il complete automatiquement les mots.

Surpris qu'il ne soit pas déjà présent dans CS, le voici donc.

Alors, au menu :
- une dialogbox
- un SetWindowText
- puis lecture écriture dans la base de registre

Dédié aux flemmards qui en ont marre d'aller dans la base de registre

Source / Exemple :


#include <windows.h>
#include "resource.h"

HWND hEtat;

bool ecritCompletion(bool value)
{
	HKEY hKey = NULL;
	DWORD valeur;
	if (RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Command Processor",0,KEY_SET_VALUE,&hKey)!= ERROR_SUCCESS)
		return false;
	valeur = value ? 0x09 : 0x00;
    if (RegSetValueEx(hKey,"CompletionChar",0,REG_DWORD,(LPBYTE) &valeur,sizeof(DWORD))!= ERROR_SUCCESS)
	{
		RegCloseKey(hKey);
		return false;
	}
	RegCloseKey(hKey);
	return true;
}

bool litCompletion()
{
	HKEY hKey = NULL;
	DWORD type, size=255;
	char * valeur = new char[255];
	if (RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Command Processor",0,KEY_QUERY_VALUE,&hKey)!= ERROR_SUCCESS)
		return false;
	if (RegQueryValueEx(hKey, "CompletionChar", NULL, &type, (LPBYTE)valeur, &size )!= ERROR_SUCCESS)
	{
		RegCloseKey(hKey);
		return false;
	}
	int a = *valeur; 
	delete valeur;
	RegCloseKey(hKey);
	return a==9;
}

BOOL CALLBACK dialogProc(HWND handleDialog, UINT mssg, WPARAM wParam, LPARAM lParam)
{
	switch(mssg)
	{
		case WM_INITDIALOG:
			hEtat = GetDlgItem(handleDialog, IDC_ETAT);
			SetWindowText(hEtat, litCompletion() ? "Présent" : "Non présent");
			return 1;
		case WM_COMMAND:
			switch(wParam)
			{
				case IDOK:
					if (!ecritCompletion(!litCompletion()))
						SetWindowText(hEtat, "Erreur");
					SetWindowText(hEtat, litCompletion() ? "Présent" : "Non présent");
					return 0;
			}
		case WM_QUIT:
			PostQuitMessage(0);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	DialogBoxParam(hInstance, (LPCTSTR)IDD_DIA, 0, dialogProc, 0);
	return 1;
}

Conclusion :


Bien sur, on pourrait faire la meme chose en deux lignes avec un .reg, mais bon, ca serait pas marrant

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

hilairenicolas
Messages postés
400
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
1 -
Salut,
a bas les leaks mémoires !!

Corrigé, merci.
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Salut,

faut fermer hKey meme si tu ne peux pas lire ou ecrire une valeur avant de sortir illico de la fonction.

ciao...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.