Activer completionchar (completion automatique en console dos)

Soyez le premier à donner votre avis sur cette source.

Vue 7 548 fois - Téléchargée 244 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
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
29 avril 2004 à 09:58
Salut,
a bas les leaks mémoires !!

Corrigé, merci.
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
28 avril 2004 à 16:29
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.