Skip to content

Commit

Permalink
Merge pull request java-native-access#1556 from tresf/set-job
Browse files Browse the repository at this point in the history
Add SetJob, SetPrinter to Winspool
  • Loading branch information
matthiasblaesing authored Oct 23, 2023
2 parents da87d77 + b64f0f1 commit 3bcd64e
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Next Release (5.14.0)

Features
--------
* [#1556](https://github.com/java-native-access/jna/pull/1556): Add `SetJob`, `SetPrinter` to `c.s.j.p.w.Winspool` - [@tresf](https://github.com/tresf).
* [#1534](https://github.com/java-native-access/jna/pull/1534): Add `GetMethod`, `Put`, `SpawnInstance` to `c.s.j.p.win32.COM.WbemCli#IWbemClassObject` and `ExecMethod` to `c.s.j.p.win32.COM.WbemCli#IWbemServices` - [@faddom](https://github.com/faddom).
* [#1544](https://github.com/java-native-access/jna/pull/1544): Add `GetPriorityClass`, `SetPriorityClass`, `GetThreadPriority`, `SetThreadPriority` and associated constants to `c.s.j.p.win32.Kernel32` - [@dEajL3kA](https://github.com/dEajL3kA).
* [#1548](https://github.com/java-native-access/jna/pull/1548): Make interface `c.s.j.p.mac.XAttr public` - [@matthiasblaesing](https://github.com/matthiasblaesing).
Expand Down
103 changes: 103 additions & 0 deletions contrib/platform/src/com/sun/jna/platform/win32/Winspool.java
Original file line number Diff line number Diff line change
Expand Up @@ -153,13 +153,28 @@ public interface Winspool extends StdCallLibrary {
public static final int PRINTER_ENUM_ICON8 = 0x00800000;
public static final int PRINTER_ENUM_HIDE = 0x01000000;

public static final int PRINTER_CONTROL_PAUSE = 0x01;
public static final int PRINTER_CONTROL_PURGE = 0x02;
public static final int PRINTER_CONTROL_RESUME = 0x03;
public static final int PRINTER_CONTROL_SET_STATUS = 0x04;

public static final int PRINTER_NOTIFY_OPTIONS_REFRESH = 0x01;

public static final int PRINTER_NOTIFY_INFO_DISCARDED = 0x01;

public static final int PRINTER_NOTIFY_TYPE = 0x00;
public static final int JOB_NOTIFY_TYPE = 0x01;

public static final int JOB_CONTROL_PAUSE = 0x01;
public static final int JOB_CONTROL_RESUME = 0x02;
public static final int JOB_CONTROL_CANCEL = 0x03;
public static final int JOB_CONTROL_RESTART = 0x04;
public static final int JOB_CONTROL_DELETE = 0x05;
public static final int JOB_CONTROL_SENT_TO_PRINTER = 0x06;
public static final int JOB_CONTROL_LAST_PAGE_EJECTED = 0x07;
public static final int JOB_CONTROL_RETAIN = 0x08;
public static final int JOB_CONTROL_RELEASE = 0x09;

public static final short PRINTER_NOTIFY_FIELD_SERVER_NAME = 0x00;
public static final short PRINTER_NOTIFY_FIELD_PRINTER_NAME = 0x01;
public static final short PRINTER_NOTIFY_FIELD_SHARE_NAME = 0x02;
Expand Down Expand Up @@ -1275,4 +1290,92 @@ public JOB_INFO_1(int size) {
super(new Memory(size));
}
}

/**
* The SetJob function pauses, resumes, cancels, or restarts a print job on a specified printer. You can also use
* the SetJob function to set print job parameters, such as the print job priority and the document name.
*
* You can use the SetJob function to give a command to a print job, or to set print job parameters, or to do both
* in the same call. The value of the Command parameter does not affect how the function uses the Level and pJob
* parameters. Also, you can use SetJob with JOB_INFO_3 to link together a set of print jobs.
*
* @param hPrinter
* [in] A handle to the printer object of interest. Use the OpenPrinter, OpenPrinter2, or AddPrinter
* function to retrieve a printer handle.
* @param JobId
* [in] Identifier that specifies the print job. You obtain a print job identifier by calling the AddJob
* function or the StartDoc function. If the Level parameter is set to 3, the JobId parameter must match
* theJobId member of the JOB_INFO_3 structure pointed to by pJob
* @param Level
* [in] The type of job information structure pointed to by the pJob parameter.
* All versions of Windows: You can set the Level parameter to 0, 1, or 2. When you set Level to 0, pJob
* be NULL. Use these values when you are not setting any print job parameters. You can also set the Level
* parameter to 3. Starting with Windows Vista: You can also set the Level parameter to 4.
* @param pJob
* [in] A pointer to a structure that sets the print job parameters. All versions of Windows: pJob can
* point to a JOB_INFO_1 or JOB_INFO_2 structure. pJob can also point to a JOB_INFO_3 structure. You must
* have JOB_ACCESS_ADMINISTER access permission for the jobs specified by the JobId and NextJobId members
* of the JOB_INFO_3 structure. Starting with Windows Vista: pJob can also point to a JOB_INFO_4 structure.
* If the Level parameter is 0, pJob should be NULL.
* @param Command
* [in] The print job operation to perform. This parameter can be one of the JOB_CONTROL_XXX values.
* To cancel a job, do NOT use JOB_CONTROL_CANCEL, intead use JOB_CONTROL_DELETE to delete a job.
*
* @return If the function succeeds, the return value is a nonzero value. If the function fails, the return value is
* zero.
*
* @see <a href=
* "https://learn.microsoft.com/en-us/windows/win32/printdocs/setjob">
* SetJob function</a>
*/
boolean SetJob(
// _In_
WinNT.HANDLE hPrinter,
// _In_
int JobId,
// _In_
int Level,
// _In_
Pointer pJob,
// _In_
int Command);

/**
* The SetPrinter function sets the data for a specified printer or sets the state of the specified printer by
* pausing printing, resuming printing, or clearing all print jobs.
*
* @param hPrinter
* [in] A handle to the printer. Use the OpenPrinter, OpenPrinter2, or AddPrinter function to retrieve a
* printer handle.
* @param Level
* [in] The type of data that the function stores into the buffer pointed to by pPrinter. If the Command
* parameter is not equal to zero, the Level parameter must be zero. This value can be 0, 2, 3, 4, 5, 6,
* 7, 8, or 9.
* @param pPrinter
* A pointer to a buffer containing data to set for the printer, or containing information for the command
* specified by the Command parameter. The type of data in the buffer is determined by the value of Level.
* @param Command
* The action to perform. If the Level parameter is nonzero, set the value of this parameter to zero. In
* this case, the printer retains its current state and the function reconfigures the printer data as
* specified by the Level and pPrinter parameters. If the Level parameter is zero, set the value of this
* parameter to one of the PRINTER_CONTROL_XXX values.
*
* @return If the function succeeds, the return value is a nonzero value.
* If the function fails, the return value is zero. If Level is 7 and the publish action failed, SetPrinter
* returns ERROR_IO_PENDING and attempts to complete the action in the background. If Level is 7 and the
* update action failed, SetPrinter returns ERROR_FILE_NOT_FOUND.
*
* @see <a href=
* "https://learn.microsoft.com/en-us/windows/win32/printdocs/setprinter">
* SetPrinter function</a>
*/
boolean SetPrinter(
// _In_
WinNT.HANDLE hPrinter,
// _In_
int Level,
// _In_
Pointer pPrinter,
// _In_
int Command);
}

0 comments on commit 3bcd64e

Please sign in to comment.