windows-nt/Source/XPSP1/NT/printscan/fax/faxview/registry.c
2020-09-26 16:20:57 +08:00

518 lines
9.3 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
faxview.c
Abstract:
This file implements a simple TIFF image viewer.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include "faxutil.h"
#include "faxreg.h"
extern WCHAR LastDir[MAX_PATH*2];
extern DWORD CurrZoom;
BOOL
SaveWindowPlacement(
HWND hwnd
)
{
HKEY hKey;
LONG rVal;
WINDOWPLACEMENT wpl;
wpl.length = sizeof(WINDOWPLACEMENT);
if (!GetWindowPlacement( hwnd, &wpl )) {
return FALSE;
}
rVal = RegCreateKey(
HKEY_CURRENT_USER,
REGKEY_FAXVIEW,
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not create/open registry key") ));
return FALSE;
}
rVal = RegSetValueEx(
hKey,
REGVAL_WINDOW_PLACEMENT,
0,
REG_BINARY,
(LPBYTE) &wpl,
sizeof(WINDOWPLACEMENT)
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not set registry value") ));
return FALSE;
}
rVal = RegSetValueEx(
hKey,
REGVAL_LAST_ZOOM,
0,
REG_DWORD,
(LPBYTE) &CurrZoom,
sizeof(CurrZoom)
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not set registry value") ));
return FALSE;
}
rVal = RegSetValueEx(
hKey,
REGVAL_LAST_DIR,
0,
REG_SZ,
(LPBYTE) LastDir,
StringSize( LastDir )
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not set registry value") ));
return FALSE;
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
QueryWindowPlacement(
HWND hwnd
)
{
HKEY hKey;
LONG rVal;
DWORD RegType;
DWORD RegSize;
WINDOWPLACEMENT wpl;
rVal = RegCreateKey(
HKEY_CURRENT_USER,
REGKEY_FAXVIEW,
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not create/open registry key") ));
return FALSE;
}
RegSize = sizeof(WINDOWPLACEMENT);
rVal = RegQueryValueEx(
hKey,
REGVAL_WINDOW_PLACEMENT,
0,
&RegType,
(LPBYTE) &wpl,
&RegSize
);
RegSize = sizeof(CurrZoom);
rVal = RegQueryValueEx(
hKey,
REGVAL_LAST_ZOOM,
0,
&RegType,
(LPBYTE) &CurrZoom,
&RegSize
);
if (rVal != ERROR_SUCCESS) {
CurrZoom = 0;
}
RegSize = sizeof(LastDir);
rVal = RegQueryValueEx(
hKey,
REGVAL_LAST_DIR,
0,
&RegType,
(LPBYTE) LastDir,
&RegSize
);
RegCloseKey( hKey );
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not query registry value, ec=0x%08x"), rVal ));
return FALSE;
}
return SetWindowPlacement( hwnd, &wpl );
}
BOOL
IsItOkToAskForDefault(
VOID
)
{
HKEY hKey;
LONG rVal;
DWORD Ask;
DWORD RegType;
DWORD RegSize;
rVal = RegCreateKey(
HKEY_CURRENT_USER,
REGKEY_FAXVIEW,
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not create/open registry key") ));
return TRUE;
}
RegSize = sizeof(DWORD);
rVal = RegQueryValueEx(
hKey,
REGVAL_DONT_ASK,
0,
&RegType,
(LPBYTE) &Ask,
&RegSize
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not query registry value, ec=0x%08x"), rVal ));
Ask = 1;
}
return Ask;
}
BOOL
SetAskForViewerValue(
DWORD Ask
)
{
HKEY hKey;
LONG rVal;
rVal = RegCreateKey(
HKEY_CURRENT_USER,
REGKEY_FAXVIEW,
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not create/open registry key") ));
return TRUE;
}
rVal = RegSetValueEx(
hKey,
REGVAL_DONT_ASK,
0,
REG_DWORD,
(LPBYTE) &Ask,
sizeof(DWORD)
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("could not set registry value") ));
return FALSE;
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
IsFaxViewerDefaultViewer(
VOID
)
{
WCHAR ValueBuf[64];
LONG Size;
Size = sizeof(ValueBuf);
RegQueryValue(
HKEY_CLASSES_ROOT,
L".tif",
ValueBuf,
&Size
);
if (wcscmp( ValueBuf, L"Fax Document" ) == 0) {
return TRUE;
}
return FALSE;
}
BOOL
CreateFileAssociation(
LPWSTR FileExtension,
LPWSTR FileAssociationName,
LPWSTR FileAssociationDescription,
LPWSTR OpenCommand,
LPWSTR PrintCommand,
LPWSTR PrintToCommand,
LPWSTR FileName,
DWORD IconIndex
)
{
LONG rVal = 0;
HKEY hKey = NULL;
HKEY hKeyOpen = NULL;
HKEY hKeyPrint = NULL;
HKEY hKeyPrintTo = NULL;
HKEY hKeyIcon = NULL;
DWORD Disposition = 0;
WCHAR Buffer[MAX_PATH*2];
rVal = RegCreateKeyEx(
HKEY_CLASSES_ROOT,
FileExtension,
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKey,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKey,
NULL,
0,
REG_SZ,
(LPBYTE) FileAssociationName,
StringSize( FileAssociationName )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
RegCloseKey( hKey );
rVal = RegCreateKeyEx(
HKEY_CLASSES_ROOT,
FileAssociationName,
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKey,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKey,
NULL,
0,
REG_SZ,
(LPBYTE) FileAssociationDescription,
StringSize( FileAssociationDescription )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegCreateKeyEx(
hKey,
L"Shell\\Open\\Command",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyOpen,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyOpen,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) OpenCommand,
StringSize( OpenCommand )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
if (PrintCommand) {
rVal = RegCreateKeyEx(
hKey,
L"Shell\\Print\\Command",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyPrint,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyPrint,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) PrintCommand,
StringSize( PrintCommand )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
}
if (PrintToCommand) {
rVal = RegCreateKeyEx(
hKey,
L"Shell\\Printto\\Command",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyPrintTo,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyPrintTo,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) PrintToCommand,
StringSize( PrintToCommand )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
}
if (FileName) {
rVal = RegCreateKeyEx(
hKey,
L"DefaultIcon",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyIcon,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
wsprintf( Buffer, L"%s,%d", FileName, IconIndex );
rVal = RegSetValueEx(
hKeyIcon,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) Buffer,
StringSize( Buffer )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
}
exit:
RegCloseKey( hKey );
RegCloseKey( hKeyOpen );
RegCloseKey( hKeyPrint );
RegCloseKey( hKeyPrintTo );
RegCloseKey( hKeyIcon );
return rVal == ERROR_SUCCESS;
}
BOOL
MakeFaxViewerDefaultViewer(
VOID
)
{
CreateFileAssociation(
L".tif",
L"Fax Document",
L"Fax Document",
L"%SystemRoot%\\system32\\FaxView.exe \"%1\"",
L"%SystemRoot%\\system32\\FaxView.exe -p \"%1\"",
L"%SystemRoot%\\system32\\FaxView.exe -pt \"%1\" \"%2\" \"%3\" \"%4\"",
L"%SystemRoot%\\system32\\FaxView.exe",
0
);
CreateFileAssociation(
L".tiff",
L"Fax Document",
L"Fax Document",
L"%SystemRoot%\\system32\\FaxView.exe \"%1\"",
L"%SystemRoot%\\system32\\FaxView.exe -p \"%1\"",
L"%SystemRoot%\\system32\\FaxView.exe -pt \"%1\" \"%2\" \"%3\" \"%4\"",
L"%SystemRoot%\\system32\\FaxView.exe",
0
);
return TRUE;
}