47. FAQ o Win API

Q> How to change default the printer? 

A>  
int CALLBACK WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, 
		LPSTR lpCmdLine, int nShowCmd) 
{ 
	/* Get the port AND device settings for the specified printer */ 
	char szDeviceString [260]; 

	/* First (and only) parameter is the printer name */ 
	lstrcpy (szDeviceString, __ argv [1]); 
	const int Pos = lstrlen (szDeviceString); 

	/* Append a ', ' */ 
	szDeviceString [Pos] = ', '; 

	GetProfileString ("Devices", __ argv [1], "", 
			&szDeviceString [Pos+1], 
			sizeof (szDeviceString) - (Pos+1)); 

	/* Have we got the printer? */ 
	if (szDeviceString [Pos+1]! = '\0 ') 
	{ 
		/* Set the default printer */ 
		WriteProfileString ("windows", "device", szDeviceString); 

		SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, 0L, 
			(LPARAM) (LPCTSTR) "windows", SMTO_NORMAL, 
			1000, NULL); 
	}
	else 
	{ 
		MessageBox (NULL, "Printer not found", 
			"Set Default Printer Utility", 
			MB_OK | MB_ICONERROR); 
	}

	return 0; 
}

References and samples: 

Knowledge Base Article Q135387: "How to Get and Set the Default Printer in  
Windows"  

Knowledge Base Article Q140560 "How to Set the Default Printer Programmatically 
in Windows 95"  

2000 (c) DM