Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1058 lines
34 KiB

/***************************************************************************
*
* File Name: Alerts.c (for HP ToolBox)
*
* Description: HP DocWise is a printing utility which automatically
* notifies the user of various printing events. The
* "DocWise" Tab Sheet displayed from HP Toolbox allows
* the user to enable and/or disable the printing events
* or "alerts" for which they wish to receive pop-up
* notices.
*
* This module provides the functionality for the DocWise
* Tab Sheet displayed from HP Toolbox.
*
* Functionality for HP DocWise is provided in a different
* module and dll.
*
* Author: sschimpf
*
* History: created initially April 1996 for Jonah, with many mods...
*
*
* Copyright (C) 1993-1996 Hewlett-Packard Company.
* All rights reserved.
*
* 11311 Chinden Blvd.
* Boise, Idaho 83714
*
* This is a part of the HP JetAdmin Printer Utility
*
* This source code is only intended as a supplement for support and
* localization of HP JetAdmin by 3rd party Operating System vendors.
* Modification of source code cannot be made without the express written
* consent of Hewlett-Packard.
*
***************************************************************************/
#include <pch_c.h>
#include <macros.h>
#include <windowsx.h>
#include <hptabs.h>
#include "..\help\hpprecl.hh"
#include <nolocal.h>
#include "resource.h"
#include "hpeclui.h"
#include "alerts.h"
#ifdef WIN32
#include <commctrl.h>
#else
#include <stdlib.h>
#include <string.h>
#endif
#define MAX_EVENTS 4
//--------------------------------------------------------------------
// typedefs
//--------------------------------------------------------------------
typedef struct
{
UINT uStringID;
UINT uStringDescriptID;
char szStringDescript[512];
char szKeyName[64];
DWORD dwEnabled;
} ALERTS, *LPALERTS;
//--------------------------------------------------------------------
// The printing events data struct...
//--------------------------------------------------------------------
ALERTS Alerts[MAX_EVENTS] =
{
{IDS_ALERT_SUBMIT_ERR, IDS_ALERT_SUBMIT_ERR_DESCRIPT, "", "JobSubmitErr", 1},
{IDS_ALERT_SUBMIT_OK, IDS_ALERT_SUBMIT_OK_DESCRIPT, "", "JobSubmitOK", 1},
{IDS_ALERT_PRINT_ERR, IDS_ALERT_PRINT_ERR_DESCRIPT, "", "JobPrintErr", 1},
{IDS_ALERT_PRINT_OK, IDS_ALERT_PRINT_OK_DESCRIPT, "", "JobPrintOK", 1},
};
extern HINSTANCE hInstance;
//--------------------------------------------------------------------
// globals
//--------------------------------------------------------------------
#ifdef WIN32
static HIMAGELIST hEventImage = NULL;
#endif
extern HFONT hFontDialog;
static HWND hEventList = NULL;
static HPERIPHERAL hThisPeripheral = NULL;
static TCHAR szGenericEventDescript[512];
static long keywordIDListAlerts[] =
{IDC_TIP_GROUP, IDH_RC_tips,
IDC_TIP_TEXT, IDH_RC_tips,
IDC_TIP_ICON, IDH_RC_tips,
IDC_DOC_EVENTS_GROUP, IDH_RC_alerts_doc_events,
IDC_DOC_EVENTS_LISTVIEW, IDH_RC_alerts_list ,
IDC_DOC_EVENTS_DESC, IDH_RC_alerts_descript ,
IDC_ENABLE, IDH_RC_alerts_enable ,
IDC_SELECT_ALL, IDH_RC_alerts_select_all,
IDC_DISABLE, IDH_RC_alerts_disable ,
0, 0};
//--------------------------------------------------------------------
// Function: AlertsSheetProc
//
// Description: Function associated with the DocWise Tab Sheet
// displayed from the HP Toolbox
//
// Input: hwnd -
// msg -
// wParam -
// lParam -
//
// Modifies:
//
// Returns:
//--------------------------------------------------------------------
DLL_EXPORT(BOOL) APIENTRY AlertsSheetProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
#ifdef WIN32
int i;
#else
#endif
switch (msg)
{
case WM_HELP:
OnF1HelpAlerts(wParam, lParam);
break;
case WM_CONTEXTMENU:
OnContextHelpAlerts(wParam, lParam);
break;
case WM_INITDIALOG:
return (BOOL)HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, Cls_OnAlertsInitDialog);
break;
case WM_DESTROY:
//--------------------------------------------------------
// Time to go... Free up as needed...
//--------------------------------------------------------
#ifdef WIN32
if (hEventImage)
ImageList_Destroy(hEventImage);
#endif
break;
case WM_COMMAND:
HANDLE_WM_COMMAND(hwnd, wParam, lParam, Cls_OnAlertsCommand);
break;
#ifdef WIN32
case WM_NOTIFY:
switch (((NMHDR FAR *)lParam)->code)
{
case PSN_HELP:
WinHelp(hwnd, ECL_HELP_FILE, HELP_CONTEXT, IDH_PP_alerts);
break;
case PSN_SETACTIVE:
SetFocus(hEventList);
SetWindowLong(hwnd, DWL_MSGRESULT, FALSE);
break;
case PSN_KILLACTIVE:
SetWindowLong(hwnd, DWL_MSGRESULT, FALSE);
break;
case PSN_APPLY:
//----------------------------------------------------------------
// Get the Alerts Key values
//----------------------------------------------------------------
GetSetPrintEventStates (FALSE);
SetWindowLong(hwnd, DWL_MSGRESULT, PSNRET_NOERROR);
break;
case NM_CLICK:
case LVN_ITEMCHANGED:
if ( ((NMHDR FAR *)lParam)->hwndFrom == hEventList)
{
//--------------------------------------------
// Update the doc events description
//--------------------------------------------
FORWARD_WM_COMMAND(hwnd, IDC_DOC_EVENTS_LISTVIEW, GetDlgItem(hwnd, IDC_DOC_EVENTS_LISTVIEW), NM_CLICK, SendMessage);
}
break;
case NM_DBLCLK:
//------------------------------------------------
// Determine which event was selected and forward
// on the call...
//------------------------------------------------
i = ListView_GetNextItem(hEventList, -1, LVNI_ALL | LVNI_SELECTED);
if (Alerts[i].dwEnabled)
{
FORWARD_WM_COMMAND(hwnd, IDC_DISABLE, GetDlgItem(hwnd, IDC_DISABLE), NM_DBLCLK, SendMessage);
}
else
{
FORWARD_WM_COMMAND(hwnd, IDC_ENABLE, GetDlgItem(hwnd, IDC_ENABLE), NM_DBLCLK, SendMessage);
}
//------------------------------------------------
// Update the doc events description
//------------------------------------------------
FORWARD_WM_COMMAND(hwnd, IDC_DOC_EVENTS_LISTVIEW, GetDlgItem(hwnd, IDC_DOC_EVENTS_LISTVIEW), NM_CLICK, SendMessage);
break;
case PSN_RESET:
break;
default:
break;
}
break;
#else
case WM_CHARTOITEM:
return (BOOL)HANDLE_WM_CHARTOITEM(hwnd, wParam, lParam, Cls_OnAlertsCharToItem);
case WM_VKEYTOITEM:
return -1;
case WM_MEASUREITEM:
HANDLE_WM_MEASUREITEM(hwnd, wParam, lParam, Cls_OnAlertsMeasureItem);
break;
case WM_DRAWITEM:
HANDLE_WM_DRAWITEM(hwnd, wParam, lParam, Cls_OnAlertsDrawItem);
break;
case TSN_CANCEL:
case TSN_ACTIVE:
case TSN_INACTIVE:
break;
case TSN_OK:
case TSN_APPLY_NOW:
GetSetPrintEventStates (FALSE);
break;
case TSN_HELP:
WinHelp(hwnd, ECL_HELP_FILE, HELP_CONTEXT, IDH_PP_alerts);
break;
#endif
default:
return FALSE;
}
return TRUE;
}
//--------------------------------------------------------------------
// Function: Cls_OnAlertsInitDialog
//
// Description: This functions sets up the Printing Events list. It
// list all printing events, determines if they are enabled
// or disabled, selects the 1st list as current and displays
// a brief description of the hi-lighted event.
//
// Note that for Win95 and WinNT, we use the built in
// listview; for Win3.1, we use HP's simulated treeview.
//
// Input: hwnd -
// hwndFocus -
// lParam -
//
// Modifies:
//
// Returns:
//--------------------------------------------------------------------
BOOL Cls_OnAlertsInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
int i;
HCURSOR hOldCursor;
TCHAR szBuffer[512];
#ifdef WIN32
HBITMAP hbm;
LV_ITEM lvi;
#else
HWND hwndChild;
#endif
LPPROPSHEETPAGE psp = (LPPROPSHEETPAGE)lParam;
#ifndef WIN32
hwndChild = GetFirstChild(hwnd);
while (hwndChild)
{
SetWindowFont(hwndChild, hFontDialog, FALSE);
hwndChild = GetNextSibling(hwndChild);
}
#endif
//----------------------------------------------------------------
// Save the cursor and display the hourglass
//----------------------------------------------------------------
hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
//----------------------------------------------------------------
// Load up the "Tips"
//----------------------------------------------------------------
i = LoadString(hInstance, IDS_ALERTS_DESC1, szBuffer, SIZEOF_IN_CHAR(szBuffer));
LoadString(hInstance, IDS_ALERTS_DESC2, szBuffer+i, SIZEOF_IN_CHAR(szBuffer)-i);
SetDlgItemText(hwnd, IDC_TIP_TEXT, szBuffer);
//----------------------------------------------------------------
// Store the generic event description... This is the event
// description displayed if all events are selected.
//----------------------------------------------------------------
LoadString (hInstance, IDS_ALERT_GENERIC_EVENT_DESCRIPT,
szGenericEventDescript, SIZEOF_IN_CHAR(szGenericEventDescript));
//----------------------------------------------------------------
// Get the printer name...
//----------------------------------------------------------------
hThisPeripheral = (HPERIPHERAL)psp->lParam;
//----------------------------------------------------------------
// Store the events descript in the alerts data struct...
//----------------------------------------------------------------
for ( i = 0; i < MAX_EVENTS; i++ )
{
LoadString(hInstance, Alerts[i].uStringDescriptID, (LPTSTR)Alerts[i].szStringDescript,
SIZEOF_IN_CHAR(Alerts[i].szStringDescript));
}
//----------------------------------------------------------------
// Update the event description - 0th item starts out as selected.
//----------------------------------------------------------------
SetDlgItemText(hwnd, IDC_DOC_EVENTS_DESC, (LPTSTR)Alerts[0].szStringDescript);
//----------------------------------------------------------------
// Determine which events are disabled or enabled by looking for
// entries the registry (Win95, NT) or win.ini (win3.1). If no
// entries are found, the default state is enabled...
//----------------------------------------------------------------
GetSetPrintEventStates (TRUE);
//----------------------------------------------------------------
// Get the alerts list handle...
//----------------------------------------------------------------
hEventList = GetDlgItem(hwnd, IDC_DOC_EVENTS_LISTVIEW);
#ifdef WIN32
//----------------------------------------------------------------
// For Win95, we're using the built in listview control...
// Create the image list...
//----------------------------------------------------------------
hEventImage = ImageList_Create(16, 16, TRUE, 2, 0);
if (hEventImage)
{
//------------------------------------------------------------
// Add Each bitmap to the ImageList.
//
// ImageList_AddMasked will add the bitmap, and treat every
// pixel that is (in this example) blue as a "transparent" pixel,
// since we specified TRUE for fMask in the above call to
// ImageList_Create.
//------------------------------------------------------------
if ( hbm = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_POPUPLIST)) )
{
ImageList_AddMasked(hEventImage, hbm, RGB(255,255,255));
DeleteObject(hbm);
ListView_SetImageList(hEventList, hEventImage, LVSIL_SMALL);
}
}
//----------------------------------------------------------------
// Now fill up the list view list.
//----------------------------------------------------------------
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvi.state = 0;
lvi.stateMask = 0;
for ( i = 0; i < MAX_EVENTS; i++ )
{
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.iImage = Alerts[i].dwEnabled ? 0 : 1;
//------------------------------------------------------------
// If this is the 0th item, start out as selected.
//------------------------------------------------------------
lvi.state = (i == 0) ? LVIS_SELECTED : 0;
LoadString(hInstance, Alerts[i].uStringID, szBuffer, SIZEOF_IN_CHAR(szBuffer));
lvi.pszText = szBuffer;
lvi.cchTextMax = _tcslen(szBuffer) + 1;
lvi.lParam = i;
ListView_InsertItem(hEventList, &lvi);
}
#else
//----------------------------------------------------------------
// For Win3.1, we're just using the listbox control and manually
// drawing the bitmap image (enabled or disabled).
//----------------------------------------------------------------
for (i = 0; i < MAX_EVENTS; i++)
{
ListBox_AddItemData(hEventList, i);
}
ListBox_SelItemRange(hEventList, TRUE, 0, 0);
#endif
//----------------------------------------------------------------
// Reset the Cursor
//----------------------------------------------------------------
SetCursor(hOldCursor);
return TRUE;
}
//--------------------------------------------------------------------
// Function: Cls_OnAlertsCommand
//
// Description:
//
// Input: hwnd -
// id -
// hwndCtl -
// codeNotify -
//
// Modifies:
//
// Returns:
//--------------------------------------------------------------------
void Cls_OnAlertsCommand(HWND hwnd, int iMsgId, HWND hwndCtl, UINT codeNotify)
{
int i;
#ifdef WIN32
LV_ITEM lvi;
#else
POINT point;
RECT rect;
int iIndex;
DWORD dwSelected;
BOOL fFirst = TRUE;
#endif
switch (iMsgId)
{
#ifdef WIN32
//----------------------------------------------------
// "Enable", and "Disable" Button
//----------------------------------------------------
case IDC_ENABLE:
case IDC_DISABLE:
//------------------------------------------------
//
//------------------------------------------------
lvi.iItem = ListView_GetNextItem(hEventList, -1, LVNI_ALL | LVNI_SELECTED);
while (lvi.iItem >= 0)
{
lvi.mask = LVIF_IMAGE;
lvi.iSubItem = 0;
lvi.state = 0;
lvi.stateMask = 0;
lvi.pszText = NULL;
lvi.cchTextMax = 0;
lvi.lParam = lvi.iItem;
//------------------------------------------------
// Enable or disable?
//------------------------------------------------
if (iMsgId == IDC_ENABLE)
{
lvi.iImage = 0;
Alerts[lvi.iItem].dwEnabled = 1;
}
else
{
lvi.iImage = 1;
Alerts[lvi.iItem].dwEnabled = 0;
}
ListView_SetItem (hEventList, &lvi);
ListView_RedrawItems (hEventList, lvi.iItem, lvi.iItem);
//--------------------------------------------
// Get the next one (if there is one)...
//--------------------------------------------
lvi.iItem = ListView_GetNextItem(hEventList, lvi.iItem, LVNI_ALL | LVNI_SELECTED);
}
break;
//----------------------------------------------------
// "Select all" Button
//----------------------------------------------------
case IDC_SELECT_ALL:
lvi.mask = LVIF_STATE;
lvi.iSubItem = 0;
lvi.state = LVIS_SELECTED;
lvi.stateMask = LVIS_SELECTED;
lvi.pszText = NULL;
lvi.cchTextMax = 0;
lvi.lParam = lvi.iItem;
for (i=0; i < MAX_EVENTS; i++)
{
lvi.iItem = i;
ListView_SetItem (hEventList, &lvi);
}
ListView_RedrawItems (hEventList, 0, MAX_EVENTS-1);
//------------------------------------------------
// Display the generic event descript...
//------------------------------------------------
SetDlgItemText(hwnd, IDC_DOC_EVENTS_DESC, (LPTSTR)szGenericEventDescript);
break;
//----------------------------------------------------
// "Selected an event - update the description...
//----------------------------------------------------
case IDC_DOC_EVENTS_LISTVIEW:
//------------------------------------------------
// Get the first selected item...
//------------------------------------------------
i = ListView_GetNextItem(hEventList, -1, LVNI_ALL | LVNI_SELECTED);
if (i >= 0)
{
SetDlgItemText(hwnd, IDC_DOC_EVENTS_DESC, (LPTSTR)Alerts[i].szStringDescript);
//--------------------------------------------
// If there are any others, display the generic
// event message...
//--------------------------------------------
i = ListView_GetNextItem(hEventList, i, LVNI_ALL | LVNI_SELECTED);
if (i >= 0)
{
SetDlgItemText(hwnd, IDC_DOC_EVENTS_DESC, (LPTSTR)szGenericEventDescript);
}
}
break;
#else
//----------------------------------------------------
// "Enable", and "Disable" Button
//----------------------------------------------------
case IDC_ENABLE:
case IDC_DISABLE:
for (i=0; i < MAX_EVENTS; i++)
{
if ((dwSelected = ListBox_GetSel(hEventList, i)) == LB_ERR)
break;
if (dwSelected)
{
Alerts[i].dwEnabled = (iMsgId == IDC_ENABLE) ? 1 : 0;
ListBox_GetItemRect(hEventList, i, &rect);
rect.right = rect.left + LISTBOX_ITEM_HEIGHT;
InflateRect(&rect, 1, 1);
InvalidateRect(hEventList, &rect, FALSE);
}
}
break;
//----------------------------------------------------
// "Select all" Button
//----------------------------------------------------
case IDC_SELECT_ALL:
ListBox_SelItemRange(hEventList, TRUE, 0, MAX_EVENTS-1);
SetDlgItemText(hwnd, IDC_DOC_EVENTS_DESC, szGenericEventDescript);
break;
//----------------------------------------------------
// Selected an event - update the description...
//----------------------------------------------------
case IDC_DOC_EVENTS_LISTVIEW:
//--------------------------------------------------------
// If the user didn't double click or change selections,
// no need to do anything
//--------------------------------------------------------
if ((codeNotify != LBN_SELCHANGE) AND (codeNotify != LBN_DBLCLK))
break;
if ((iIndex = ListBox_GetCurSel(hEventList)) == LB_ERR)
break;
GetCursorPos(&point);
ScreenToClient(hwndCtl, &point);
ListBox_GetItemRect(hwndCtl, iIndex, &rect);
rect.right = rect.left + LISTBOX_ITEM_HEIGHT;
if ((codeNotify == LBN_SELCHANGE) && PtInRect(&rect, point) ||
(codeNotify == LBN_DBLCLK) && !PtInRect(&rect, point) )
{
Alerts[iIndex].dwEnabled = !Alerts[iIndex].dwEnabled;
InflateRect(&rect, 1, 1);
InvalidateRect(hwndCtl, &rect, FALSE);
}
//--------------------------------------------------------
// Update the event description text...
//--------------------------------------------------------
for (i=0; i < MAX_EVENTS; i++)
{
if ((dwSelected = ListBox_GetSel(hEventList, i)) == LB_ERR)
break;
if (dwSelected)
{
if (fFirst)
{
SetDlgItemText(hwnd, IDC_DOC_EVENTS_DESC, Alerts[i].szStringDescript);
fFirst = FALSE;
}
else
{
SetDlgItemText(hwnd, IDC_DOC_EVENTS_DESC, szGenericEventDescript);
break;
}
}
}
break;
#endif
//------------------------------------------------------------
// Default
//------------------------------------------------------------
default:
break;
}
}
//--------------------------------------------------------------------
//
//--------------------------------------------------------------------
void Cls_OnAlertsDrawItem(HWND hwnd, const DRAWITEMSTRUCT * lpDrawItem)
{
HDC hdc = lpDrawItem->hDC;
HDC hdcMem;
HBRUSH hBrush;
TCHAR szBuffer[512];
HBITMAP hbm;
RECT rRect = lpDrawItem->rcItem,
rIcon = lpDrawItem->rcItem;
int iBitmapIndx;
int itemHeight = rRect.bottom - rRect.top;
//----------------------------------------------------------------
// Set the focus
//----------------------------------------------------------------
if (lpDrawItem->itemAction & (ODA_DRAWENTIRE | ODA_FOCUS))
{
if (hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW)))
{
FrameRect(hdc, &rRect, hBrush);
DeleteObject(hBrush);
}
if (lpDrawItem->itemState & ODS_FOCUS)
{
DrawFocusRect(hdc, &rRect);
}
}
InflateRect(&rRect, -1, -1);
//----------------------------------------------------------------
// Draw the bitmap (enabled or disabled)
//----------------------------------------------------------------
if (lpDrawItem->itemAction & ODA_DRAWENTIRE)
{
rIcon.right = rIcon.left + itemHeight;
if (lpDrawItem->CtlID == IDC_DOC_EVENTS_LISTVIEW)
{
//--------------------------------------------------------
// Draw the bitmap (enabled or disabled)...
//--------------------------------------------------------
iBitmapIndx = Alerts[(int)lpDrawItem->itemData].dwEnabled ? 0 : 1;
hbm = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_POPUPLIST));
hdcMem = CreateCompatibleDC (hdc);
SelectObject (hdcMem, hbm);
BitBlt (hdc, rIcon.left, rIcon.top, 16, 16,
hdcMem, (iBitmapIndx * 16), 0, SRCCOPY);
DeleteDC (hdcMem);
DeleteObject (hbm);
}
}
rRect.left = itemHeight;
if (lpDrawItem->itemAction & (ODA_DRAWENTIRE | ODA_SELECT | ODA_FOCUS))
{
if (hBrush = CreateSolidBrush(GetSysColor((lpDrawItem->itemState & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_WINDOW)))
{
FillRect(hdc, &rRect, hBrush);
DeleteObject(hBrush);
}
if (lpDrawItem->CtlID == IDC_DOC_EVENTS_LISTVIEW )
{
LoadString(hInstance, Alerts[(int)lpDrawItem->itemData].uStringID, szBuffer, SIZEOF_IN_CHAR(szBuffer));
rRect.left += 2;
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, GetSysColor((lpDrawItem->itemState & ODS_SELECTED) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT));
DrawText(hdc, szBuffer, -1, &rRect, DT_SINGLELINE | DT_VCENTER);
}
}
}
//--------------------------------------------------------------------
//
//--------------------------------------------------------------------
void Cls_OnAlertsMeasureItem(HWND hwnd, MEASUREITEMSTRUCT *lpMeasureItem)
{
switch (lpMeasureItem->CtlID)
{
case IDC_MEDIA_ENABLED:
lpMeasureItem->itemHeight = LISTBOX_ITEM_HEIGHT;
break;
}
}
//--------------------------------------------------------------------
//
//--------------------------------------------------------------------
int Cls_OnAlertsCharToItem(HWND hwnd, UINT ch, HWND hwndCtl, int iCaret)
{
if (ch == ' ')
{
int iIndex;
if ((iIndex = ListBox_GetCurSel(hwndCtl)) != LB_ERR)
{
int i = (int)ListBox_GetItemData(hwndCtl, iIndex);
RECT rect;
media_type[i].bEnabled = !media_type[i].bEnabled;
ListBox_GetItemRect(hwndCtl, iIndex, &rect);
rect.right = rect.left + LISTBOX_ITEM_HEIGHT;
InflateRect(&rect, 1, 1);
InvalidateRect(hwndCtl, &rect, FALSE);
}
}
return -1;
}
//--------------------------------------------------------------------
// Function: GetSetPrintEventsState
//
// Description: This function searches the registry (Win95 or NT) or
// win.ini (win3.1) for entries to query or set
// the printing event states (enabled or disabled).
//
// The Alerts[i].szKeyName and Alerts[i].dwEnabled fields
// are used for storing and setting values. Note that
// these are globals.
//
// During a query, if no entries are found, new entries
// are created with the default state of enabled.
//
// For Win95 and NT:
// This function searches the registry for the relevant
// key; opens/creates the key and attempts to get/set
// the printing event key values:
// Here's the format:
//
// HKEY_LOCAL_MACHINE
// Software
// Hewlett-Packard
// HP DocWise
// Alerts
// "PrinterName" JobPrintErr 1
// JobPrintOK 1
// JobSubmitErr 1
// JobSubmitOK 1
//
// For Win3.1
// This function searches hptbox.ini for the relevant
// entries; reads/creates the entries and attempts to get/set
// the printing event entry values:
// Here's the format:
//
// [DocWise,"PrinterName"]
// JobPrintErr=1
// JobPrintOK=1
// JobSubmitErr=1
// JobSubmitOK=1
//
//
//
// Input: fQuery TRUE - query the printing event states
// FALSE - set the printing event states
//
// Returns: void
//--------------------------------------------------------------------
void GetSetPrintEventStates (BOOL fQuery)
{
int i;
TCHAR szPrinterName[64];
#ifdef WIN32
TCHAR szClass[32];
HKEY hKeyRoot = 0,
hKeyThisPrinter = 0;
char szRoot[] = "SOFTWARE\\Hewlett-Packard\\HP DocWise\\Alerts";
DWORD dwDisposition;
DWORD dwValLength;
DWORD dwType;
#else
TCHAR szIniFile[] = "hptbox.ini";
TCHAR szDocWise[] = "HP DocWise, ";
TCHAR szSection[128];
TCHAR szEnabled[8];
#endif
//----------------------------------------------------------------
// Get the device/printer name (ie. MARKETING'S_5SI)
//----------------------------------------------------------------
DBGetNameEx (hThisPeripheral, NAME_IPX, szPrinterName);
#ifdef WIN32
//----------------------------------------------------------------
// Search the registery for the Alerts key up to "Alerts"
// if not found, create it...
//----------------------------------------------------------------
if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, (LPTSTR)szRoot, 0, szClass, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &hKeyRoot, &dwDisposition) != ERROR_SUCCESS)
{
goto EXIT;
}
if (hKeyRoot)
{
//------------------------------------------------------------
// Now attempt to open on the printer name, if it's not there,
// create it.
//------------------------------------------------------------
if (RegCreateKeyEx (hKeyRoot, szPrinterName, 0, szClass, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &hKeyThisPrinter, &dwDisposition) != ERROR_SUCCESS)
{
goto EXIT;
}
}
if (hKeyThisPrinter)
{
//------------------------------------------------------------
// Query/Set the individual alert values; if the're not
// found just use the defaults...
//------------------------------------------------------------
for (i=0; i<MAX_EVENTS; i++)
{
dwValLength = sizeof(Alerts[i].dwEnabled);
dwType = REG_DWORD;
if (fQuery)
{
RegQueryValueEx(hKeyThisPrinter, (LPTSTR)Alerts[i].szKeyName, NULL, &dwType, (LPBYTE)(&(Alerts[i].dwEnabled)), &dwValLength);
}
else
{
RegSetValueEx(hKeyThisPrinter, (LPTSTR)Alerts[i].szKeyName, 0, dwType, (LPBYTE)(&(Alerts[i].dwEnabled)), dwValLength);
}
}
}
EXIT:
if (hKeyRoot)
RegCloseKey(hKeyRoot);
if (hKeyThisPrinter)
RegCloseKey(hKeyThisPrinter);
#else
//-----------------------------------------------------------------
// For Win3.1, use the hptbox.ini file.
//-----------------------------------------------------------------
lstrcpy (szSection, szDocWise);
lstrcat (szSection, szPrinterName);
for (i=0; i<MAX_EVENTS; i++)
{
if (fQuery)
{
//-----------------------------------------------------------
// Query for the event states, if there's nothing there
// the default will be enabled (1)
//-----------------------------------------------------------
Alerts[i].dwEnabled = GetPrivateProfileInt (szSection, Alerts[i].szKeyName, 1, szIniFile);
}
else
{
itoa((int)Alerts[i].dwEnabled, szEnabled, 10);
WritePrivateProfileString (szSection, Alerts[i].szKeyName, szEnabled, szIniFile);
}
}
#endif
}
//--------------------------------------------------------------------
// Function: OnContextHelpAlerts
//
// Description: This provides the "right-click" help for Win95 and
// WinNT
//
// Input: wParam -
// lParam -
//
// Modifies:
//
// Returns:
//--------------------------------------------------------------------
LRESULT OnContextHelpAlerts(WPARAM wParam, LPARAM lParam)
{
#ifdef WIN32
WinHelp((HWND)wParam, ECL_HELP_FILE, HELP_CONTEXTMENU,
(DWORD)(LPSTR)keywordIDListAlerts);
#endif
return(1);
}
//--------------------------------------------------------------------
// Function: OnF1HelpAlerts
//
// Description:
//
// Input: wParam -
// lParam -
//
// Modifies:
//
// Returns:
//--------------------------------------------------------------------
LRESULT OnF1HelpAlerts(WPARAM wParam, LPARAM lParam)
{
#ifdef WIN32
WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle, ECL_HELP_FILE, HELP_WM_HELP,
(DWORD)(LPSTR)keywordIDListAlerts);
#endif
return(1);
}