Activer completionchar (completion automatique en console dos)

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

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.