-
hi
und zwar möchte ich den Druckernamen als Text eingeben und prüfen, ob es diesen Drucker auch gibt. Wenn JA, dann soll er drucken, wenn NEIN dann soll eine Fehlermeldung kommen.Mein Problem ist, wie ich prüfen kann ob es den Drucker gibt
Kann mir da jemand bitte weiterhelfen
Danke
-
[code]
void CEnumPrinter::LoadPrinterList(void)
{
PRINTER_INFO_4 *pi4=NULL;
DWORD size, nunOfPrinters;
EnumPrinters(PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL, NULL, 4,NULL ,0,(LPDWORD) &size, (LPDWORD) &nunOfPrinters);pi4=(PRINTER_INFO_4
malloc(size);
if (!EnumPrinters(PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL, NULL, 4,(LPBYTE) pi4 ,size ,(LPDWORD) &size, (LPDWORD) &nunOfPrinters))
{
return;
}for (int i=0;i<nunOfPrinters;i++)
{
CString str;
str.Format("%s",(pi4+i)->pPrinterName);if (str == printereingabename)
{
blablabla
}
}
free(pi4);
}[cpp]
Hab ich übrigens aus einem Forum geklaut
Weiss aber nicht mehr wo...
-
hi
danke erstmal für deine Antwortvoid CTESTDlg::LoadPrinterList(void) { // TODO: Add your control notification handler code here PRINTER_INFO_4 *pi4=NULL; DWORD size, nunOfPrinters; EnumPrinters(PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL, NULL, 4,NULL ,0,(LPDWORD) &size, (LPDWORD) &nunOfPrinters); pi4=(PRINTER_INFO_4 *) malloc(size); if (!EnumPrinters(PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL, NULL, 4,(LPBYTE) pi4 ,size ,(LPDWORD) &size, (LPDWORD) &nunOfPrinters)) { return; } for (int i=0;i<nunOfPrinters;i++) { CString str; str.Format("%s",(pi4+i)->pPrinterName); if (str == m_strEingabe) { //blablabla } } free(pi4); }
Habs grad ausprobiert, nun kommen folgenede Fehler: Da fehlen noch includes oder?
error C2065: 'PRINTER_INFO_4' : undeclared identifier
error C2065: 'pi4' : undeclared identifier
error C2106: '=' : left operand must be l-value
error C2065: 'EnumPrinters' : undeclared identifier
error C2065: 'PRINTER_ENUM_FAVORITE' : undeclared identifier
error C2065: 'PRINTER_ENUM_LOCAL' : undeclared identifier
error C2059: syntax error : ')'
warning C4018: '<' : signed/unsigned mismatch
error C2227: left of '->pPrinterName' must point to class/struct/unionDanke
-
ka welche, aber MSDN wird Wunder wirken
MfG me
-
hab nichts gefunden, weiß auch nicht was man eingeben soll (PRINTER_INFO_4)
-
z.B. PRINTER_INFO_4
Wenn man den lokalen Programmstart wegrechnet hat er es in 0,02 sekunden gefunden
-
okay, sorry habs wo falsch eingegeben
Kann das sein, dass das unter MFC gar nicht funktioniert?
Von irgendwelchen includes steht da auch nichts,
-
Doch, lies es nochmal durch und achte besonders auf das Wort "Requirements" ziemlich weit unten und die Buchstabenkombination ".h".
Bei letzterem hilft dir auch die Tastenkombination Strg+F.
-
yup, danke, ist klar
-
hi
wie kann ich Zeichen abschneiden
z.B steht in de, String str jetzt z.B.
"\\A\B\DRUCKERNAME"Ich möchte aber nur das DRUCKERNAME in dem String drin steht
Also immer bis zum ersten \ von rechtskann mir da jemand bitte helfen
vielen dank
-
Das müsste so gehen
int nPos = str.ReverseFind( '\\'); str = str.Mid(1, pos-1);
Gruß
:: NoName ::
-
:: NoName :: schrieb:
int nPos = str.ReverseFind( '\\'); str = str.Mid(1, pos-1);
Schreibfehler, richtige Version:
int nPos = str.ReverseFind( '\\'); str = str.Mid(1, nPos-1);
Denke aber, dass du das selbst gemerkt hast
MfG me
-
Hmm, stimmt. Manchmal bin ich nicht ganz bei der Sache...
Gruß
:: NoName ::
-
hi
klasse, vielen Dank für eure Hilfe
-
wie kann ich Zeichen abschneiden
z.B steht in de, String str jetzt z.B.
"\\A\DRUCKERNAME"Ich möchte aber nur das DRUCKERNAME in dem String drin steht
Also das \\A\ soll wegfallen
SO wollt ich das eigentlichwenn so aussieht:
int nPos = str.ReverseFind( '\\'); str = str.Mid(1, nPos-1);
Dann sieht der String so aus "\A"
Aber ich möcht nur DRUCKERNAME drin stehen haben
WIe würde das dann aussehen
dankewenn ich das schreibe : int nPos = str.ReverseFind( '\');
funktioniert's nicht
-
Du musst doch nur andere Positionen nehmen.
In Zahlen ausgedrückt:
Nicht
(0, 4) // Startzeichen, Anzahl
sondern
(4, 11)Auf die 11 kommst du mit der Funktion GetLength und etwas nachdenken.
-
aso ist das, jetzt gehts
-
Hallo,
weiß jemand wie man zeilenweise Drucken kann?
Also das hier hab ich hier mal gefunden: Aber ich glaub das ist nicht das richtige oder?
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); CString printAusgabe; //AU zeilenweise auslesen //sofort jede Zeile drucken if (dlgPrint.DoModal()==IDOK) { CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC()); DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "Drehen32: Arbeitsunterweisung drucken"; myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; if (dcPrint.StartDoc(&myPrintJob)>=0) { dcPrint.StartPage(); //Schleife zum AU-file auslesen string filename=AU_File_Name; FILE *aufile; char c; string s,a; CString printAusgabe; int linecnt=0; string au_file=AU_Pfad; au_file.append(AU_File_Name); aufile = fopen(au_file.c_str(),"r"); while(!feof(aufile)) { c=fgetc(aufile); if(c=='\n') { //s.append(" \n\r"); printAusgabe=s.c_str(); printAusgabe.OemToAnsi(); dcPrint.TextOut(0,linecnt,printAusgabe); linecnt+=100; s=""; } else { a=c; s.append(a); } if(linecnt>(66*100)) { // Seite auswerfen dcPrint.EndPage(); linecnt=0; dcPrint.StartPage(); } } printAusgabe=s.c_str(); printAusgabe.OemToAnsi(); //dcPrint.DrawText(printAusgabe,rect,DT_WORDBREAK); // Seite auswerfen dcPrint.EndPage(); // Dokument schließen dcPrint.EndDoc(); } // Druckergerätekontext löschen dcPrint.DeleteDC(); }
-
hi
Geht soetwas?
Es soll eine Zeile oder Text
gedruckt werden und dann angehalten werden .Sprich die
Seite soll nicht durchgezogen werden .
Später kommt dann vielleicht nochmal eine Zeile aber
dann einen bestimmten Absatz drunter (das geht
automatisch mit so einem Plotter)Aber keine Ahnung ob das überhaupt möglich ist
Jemand ne Ahnung?Merci
-
hi
nochmal eine Frage:Drucken tu ich so, hab ich ja hier in der "Suche" gefunden:
//Drucken CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); UpdateData(TRUE); if (dlgPrint.DoModal()==IDOK) { CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC()); DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "PrintingTest"; //Name des Druckauftrages, wie er im Spooler erscheint myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; if (dcPrint.StartDoc(&myPrintJob)>=0) { dcPrint.StartPage(); RECT rctA; rctA.left = 20; rctA.top = 30; rctA.right = 800; rctA.bottom = 800;; dcPrint.DrawText(m_strText, &rctA, DT_LEFT); dcPrint.EndPage(); dcPrint.EndDoc(); } dcPrint.DeleteDC(); }
Wenn ich nun auf mein "Drucken" Button drück, wird immer das "Drucker auswählen" Menü hochgepoppt.
Weiß jemand wie man das ausschalten kann. Es soll einfach gedruckt werden , wie im Word,wenn man in der Symbolleiste auf den Drucker klickt
Vielen Dank!!