Autor |
Beitrag |
Uwe2703
Hält's aus hier
Beiträge: 3
|
Verfasst: 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 
Hält's aus hier
Beiträge: 3
|
Verfasst: Fr 30.01.04 23:22
Hmm,
einfach geht es wohl nicht. Habe folgendes gefunden (MFC C++). Kriege ich in Delphi aber nicht gebacken...
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???
Viele Grüße,
Uwe
|
|
|