Autor Beitrag
Uwe2703
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 30.01.04 19:58 
Hallo zusammen,

ich möchte mit einem Programm vorhandene Drucker umbenennen (also zum Beispiel: "HP LaserJet 4050" -> "Laser".

Weiß jemand, wie es am einfachsten geht?

Ich bin mir nicht sicher, ob es auch mit Delphifunktionen geht, deshalb habe ich es mal hier gepostet.

Vielen Dank im Voraus,
Uwe
Uwe2703 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 30.01.04 23:22 
Hmm,

einfach geht es wohl nicht. Habe folgendes gefunden (MFC C++). Kriege ich in Delphi aber nicht gebacken... :oops:

S. Rajagopalan hat folgendes geschrieben:
void CRenamePrinterDlg::OnRenamePrinter()
{
HANDLE hPrinter = NULL;
DWORD dwNeeded = 0;
PRINTER_INFO_2 *pi2 = NULL;
DEVMODE *pDevMode = NULL;
PRINTER_DEFAULTS pd;
BOOL bFlag;
LONG lFlag;

// Open printer handle (on Windows NT, you need
full-access because you
// will eventually use SetPrinter)...
LPTSTR pPrinterName = "LASER-Printer" ;
ZeroMemory(&pd, sizeof(pd));
pd.DesiredAccess = PRINTER_ALL_ACCESS;

bFlag = OpenPrinter(pPrinterName, &hPrinter, &pd);
if (!bFlag || (hPrinter == NULL))
return ;

// The first GetPrinter tells you how big the buffer
should be in
// order to hold all of PRINTER_INFO_2. Note that
this should fail with
// ERROR_INSUFFICIENT_BUFFER. If GetPrinter fails
for any other reason
// or dwNeeded isn't set for some reason, then there
is a problem...
SetLastError(0);
bFlag = GetPrinter(hPrinter, 2, 0, 0, &dwNeeded);
if ((!bFlag) && (GetLastError() !=
ERROR_INSUFFICIENT_BUFFER) ||
(dwNeeded == 0))
{
ClosePrinter(hPrinter);
return ;
}

// Allocate enough space for PRINTER_INFO_2...
pi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded);
if (pi2 == NULL)
{
ClosePrinter(hPrinter);
return ;
}

// The second GetPrinter fills in all the current
settings, so all you
// need to do is modify what you're interested in...
bFlag = GetPrinter(hPrinter, 2, (LPBYTE)pi2,
dwNeeded, &dwNeeded);
CString bval ;
bval.Format(" GetPrinter: %d",bFlag) ;
AfxMessageBox(bval) ;

if (!bFlag)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
return ;
}

// If GetPrinter didn't fill in the DEVMODE, try to
get it by calling
// DocumentProperties...
if (pi2->pDevMode == NULL)
{
dwNeeded = DocumentProperties(NULL, hPrinter,
pPrinterName,
NULL, NULL, 0);
if (dwNeeded <= 0)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
return ;
}

pDevMode = (DEVMODE *)GlobalAlloc(GPTR, dwNeeded);
if (pDevMode == NULL)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
return ;
}

lFlag = DocumentProperties(NULL, hPrinter,
pPrinterName,
pDevMode, NULL,
DM_OUT_BUFFER);
if (lFlag != IDOK || pDevMode == NULL)
{
GlobalFree(pDevMode);
GlobalFree(pi2);
ClosePrinter(hPrinter);
return ;
}

pi2->pDevMode = pDevMode;
}

// Driver is reporting that it doesn't support this
change...
if (!(pi2->pDevMode->dmFields & DM_ORIENTATION))
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
if (pDevMode)
GlobalFree(pDevMode);
return ;
}

// Specify exactly what we are attempting to
change...
/*pi2->pDevMode->dmFields = DM_ORIENTATION;
pi2->pDevMode->dmOrientation = dmOrientation;*/
//CTS_SR
LPTSTR lpPrinterName = "Hi! I am the new printer" ;


pi2->pPrinterName = lpPrinterName ;

// Do not attempt to set security descriptor...
pi2->pSecurityDescriptor = NULL;

// Make sure the driver-dependent part of devmode is
updated...
lFlag = DocumentProperties(NULL, hPrinter,
pPrinterName,
pi2->pDevMode, pi2->pDevMode,
DM_IN_BUFFER | DM_OUT_BUFFER);
if (lFlag != IDOK)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
if (pDevMode)
GlobalFree(pDevMode);
return ;
}

// Update printer information...
bFlag = SetPrinter(hPrinter, 2, (LPBYTE)pi2, 0);
if (!bFlag)
// The driver doesn't support, or it is unable to
make the change...
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
if (pDevMode)
GlobalFree(pDevMode);
return ;
}

// Tell other apps that there was a change...
SendMessageTimeout(HWND_BROADCAST, WM_DEVMODECHANGE,
0L,
(LPARAM)(LPCSTR)pPrinterName,
SMTO_NORMAL, 1000, NULL);

// Clean up...
if (pi2)
GlobalFree(pi2);
if (hPrinter)
ClosePrinter(hPrinter);
if (pDevMode)
GlobalFree(pDevMode);

return ;

}


Geht das denn wirklich nicht einfacher??? :shock:

Viele Grüße,
Uwe