Hallo, ich bin neu in diesem Forum und schon gleich ein Problem bei der implementierung einer Windows API Funktion über JNA.
Ich habe die Frage schon in einem anderen Forum gestellt um dort Aushilfe zu bekommen aber nicht mal die kleinste Reaktion deswege lege ich meine Hoffnung auf dieses Forum.
Nun:
Ich bin dabei ein Print Management System zu entwickeln das dazu dient Druck aufträge freizugeben oder zu blockieren sowie diverse andere Funktionen.
Das Problem allerdings ist dass ich noch nicht soviel Erfahrung habe was JNA angeht und deswegen bitte ich darum dass mir vieleicht jemand aushelfen kann.
Mein Problem liegt bei der Implementierung zweier DatenTypen: LPDEVMODE und PSECURITY_DESCRIPTOR ich tue mich sehr schwer.
Devmode:
PSECURITY_DESCRIPTOR
Keine definition direkt gefunden wie implementiere ich diese bzw. welcher Datentyp?
Hier die aktuelle Implementierung bis auf diese beiden Datentypen.
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.WinBase.SYSTEMTIME;
import com.sun.jna.platform.win32.WinDef.DWORD;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
/*
* typedef struct _JOB_INFO_2 {
DWORD JobId;
LPTSTR pPrinterName;
LPTSTR pMachineName;
LPTSTR pUserName;
LPTSTR pDocument;
LPTSTR pNotifyName;
LPTSTR pDatatype;
LPTSTR pPrintProcessor;
LPTSTR pParameters;
LPTSTR pDriverName;
LPDEVMODE pDevMode;
LPTSTR pStatus;
PSECURITY_DESCRIPTOR pSecurityDescriptor;
DWORD Status;
DWORD Priority;
DWORD Position;
DWORD StartTime;
DWORD UntilTime;
DWORD TotalPages;
DWORD Size;
SYSTEMTIME Submitted;
DWORD Time;
DWORD PagesPrinted;
} JOB_INFO_2, *PJOB_INFO_2;
*/
public interface WinPrintJobs extends StdCallLibrary{
WinPrintJobs INSTANCE = (WinPrintJobs) Native.loadLibrary("Winspool.drv", WinPrintJobs.class, W32APIOptions.UNICODE_OPTIONS);
public static class _JOB_INFO_2 extends Structure {
public int JobId;
public String pPrinterName;
public String pMachineName;
public String pUserName;
public String pDocument;
public String pNotifyName;
public String pDatatype;
public String pPrintProcessor;
public String pParameters;
public String pDriverName;
//LPDEVMODE pDevMode;
public String pStatus;
//PSECURITY_DESCRIPTOR pSecurityDescriptor;
public int Status;
public int Priority;
public int Position;
public int StartTime;
public int UntilTime;
public int TotalPages;
public int Size;
SYSTEMTIME Submitted;
public int Time;
public int PagesPrinted;
@Override
protected List<? > getFieldOrder() {
return Arrays.asList(new String[] {"JobId", "pPrinterName", "pMachineName", "pUserName","pDocument","pNotifyName",
"pDatatype", "pPrintProcessor", "pParameters", "pDriverName", "pDevMode",
"pStatus", "pSecurityDescriptor", "Status", "Priority", "Position","StartTime",
"UntilTime", "TotalPages", "Size", "Time", "PagesPrinted"
});
}
public _JOB_INFO_2() {
}
public _JOB_INFO_2(int size) {
super(new Memory(size));
}
//Fetch Printer Jobs
}
boolean EnumJobs(HANDLE spooler, DWORD FirstJob, DWORD NoJobs, int level, IntByReference pRef3, int cBuf, IntByReference pcbNeeded, IntByReference pcReturned );
}```
Vielen Dank im voraus.
Fox