JwaLmAlert.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:9k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Lan Manager Alterter API interface Unit for Object Pascal                    }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: lmalert.h, released November 2001. The original Pascal }
  9. { code is: LmAlert.pas, released Februari 2002. The initial developer of the   }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaLmAlert;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "lmalert.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaLmCons, JwaWinType;
  52. //
  53. // Function Prototypes
  54. //
  55. function NetAlertRaise(AlertEventName: LPCWSTR; Buffer: LPVOID; BufferSize: DWORD): NET_API_STATUS; stdcall;
  56. {$EXTERNALSYM NetAlertRaise}
  57. function NetAlertRaiseEx(AlertEventName: LPCWSTR; VariableInfo: LPVOID; VariableInfoSize: DWORD; ServiceName: LPCWSTR): NET_API_STATUS; stdcall;
  58. {$EXTERNALSYM NetAlertRaiseEx}
  59. //
  60. //  Data Structures
  61. //
  62. type
  63.   _STD_ALERT = record
  64.     alrt_timestamp: DWORD;
  65.     alrt_eventname: array [0..EVLEN] of WCHAR;
  66.     alrt_servicename: array [0..SNLEN] of WCHAR;
  67.   end;
  68.   {$EXTERNALSYM _STD_ALERT}
  69.   STD_ALERT = _STD_ALERT;
  70.   {$EXTERNALSYM STD_ALERT}
  71.   PSTD_ALERT = ^STD_ALERT;
  72.   {$EXTERNALSYM PSTD_ALERT}
  73.   LPSTD_ALERT = ^STD_ALERT;
  74.   {$EXTERNALSYM LPSTD_ALERT}
  75.   TStdAlert = STD_ALERT;
  76.   PStdAlert = PSTD_ALERT;
  77.   _ADMIN_OTHER_INFO = record
  78.     alrtad_errcode: DWORD;
  79.     alrtad_numstrings: DWORD;
  80.   end;
  81.   {$EXTERNALSYM _ADMIN_OTHER_INFO}
  82.   ADMIN_OTHER_INFO = _ADMIN_OTHER_INFO;
  83.   {$EXTERNALSYM ADMIN_OTHER_INFO}
  84.   PADMIN_OTHER_INFO = ^ADMIN_OTHER_INFO;
  85.   {$EXTERNALSYM PADMIN_OTHER_INFO}
  86.   LPADMIN_OTHER_INFO = ^ADMIN_OTHER_INFO;
  87.   {$EXTERNALSYM LPADMIN_OTHER_INFO}
  88.   TAdminOtherInfo = ADMIN_OTHER_INFO;
  89.   PAdminOtherInfo = PADMIN_OTHER_INFO;
  90.   _ERRLOG_OTHER_INFO = record
  91.     alrter_errcode: DWORD;
  92.     alrter_offset: DWORD;
  93.   end;
  94.   {$EXTERNALSYM _ERRLOG_OTHER_INFO}
  95.   ERRLOG_OTHER_INFO = _ERRLOG_OTHER_INFO;
  96.   {$EXTERNALSYM ERRLOG_OTHER_INFO}
  97.   PERRLOG_OTHER_INFO = ^ERRLOG_OTHER_INFO;
  98.   {$EXTERNALSYM PERRLOG_OTHER_INFO}
  99.   LPERRLOG_OTHER_INFO = ^ERRLOG_OTHER_INFO;
  100.   {$EXTERNALSYM LPERRLOG_OTHER_INFO}
  101.   TErrlogOtherInfo = ERRLOG_OTHER_INFO;
  102.   PErrlogOtherInfo = PERRLOG_OTHER_INFO;
  103.   _PRINT_OTHER_INFO = record
  104.     alrtpr_jobid: DWORD;
  105.     alrtpr_status: DWORD;
  106.     alrtpr_submitted: DWORD;
  107.     alrtpr_size: DWORD;
  108.   end;
  109.   {$EXTERNALSYM _PRINT_OTHER_INFO}
  110.   PRINT_OTHER_INFO = _PRINT_OTHER_INFO;
  111.   {$EXTERNALSYM PRINT_OTHER_INFO}
  112.   PPRINT_OTHER_INFO = ^PRINT_OTHER_INFO;
  113.   {$EXTERNALSYM PPRINT_OTHER_INFO}
  114.   LPPRINT_OTHER_INFO = ^PRINT_OTHER_INFO;
  115.   {$EXTERNALSYM LPPRINT_OTHER_INFO}
  116.   TPrintOtherInfo = PRINT_OTHER_INFO;
  117.   PPrintOtherInfo = PPRINT_OTHER_INFO;
  118.   _USER_OTHER_INFO = record
  119.     alrtus_errcode: DWORD;
  120.     alrtus_numstrings: DWORD;
  121.   end;
  122.   {$EXTERNALSYM _USER_OTHER_INFO}
  123.   USER_OTHER_INFO = _USER_OTHER_INFO;
  124.   {$EXTERNALSYM USER_OTHER_INFO}
  125.   PUSER_OTHER_INFO = ^USER_OTHER_INFO;
  126.   {$EXTERNALSYM PUSER_OTHER_INFO}
  127.   LPUSER_OTHER_INFO = ^USER_OTHER_INFO;
  128.   {$EXTERNALSYM LPUSER_OTHER_INFO}
  129.   TUserOtherInfo = USER_OTHER_INFO;
  130.   PUserOtherInfo = PUSER_OTHER_INFO;
  131. //
  132. // Special Values and Constants
  133. //
  134. //
  135. // Name of mailslot to send alert notifications
  136. //
  137. const
  138.   ALERTER_MAILSLOT = WideString('\.MAILSLOTAlerter');
  139.   {$EXTERNALSYM ALERTER_MAILSLOT}
  140. //
  141. // The following macro gives a pointer to the other_info data.
  142. // It takes an alert structure and returns a pointer to structure
  143. // beyond the standard portion.
  144. //
  145. function ALERT_OTHER_INFO(x: Pointer): Pointer;
  146. {$EXTERNALSYM ALERT_OTHER_INFO}
  147. //
  148. // The following macro gives a pointer to the variable-length data.
  149. // It takes a pointer to one of the other-info structs and returns a
  150. // pointer to the variable data portion.
  151. //
  152. function ALERT_VAR_DATA(const p): Pointer;
  153. {$EXTERNALSYM ALERT_VAR_DATA}
  154. //
  155. //      Names of standard Microsoft-defined alert events.
  156. //
  157. const
  158.   ALERT_PRINT_EVENT    = WideString('PRINTING');
  159.   {$EXTERNALSYM ALERT_PRINT_EVENT}
  160.   ALERT_MESSAGE_EVENT  = WideString('MESSAGE');
  161.   {$EXTERNALSYM ALERT_MESSAGE_EVENT}
  162.   ALERT_ERRORLOG_EVENT = WideString('ERRORLOG');
  163.   {$EXTERNALSYM ALERT_ERRORLOG_EVENT}
  164.   ALERT_ADMIN_EVENT    = WideString('ADMIN');
  165.   {$EXTERNALSYM ALERT_ADMIN_EVENT}
  166.   ALERT_USER_EVENT     = WideString('USER');
  167.   {$EXTERNALSYM ALERT_USER_EVENT}
  168. //
  169. //      Bitmap masks for prjob_status field of PRINTJOB.
  170. //
  171. // 2-7 bits also used in device status
  172.   PRJOB_QSTATUS     = $3; // Bits 0,1
  173.   {$EXTERNALSYM PRJOB_QSTATUS}
  174.   PRJOB_DEVSTATUS   = $1fc; // 2-8 bits
  175.   {$EXTERNALSYM PRJOB_DEVSTATUS}
  176.   PRJOB_COMPLETE    = $4; // Bit 2
  177.   {$EXTERNALSYM PRJOB_COMPLETE}
  178.   PRJOB_INTERV      = $8; // Bit 3
  179.   {$EXTERNALSYM PRJOB_INTERV}
  180.   PRJOB_ERROR       = $10; // Bit 4
  181.   {$EXTERNALSYM PRJOB_ERROR}
  182.   PRJOB_DESTOFFLINE = $20; // Bit 5
  183.   {$EXTERNALSYM PRJOB_DESTOFFLINE}
  184.   PRJOB_DESTPAUSED  = $40; // Bit 6
  185.   {$EXTERNALSYM PRJOB_DESTPAUSED}
  186.   PRJOB_NOTIFY      = $80; // BIT 7
  187.   {$EXTERNALSYM PRJOB_NOTIFY}
  188.   PRJOB_DESTNOPAPER = $100; // BIT 8
  189.   {$EXTERNALSYM PRJOB_DESTNOPAPER}
  190.   PRJOB_DELETED     = $8000; // BIT 15
  191.   {$EXTERNALSYM PRJOB_DELETED}
  192. //
  193. //      Values of PRJOB_QSTATUS bits in prjob_status field of PRINTJOB.
  194. //
  195.   PRJOB_QS_QUEUED   = 0;
  196.   {$EXTERNALSYM PRJOB_QS_QUEUED}
  197.   PRJOB_QS_PAUSED   = 1;
  198.   {$EXTERNALSYM PRJOB_QS_PAUSED}
  199.   PRJOB_QS_SPOOLING = 2;
  200.   {$EXTERNALSYM PRJOB_QS_SPOOLING}
  201.   PRJOB_QS_PRINTING = 3;
  202.   {$EXTERNALSYM PRJOB_QS_PRINTING}
  203. implementation
  204. {$IFDEF DYNAMIC_LINK}
  205. var
  206.   _NetAlertRaise: Pointer;
  207. function NetAlertRaise;
  208. begin
  209.   GetProcedureAddress(_NetAlertRaise, netapi32, 'NetAlertRaise');
  210.   asm
  211.     mov esp, ebp
  212.     pop ebp
  213.     jmp [_NetAlertRaise]
  214.   end;
  215. end;
  216. {$ELSE}
  217. function NetAlertRaise; external netapi32 name 'NetAlertRaise';
  218. {$ENDIF DYNAMIC_LINK}
  219. {$IFDEF DYNAMIC_LINK}
  220. var
  221.   _NetAlertRaiseEx: Pointer;
  222. function NetAlertRaiseEx;
  223. begin
  224.   GetProcedureAddress(_NetAlertRaiseEx, netapi32, 'NetAlertRaiseEx');
  225.   asm
  226.     mov esp, ebp
  227.     pop ebp
  228.     jmp [_NetAlertRaiseEx]
  229.   end;
  230. end;
  231. {$ELSE}
  232. function NetAlertRaiseEx; external netapi32 name 'NetAlertRaiseEx';
  233. {$ENDIF DYNAMIC_LINK}
  234. //#define ALERT_OTHER_INFO(x)    ((LPBYTE)(x) + sizeof(STD_ALERT))
  235. function ALERT_OTHER_INFO(x: Pointer): Pointer;
  236. begin
  237.   Result := Pointer(Integer(x) + SizeOf(STD_ALERT));
  238. end;
  239. //#define ALERT_VAR_DATA(p)      ((LPBYTE)(p) + sizeof(*p))
  240. function ALERT_VAR_DATA(const p): Pointer;
  241. begin
  242.   Result := Pointer(Integer(p) + SizeOf(p)); // todo check!
  243. end;
  244. end.