home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
OLS
/
Winnt
/
HCAPS32
/
HCAPS32.LZH
/
HCAPS32.C
next >
Wrap
C/C++ Source or Header
|
1995-07-06
|
10KB
|
322 lines
#include <windows.h>
#include <ime.h>
#include <winnls.h>
#include <winnls32.h>
#include <stdlib.h>
#include <string.h>
#include "hcaps32.h"
#include "hcaps32s.h"
static HWND hwndClient;
static HINSTANCE hInstance;
static UINT afConfig;
static UINT timeDelay;
static UINT timeInterval;
static char szTitle[] = "秀Caps32";
static char szAppName[] = "HideCaps32";
static char szConfigKey[] = "Config";
static char szDelayKey[] = "RepeatDelay";
static char szIntervalKey[] = "RepeatInterval";
static void (*pfnSetHook)( HWND );
static void (*pfnReleaseHook)( void );
static void (*pfnSetConfig)( UINT, UINT, UINT );
static HANDLE hLib;
static HHOOK hhook;
static HKEY hkey;
static void OpenReg( void ) {
static char szRoot[] = "Software\\Hidemaruo\\HideCaps";
DWORD dwRes;
if( RegCreateKeyEx( HKEY_CURRENT_USER, szRoot, 0, 0
, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL
, &hkey, &dwRes ) != ERROR_SUCCESS ) {
hkey = NULL;
}
}
static void CloseReg( void ) {
RegCloseKey( hkey );
}
static UINT GetInt( char* pszKey, UINT nDefault ) {
int nGetData;
DWORD dwType;
DWORD cchBuffer = 0;
cchBuffer = sizeof(nGetData);
if( RegQueryValueEx( hkey, pszKey, 0, &dwType, (BYTE*)&nGetData, &cchBuffer ) != ERROR_SUCCESS
|| dwType != REG_DWORD ) {
return nDefault;
}
return (UINT)nGetData;
}
static void WriteInt( char* pszKey, DWORD dwData ) {
RegSetValueEx( hkey, pszKey, 0, REG_DWORD, (BYTE*)&dwData, sizeof(DWORD) );
}
void EnableButtons( HWND hwnd, BOOL fEnable ) {
if( !fEnable ) {
CheckDlgButton( hwnd, IDB_HANKAKU_HOOK, FALSE );
CheckDlgButton( hwnd, IDB_HIRAGANA_HOOK, FALSE );
CheckDlgButton( hwnd, IDB_KANA_SWITCH, FALSE );
CheckDlgButton( hwnd, IDB_HENKAN_HOOK, FALSE );
CheckDlgButton( hwnd, IDB_MUHENKAN_HOOK, FALSE );
CheckDlgButton( hwnd, IDB_RIGHTCTRL_HOOK, FALSE );
}
EnableWindow( GetDlgItem( hwnd, IDB_HANKAKU_HOOK ), fEnable );
EnableWindow( GetDlgItem( hwnd, IDB_HIRAGANA_HOOK ), fEnable );
EnableWindow( GetDlgItem( hwnd, IDB_KANA_SWITCH ), fEnable );
EnableWindow( GetDlgItem( hwnd, IDB_HENKAN_HOOK ), fEnable );
EnableWindow( GetDlgItem( hwnd, IDB_MUHENKAN_HOOK ), fEnable );
EnableWindow( GetDlgItem( hwnd, IDB_RIGHTCTRL_HOOK ), fEnable );
}
int CALLBACK SetupDlgProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) {
switch( message ) {
case WM_INITDIALOG:
{
RECT rc;
GetWindowRect( hwnd, &rc );
SetWindowPos( hwnd, NULL
, (GetSystemMetrics( SM_CXSCREEN ) - (rc.right - rc.left)) / 2
, (GetSystemMetrics( SM_CYSCREEN ) - (rc.bottom - rc.top)) / 2
, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE );
}
OpenReg();
afConfig = GetInt( szConfigKey, 1 );
timeDelay = GetInt( szDelayKey, 250 );
timeInterval = GetInt( szIntervalKey, 50 );
CloseReg();
if( afConfig & FLAG_JOURNAL_HOOK ) {
CheckDlgButton( hwnd, IDB_JOURNAL_HOOK, TRUE );
if( afConfig & FLAG_HANKAKU_HOOK ) {
CheckDlgButton( hwnd, IDB_HANKAKU_HOOK, TRUE );
}
// if( afConfig & FLAG_OYAYUBI_EISUU ) {
// CheckDlgButton( hwnd, IDB_OYAYUBI_EISUU, TRUE );
// }
if( afConfig & FLAG_HIRAGANA_HOOK ) {
CheckDlgButton( hwnd, IDB_HIRAGANA_HOOK, TRUE );
}
if( afConfig & FLAG_KANA_SWITCH ) {
CheckDlgButton( hwnd, IDB_KANA_SWITCH, TRUE );
}
if( afConfig & FLAG_HENKAN_HOOK ) {
CheckDlgButton( hwnd, IDB_HENKAN_HOOK, TRUE );
}
if( afConfig & FLAG_MUHENKAN_HOOK ) {
CheckDlgButton( hwnd, IDB_MUHENKAN_HOOK, TRUE );
}
if( afConfig & FLAG_RIGHTCTRL_HOOK ) {
CheckDlgButton( hwnd, IDB_RIGHTCTRL_HOOK, TRUE );
}
} else {
CheckDlgButton( hwnd, IDB_GETMSG_HOOK, TRUE );
EnableButtons( hwnd, FALSE );
}
if( afConfig & FLAG_EISUU_HOOK ) {
CheckDlgButton( hwnd, IDB_EISUU_HOOK, TRUE );
}
if( afConfig & FLAG_EISUU_KANAOFF ) {
CheckDlgButton( hwnd, IDB_EISUU_KANAOFF, TRUE );
}
// if( afConfig & FLAG_RIGHTALT_HOOK ) {
// CheckDlgButton( hwnd, IDB_RIGHTALT_HOOK, TRUE );
// }
// if( afConfig & FLAG_SHOW_LOCKSTATE ) {
// CheckDlgButton( hwnd, IDB_SHOW_LOCKSTATE, TRUE );
// }
if( afConfig & FLAG_REPEAT_HOOK ) {
CheckDlgButton( hwnd, IDB_REPEAT_HOOK, TRUE );
} else {
EnableWindow( GetDlgItem( hwnd, IDE_REPEAT_DELAY ), FALSE );
EnableWindow( GetDlgItem( hwnd, IDE_REPEAT_INTERVAL ), FALSE );
}
SetDlgItemInt( hwnd, IDE_REPEAT_DELAY, timeDelay, FALSE );
SetDlgItemInt( hwnd, IDE_REPEAT_INTERVAL, timeInterval, FALSE );
return TRUE;
case WM_COMMAND:
if( LOWORD(wParam) == IDOK ) {
BOOL f;
char sz[33];
afConfig = 0;
if( IsDlgButtonChecked( hwnd, IDB_JOURNAL_HOOK ) ) {
afConfig |= FLAG_JOURNAL_HOOK;
}
if( IsDlgButtonChecked( hwnd, IDB_EISUU_HOOK ) ) {
afConfig |= FLAG_EISUU_HOOK;
}
if( IsDlgButtonChecked( hwnd, IDB_EISUU_KANAOFF ) ) {
afConfig |= FLAG_EISUU_KANAOFF;
}
// if( IsDlgButtonChecked( hwnd, IDB_OYAYUBI_EISUU ) ) {
// afConfig |= FLAG_OYAYUBI_EISUU;
// }
if( IsDlgButtonChecked( hwnd, IDB_HANKAKU_HOOK ) ) {
afConfig |= FLAG_HANKAKU_HOOK;
}
if( IsDlgButtonChecked( hwnd, IDB_HIRAGANA_HOOK ) ) {
afConfig |= FLAG_HIRAGANA_HOOK;
}
if( IsDlgButtonChecked( hwnd, IDB_KANA_SWITCH ) ) {
afConfig |= FLAG_KANA_SWITCH;
}
if( IsDlgButtonChecked( hwnd, IDB_HENKAN_HOOK ) ) {
afConfig |= FLAG_HENKAN_HOOK;
}
if( IsDlgButtonChecked( hwnd, IDB_REPEAT_HOOK ) ) {
afConfig |= FLAG_REPEAT_HOOK;
}
if( IsDlgButtonChecked( hwnd, IDB_MUHENKAN_HOOK ) ) {
afConfig |= FLAG_MUHENKAN_HOOK;
}
if( IsDlgButtonChecked( hwnd, IDB_RIGHTCTRL_HOOK ) ) {
afConfig |= FLAG_RIGHTCTRL_HOOK;
}
// if( IsDlgButtonChecked( hwnd, IDB_RIGHTALT_HOOK ) ) {
// afConfig |= FLAG_RIGHTALT_HOOK;
// }
// if( IsDlgButtonChecked( hwnd, IDB_SHOW_LOCKSTATE ) ) {
// afConfig |= FLAG_SHOW_LOCKSTATE;
// }
timeDelay = GetDlgItemInt( hwnd, IDE_REPEAT_DELAY, &f, FALSE );
timeInterval = GetDlgItemInt( hwnd, IDE_REPEAT_INTERVAL, &f, FALSE );
OpenReg();
WriteInt( szConfigKey, afConfig );
WriteInt( szDelayKey, timeDelay );
WriteInt( szIntervalKey, timeInterval );
CloseReg();
EndDialog( hwnd, IDOK );
} else if( LOWORD(wParam) == IDB_REPEAT_HOOK ) {
BOOL f = IsDlgButtonChecked( hwnd, IDB_REPEAT_HOOK );
EnableWindow( GetDlgItem( hwnd, IDE_REPEAT_DELAY ), f );
EnableWindow( GetDlgItem( hwnd, IDE_REPEAT_INTERVAL ), f );
} else if( LOWORD(wParam) == IDCANCEL ) {
EndDialog( hwnd, IDCANCEL );
} else if( LOWORD(wParam) == IDB_HELP ) {
char sz[200];
GetModuleFileName( hInstance, sz, sizeof(sz) );
strcpy( sz + strlen(sz) - 3, "hlp" );
WinHelp( hwnd, sz, HELP_CONTENTS, 0 );
} else if( LOWORD(wParam) == IDB_JOURNAL_HOOK ) {
EnableButtons( hwnd, TRUE );
} else if( LOWORD(wParam) == IDB_GETMSG_HOOK ) {
EnableButtons( hwnd, FALSE );
}
break;
}
return 0;
}
static void near SetupDialog( void ) {
DialogBox( hInstance, "SETUP", hwndClient
, (DLGPROC)SetupDlgProc );
SetWindowPos( hwndClient, HWND_BOTTOM, 0, 0, 0, 0
, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE );
pfnSetConfig( afConfig, timeDelay, timeInterval );
}
LONG CALLBACK ClientWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) {
switch( message ) {
case WM_CREATE:
{
HMENU hmenu = GetSystemMenu( hwnd, FALSE );
ModifyMenu( hmenu, SC_RESTORE, MF_BYCOMMAND | MF_STRING | MF_ENABLED
, CMD_SETUP, "設定(&S)..." );
DeleteMenu( hmenu, SC_SIZE, MF_BYCOMMAND);
DeleteMenu( hmenu, SC_MINIMIZE, MF_BYCOMMAND);
DeleteMenu( hmenu, SC_MAXIMIZE, MF_BYCOMMAND);
}
return TRUE;
case WM_SYSCOMMAND:
if( wParam == CMD_SETUP ) {
SetupDialog();
} else if( wParam == SC_RESTORE || wParam == SC_MAXIMIZE ) {
//
} else {
return DefWindowProc( hwnd, WM_SYSCOMMAND, wParam, lParam );
}
break;
case WM_QUERYOPEN:
SetupDialog();
// PostMessage( hwnd, WM_SYSCOMMAND, CMD_SETUP, 0L );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hwnd, message, wParam, lParam );
}
return 0L;
}
int PASCAL WinMain( HANDLE hInstanceIn, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
MSG msg;
WNDCLASS wc;
hInstance = hInstanceIn;
if( (hwndClient = FindWindow( szAppName, NULL )) != NULL) {
BringWindowToTop( hwndClient );
return 1;
}
hLib = LoadLibrary( "HCAPS32S.DLL" );
if( hLib == 0 ) {
MessageBox( NULL, "hcap32s.dllが見つかりません。", NULL, MB_OK | MB_ICONHAND );
return TRUE;
}
wc.style = 0;
wc.lpfnWndProc = (WNDPROC)ClientWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_HIDECAPS ) );
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = szAppName;
if( !RegisterClass( &wc ) ) {
return FALSE;
}
hwndClient = CreateWindow( szAppName, szTitle
, WS_OVERLAPPEDWINDOW
, 0, 0, 0, 0
, HWND_DESKTOP
, NULL, hInstance, NULL );
if( hwndClient == NULL ) {
return FALSE;
}
ShowWindow( hwndClient, SW_SHOWMINNOACTIVE );
UpdateWindow( hwndClient );
OpenReg();
afConfig = GetInt( szConfigKey, 1 );
timeDelay = GetInt( szDelayKey, 250 );
timeInterval = GetInt( szIntervalKey, 50 );
CloseReg();
*((FARPROC*)&pfnSetHook) = GetProcAddress( hLib, "SetHook" );
*((FARPROC*)&pfnReleaseHook) = GetProcAddress( hLib, "ReleaseHook" );
*((FARPROC*)&pfnSetConfig) = GetProcAddress( hLib, "SetConfig" );
pfnSetConfig( afConfig, timeDelay, timeInterval );
pfnSetHook( hwndClient );
while( GetMessage( &msg, NULL, 0, 0 ) ) {
if( msg.message == WM_CANCELJOURNAL
|| (msg.message == WM_IME_REPORT && msg.wParam == IR_IMESELECT) ) {
pfnReleaseHook();
pfnSetHook( hwndClient );
}
TranslateMessage( &msg );
DispatchMessage( &msg );
}
pfnReleaseHook();
FreeLibrary( hLib );
return TRUE;
}