// 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); } } }