AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Druckerdokumentenlisteneintrag markieren
Thema durchsuchen
Ansicht
Themen-Optionen

Druckerdokumentenlisteneintrag markieren

Offene Frage von "kandesbunzler"
Ein Thema von kandesbunzler · begonnen am 15. Jan 2007 · letzter Beitrag vom 9. Feb 2007
Antwort Antwort
kandesbunzler

Registriert seit: 12. Jan 2007
3 Beiträge
 
#1

Druckerdokumentenlisteneintrag markieren

  Alt 15. Jan 2007, 00:42
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:
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;
Auf bald ...
kandesbunzler.
  Mit Zitat antworten Zitat
kandesbunzler

Registriert seit: 12. Jan 2007
3 Beiträge
 
#2

Re: Druckerdokumentenlisteneintrag markieren

  Alt 7. Feb 2007, 00:07
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.
  Mit Zitat antworten Zitat
popo2006
(Gast)

n/a Beiträge
 
#3

Re: Druckerdokumentenlisteneintrag markieren

  Alt 7. Feb 2007, 02:06
Zwar verstehe ich die Frage nicht so ganz, aber trotzdem:

Delphi-Quellcode:
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;
mfg
  Mit Zitat antworten Zitat
kandesbunzler

Registriert seit: 12. Jan 2007
3 Beiträge
 
#4

Re: Druckerdokumentenlisteneintrag markieren

  Alt 8. Feb 2007, 23:08
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?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Druckerdokumentenlisteneintrag markieren

  Alt 9. Feb 2007, 02:31
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;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz