#include “BlackIceDEVMODE.h”
Void SetCustomStartApplicationParameterA (BlackIceDEVMODE* pDevMode, LPCSTR CustomStartApplicationParameter);
Description
Sets the value of the custom start parameter, which can be any string up to 260 characters in length.
Parameters
BlackIceDEVMODE* pDevMode - pointer to the BlackIceDEVMODE structure
LPCSTR CustomStartApplicationParameter - string containing the text to be passed
Return value
None
Programming Notes
If the length of the string is longer than 63 characters, the string is stored in the registry (in HKEY_CURRENT_USER), otherwise it is stored in the BlackIceDEVMODE structure. This means that the value cannot be longer than 63 characters (64 with the ending \0 character) when the ClearUserSettings, ReplaceUserSettings and SaveDefaultBlackIceDEVMODE functions are used to set this value for every user.
To set a value to every user that is longer than 63 characters, a custom INI file must be used at installation.
When changing this value for the current user, the string can be longer than 63 characters but must be shorter than 1024 characters.
Code Example
None
Using the BlackIceDEVMODE.dll with applications configured for “Multi-Byte Character Set” (ANSI)
The DEVMODE structure returned and used by the BlackIceDEVMODE.dll functions is always Unicode. Internally, the BlackIceDEVMODE.dll uses Unicode. The ANSI functions (functions with a name ending with ‘A’) in the DLL convert the string parameters to Unicode and call the Unicode version of the function, but the DEVMODE structure is kept Unicode for efficiency reasons and to prevent data loss. When passing a DEVMODE structure returned by one of the functions in BlackIceDEVMODE.dll to WinAPI functions, the Unicode version of the WinAPI functions must be used. You can use the Unicode version of WinAPI functions even if your application is not compiled to Unicode, by appending a ‘W’ character to the end of the WinAPI function name. For example, to call the Unicode version of CreateDC , you can use the CreateDCW function. To convert the printer name or other strings to Unicode, you can use the MultiByteToWideChar WinAPI function.
Sample Code:
char szPrinterName[256] = "Black Ice ColorPlus";
WCHAR szPrinterNameUnicode[256];
MultiByteToWideChar(CP_ACP, 0, szPrinterName, -1, szPrinterNameUnicode, 256);
HANDLE hPrinter = NULL;
PRINTER_DEFAULTSW pd = { NULL, NULL, PRINTER_ALL_ACCESS };
if(OpenPrinterW(szPrinterNameUnicode, &hPrinter, &pd))
{
LPBlackIceDEVMODE lpDevMode = LoadBlackIceDEVMODE(szPrinterName);
if (lpDevMode == NULL)
{
ClosePrinter(hPrinter);
return FALSE;
}
// Setting TIFF Group 4, 1 bit output for example
SetFileFormat(FFR_TIFF_G4, lpDevMode); // FFR_TIFF_G4 = 7
SetColorDepth(BITS_1, lpDevMode); // BITS_1 = 0
HDC hDC = CreateDCW(L"WINSPOOL", szPrinterNameUnicode, NULL, (DEVMODEW*)lpDevMode);
if (hDC == NULL)
{
ClosePrinter(hPrinter);
return FALSE;
}
...