Leaked source code of windows server 2003
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.
 
 
 
 
 
 

197 lines
5.3 KiB

// scanpnl.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
///////////////////////////////////////////////////////////////////////////////
// application globals
HINSTANCE g_hInst; // current instance of main application
HKEY g_hFakeEventKey; // event trigger key
HKEY g_hFakeEventKeyLocalService; // event trigger key
///////////////////////////////////////////////////////////////////////////////
// main application
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow )
{
if (!hInstance) {
return 0;
}
g_hInst = hInstance;
//
// open registry HKEY (Local System - legacy)
//
DWORD dwDisposition = 0;
if (RegCreateKeyEx(HKEY_USERS,
HKEY_WIASCANR_FAKE_EVENTS,
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&g_hFakeEventKey,
&dwDisposition) == ERROR_SUCCESS) {
}
//
// open registry HKEY (Local Service - .NET server release)
//
dwDisposition = 0;
if (RegCreateKeyEx(HKEY_USERS,
HKEY_WIASCANR_FAKE_EVENTS_LOCAL_SERVICE,
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&g_hFakeEventKeyLocalService,
&dwDisposition) == ERROR_SUCCESS) {
}
//
// display front panel dialog
//
DialogBox(hInstance, (LPCTSTR)IDD_SCANPANEL_DIALOG, NULL, MainWindowProc);
//
// close registry HKEY
//
if (g_hFakeEventKey) {
RegCloseKey(g_hFakeEventKey);
g_hFakeEventKey = NULL;
}
if (g_hFakeEventKeyLocalService) {
RegCloseKey(g_hFakeEventKeyLocalService);
g_hFakeEventKeyLocalService = NULL;
}
return 0;
}
INT_PTR CALLBACK MainWindowProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_SCAN_BUTTON:
FireFakeEvent(hDlg,ID_FAKE_SCANBUTTON);
break;
case IDC_COPY_BUTTON:
FireFakeEvent(hDlg,ID_FAKE_COPYBUTTON);
break;
case IDC_FAX_BUTTON:
FireFakeEvent(hDlg,ID_FAKE_FAXBUTTON);
break;
default:
break;
}
return TRUE;
case WM_CLOSE:
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
default:
break;
}
return FALSE;
}
VOID FireFakeEvent(HWND hDlg, DWORD dwEventCode)
{
BOOL bEventSuccess = FALSE;
if (g_hFakeEventKey) {
//
// write a clearing entry, to reset the previous event code
//
DWORD dwClearEventCode = 0;
if (RegSetValueEx(g_hFakeEventKey,
WIASCANR_DWORD_FAKE_EVENT_CODE,
0,
REG_DWORD,
(BYTE*)&dwClearEventCode,
sizeof(dwClearEventCode)) == ERROR_SUCCESS) {
//
// event is cleared
//
if (RegSetValueEx(g_hFakeEventKey,
WIASCANR_DWORD_FAKE_EVENT_CODE,
0,
REG_DWORD,
(BYTE*)&dwEventCode,
sizeof(dwEventCode)) == ERROR_SUCCESS) {
//
// value was set
//
bEventSuccess = TRUE;
}
}
}
if(g_hFakeEventKeyLocalService) {
//
// write a clearing entry, to reset the previous event code
//
DWORD dwClearEventCode = 0;
if (RegSetValueEx(g_hFakeEventKeyLocalService,
WIASCANR_DWORD_FAKE_EVENT_CODE,
0,
REG_DWORD,
(BYTE*)&dwClearEventCode,
sizeof(dwClearEventCode)) == ERROR_SUCCESS) {
//
// event is cleared
//
if (RegSetValueEx(g_hFakeEventKeyLocalService,
WIASCANR_DWORD_FAKE_EVENT_CODE,
0,
REG_DWORD,
(BYTE*)&dwEventCode,
sizeof(dwEventCode)) == ERROR_SUCCESS) {
//
// value was set
//
bEventSuccess = TRUE;
}
}
}
//
// display an error message box, when the application can not fire the fake event
//
if(!bEventSuccess){
TCHAR szErrorString[MAX_PATH];
memset(szErrorString,0,sizeof(szErrorString));
if(LoadString(g_hInst,IDS_FIRE_FAKE_EVENT_FAILED,szErrorString,(sizeof(szErrorString)/sizeof(szErrorString[0]))) > 0){
//
// display error message box
//
MessageBox(hDlg,szErrorString,NULL,MB_OK|MB_ICONEXCLAMATION);
}
}
}