![]() |
Druckerdokumentenlisteneintrag markieren
Hallo allerseits,
auch auf die Gefahr, daß mein Problem u./o. ich erkannt werden - hier ist es: Ich möchte aus einer SysLiestView32 den ersten Listeneintrag markieren. Als Applikation handelt es sich um ein Dienstprogramm, aber verfahrenstechnisch könnte es sich auch bspw. um die Dokumentenliste eines Druckers handeln. Problem: Mit folgendem Samplecode wird in der dritten Zeile nach 'begin' der Wert '0' zurückgeliefert:
Delphi-Quellcode:
Auf bald ...
var
wnd: HWND; begin wnd := FindWindow('#32770', 'SX Virtual Link'); wnd := FindWindowEx(wnd, 0, '#32770', nil); wnd := FindWindowEx(wnd, 0, 'SysListView32', nil); if wnd <> 0 then begin end; end; kandesbunzler. |
Re: Druckerdokumentenlisteneintrag markieren
Hallo allerseits
und ooch nööh: Hat denn gar keiner eine Idee? Anders gefragt: Mit bspw. EDA erhalte ich für die Subkategorien weitere Werte sowohl für Windows - Handles als auch für Control-ID´s. Da beim u.g. Code bereits nach Zeile 3 Null erhalte , müssen doch in den Tools vom EDA, X_Spy etc. tiefergehende Abfragen existieren. Frage: Welche könnten das sein? Auf bald ... kandesbunzler. |
Re: Druckerdokumentenlisteneintrag markieren
Zwar verstehe ich die Frage nicht so ganz, aber trotzdem:
Delphi-Quellcode:
mfg
var
wnd: HWND; begin wnd := FindWindow('#32770', 'SX Virtual Link'); if wnd <> 0 then wnd := FindWindowEx(wnd, 0, '#32770', nil); if wnd <> 0 then wnd := FindWindowEx(wnd, 0, 'SysListView32', nil); if wnd <> 0 then begin end; end; |
Re: Druckerdokumentenlisteneintrag markieren
Hallo
und danke für die Rückmeldung. Allzuschwierig sollte es eigentlich nicht sein. Bspw.: 1. Drucker pausieren 2. Druckjob aus bspw. Word abschicken 3. Welche ID, Handle o.w.w.i. hat der Druckjobeintrag. Die "wnd <> 0" sind nicht das Problem. Wie erhalte ich programatisch das Handle für o.g. Druckjobeintrag oder wenigstens für die ListView32? Der genannte Code scheitert am Rückgabewert 0 in Zeile 3. Mit XSpy geht es noch mind. zwei Unterstufen weiter, welche ich versuche, zu ermitteln. Auf bald ... kandesbunzler. PS: Ist der Quellcode für XSpy o.ä. verfügbar? |
Re: Druckerdokumentenlisteneintrag markieren
Hallo,
hier habe ich ein kleines Beispiel, um bestimmte Druckaufträge zu pausieren. Ich hoffe mal, dass ist das was du wolltest.
Delphi-Quellcode:
uses
WinSpool, Printers; procedure TForm1.Button1Click(Sender: TObject); const MaxJobs = 1024; type TJobs= array of TJobInfo2; var NoJobs: Integer; Needed, JobCounter: DWORD; i : Integer; Device, Driver, Port : array[0..255] of char; hPrinter, hDeviceMode : THandle; Buffer : Pointer; begin Printer.PrinterIndex := -1; Printer.GetPrinter(Device, Driver, Port, hDeviceMode); if not WinSpool.OpenPrinter(@Device, hPrinter, nil) then Exit; GetPrinter(hPrinter, 2, nil, 0, @Needed); GetMem(Buffer, Needed); if GetPrinter(hPrinter, 2, Buffer, Needed, @Needed) then if TPrinterInfo2A(Buffer^).pPrinterName <> nil then Caption:= 'Druckername: '+TPrinterInfo2A(Buffer^).pPrinterName; NoJobs:= 100; EnumJobs(hPrinter, 0, NoJobs, 2, nil, 0, Needed, JobCounter); GetMem(Buffer, Needed); if EnumJobs(hPrinter, 0, NoJobs, 2, Buffer, Needed, Needed, JobCounter) then begin Caption:= Caption+ ' Anzahl der Druckaufträge: '+ inttostr(JobCounter); for i:= 0 to JobCounter- 1 do begin if TJobInfo2(ptr(cardinal(Buffer)+ i* SizeOf(TJobInfo2))^).pDocument<> nil then if messagebox(0, PChar('Soll der Druckauftrag der Datei "'+ TJobInfo2(ptr(cardinal(Buffer)+i* SizeOf(TJobInfo2))^).pDocument+ '" pausieren?') ,'Nachfrage', MB_YESNO or MB_ICONQUESTION)=idYES then SetJob(hPrinter, TJobInfo2(ptr(cardinal(Buffer)+ i* SizeOf(TJobInfo2))^).JobId, 0, nil, JOB_CONTROL_PAUSE);//winspool.JOB_CONTROL_RESUME end; end; FreeMem(Buffer, Needed); WinSpool.ClosePrinter(hPrinter); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz