home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 January (DVD) / VPR980100.ISO / OLS / WIN16 / HMIZE120 / HMIZE120.LZH / SOURCE.LZH / HIDEMIZE.CPP < prev    next >
C/C++ Source or Header  |  1995-03-15  |  10KB  |  327 lines

  1. #include <windows.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "global.h"
  5. #include "hidemize.h"
  6. #include "..\hidemaru\menu.h"
  7. #include "edithook.h"
  8. #include "listhook.h"
  9.  
  10. HINSTANCE    hInstance;
  11. BYTE    abKeyState[256];
  12. struct SHAREMEMSTRUCT FAR* pshare;
  13. UINT    afConfig;
  14. WNDCLASSENUM    wndclass;
  15.  
  16. static char szEnv[] = "Env";
  17. static char szHidemizeKey[] = "Hidemize";
  18. static char szHidemaruIni[] = "HIDEMARU.INI";
  19.  
  20. static char szEdit[] = "Edit";
  21. static char szListBox[] = "ListBox";
  22. static char szComboBox[] = "ComboBox";
  23.  
  24. /***************** 秀丸のshare.hからもってきた(秀丸化計画が.Cのため)***/
  25. //    ちなみに構造体はパックする必要がある。
  26. #define KEYASSIGN_FUNC    0
  27. #define KEYASSIGN_HOME    12
  28. #define KEYASSIGN_END    13
  29. #define KEYASSIGN_BACK    14
  30. #define KEYASSIGN_RETURN    15
  31. #define KEYASSIGN_INS    16
  32. #define KEYASSIGN_DEL    17
  33. #define KEYASSIGN_UP    18
  34. #define KEYASSIGN_DOWN    19
  35. #define KEYASSIGN_RIGHT    20
  36. #define KEYASSIGN_LEFT    21
  37. #define KEYASSIGN_ASCII    22
  38. #define KEYASSIGN_LESS    54
  39. #define KEYASSIGN_GREAT    55
  40.  
  41. typedef SHAREMEMSTRUCT FAR* (FAR PASCAL *PGETHIDEMARUSHAREMEM)( void );
  42.  
  43. HWND    hwndClient;
  44. HWND    hwndTarget;
  45. static char szTitle[] = "秀丸化計画";
  46. static char szAppName[] = "Hidemizer";
  47. char near    szMenuParentClassName[] = "HidemizeMenuParent";
  48. static HHOOK    hhookSysMsg;
  49. static HANDLE    hmodHidemaruLib;
  50.  
  51. int GetCommand( WPARAM wParam ) {
  52.     GetKeyboardState( (BYTE FAR*)abKeyState );
  53.     int        cmd = 0;
  54.     if( abKeyState[VK_CONTROL] & 0x80 ) {
  55.         BYTE FAR*    pb;
  56.         if( abKeyState[VK_SHIFT] & 0x80 ) {
  57.             pb = pshare->key.ctrlshift;
  58.         } else {
  59.             pb = pshare->key.ctrl;
  60.         }
  61.         if( wParam >= VK_F1 && wParam <= VK_F12 ) {
  62.             cmd = pb[ wParam - VK_F1 ];
  63.         } else if( wParam >= '@' && wParam <= 'Z' + 5 ) {
  64.             cmd = pb[ wParam - '@' + KEYASSIGN_ASCII ];
  65. //        } else if( wParam == VK_HOME ) {
  66. //            cmd = pb[ KEYASSIGN_HOME ];
  67. //        } else if( wParam == VK_END ) {
  68. //            cmd = pb[ KEYASSIGN_END ];
  69.         } else if( wParam == VK_RETURN ) {
  70.             cmd = pb[ KEYASSIGN_RETURN ];
  71.         } else if( wParam == VK_UP ) {
  72.             cmd = pb[ KEYASSIGN_UP ];
  73.         } else if( wParam == VK_DOWN ) {
  74.             cmd = pb[ KEYASSIGN_DOWN ];
  75.         } else if( wParam == VK_RIGHT ) {
  76.             cmd = pb[ KEYASSIGN_RIGHT ];
  77.         } else if( wParam == VK_LEFT ) {
  78.             cmd = pb[ KEYASSIGN_LEFT ];
  79. //        } else if( wParam == VK_BACK ) {
  80. //            cmd = pb[ KEYASSIGN_BACK ];
  81. //        } else if( wParam == VK_INSERT ) {
  82. //            cmd = pb[ KEYASSIGN_INS ];
  83. //        } else if( wParam == VK_DELETE ) {
  84. //            cmd = pb[ KEYASSIGN_DEL ];
  85.         } else if( wParam == 0x00BC ) {
  86.             cmd = pb[ KEYASSIGN_LESS ];
  87.         } else if( wParam == 0x00BE || wParam == 0x001D ) {
  88.             cmd = pb[ KEYASSIGN_GREAT ];
  89.         } else if( wParam == 0x00DE ) {
  90.             cmd = pb[ 0x1E + KEYASSIGN_ASCII ];    // '^'
  91.         } else if( wParam == 0x00C0 ) {
  92.             cmd = pb[ 0 + KEYASSIGN_ASCII ];        // '@'
  93.         }
  94.     } else if( abKeyState[VK_SHIFT] & 0x80 ) {
  95.         if( wParam >= VK_F1 && wParam <= VK_F12 ) {
  96.             cmd = pshare->key.shift[ wParam - VK_F1 ];
  97.         } else if( wParam == VK_RETURN ) {
  98.             cmd = pshare->key.shift[ KEYASSIGN_RETURN ];
  99.         }
  100.     } else {
  101.         if( wParam >= VK_F1 && wParam <= VK_F12 ) {
  102.             cmd = pshare->key.func[ wParam - VK_F1 ];
  103.         }
  104.     }
  105.     return cmd;
  106. }
  107.  
  108. extern "C" int CALLBACK _export SetupDlgProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) {
  109.     switch( message ) {
  110.         case WM_INITDIALOG:
  111.             {
  112.                 RECT    rc;
  113.                 GetWindowRect( hwnd, &rc );
  114.                 SetWindowPos( hwnd, NULL
  115.                     , (GetSystemMetrics( SM_CXSCREEN ) - (rc.right - rc.left)) / 2
  116.                     , (GetSystemMetrics( SM_CYSCREEN ) - (rc.bottom - rc.top)) / 2
  117.                     , 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE );
  118.             }
  119.             if( afConfig & FLAG_HOOK_CTRL_XCV ) {
  120.                 CheckDlgButton( hwnd, IDB_HOOK_CTRL_XCV, TRUE );
  121.             }
  122.             if( afConfig & FLAG_HOOK_RBUTTON ) {
  123.                 CheckDlgButton( hwnd, IDB_HOOK_RBUTTON, TRUE );
  124.             }
  125.             if( afConfig & FLAG_HOOK_LISTBOX_SEARCH ) {
  126.                 CheckDlgButton( hwnd, IDB_HOOK_LISTBOX_SEARCH, TRUE );
  127.             }
  128.             return TRUE;
  129.  
  130.         case WM_COMMAND:
  131.             if( wParam == IDOK ) {
  132.                 afConfig = 0;
  133.                 if( IsDlgButtonChecked( hwnd, IDB_HOOK_CTRL_XCV ) ) {
  134.                     afConfig |= FLAG_HOOK_CTRL_XCV;
  135.                 }
  136.                 if( IsDlgButtonChecked( hwnd, IDB_HOOK_RBUTTON ) ) {
  137.                     afConfig |= FLAG_HOOK_RBUTTON;
  138.                 }
  139.                 if( IsDlgButtonChecked( hwnd, IDB_HOOK_LISTBOX_SEARCH ) ) {
  140.                     afConfig |= FLAG_HOOK_LISTBOX_SEARCH;
  141.                 }
  142.                 char    sz[20];
  143.                 WritePrivateProfileString( szEnv, szHidemizeKey, itoa( afConfig, sz, 10 )
  144.                     , szHidemaruIni );
  145.                 EndDialog( hwnd, IDOK );
  146.             } else if( wParam == IDCANCEL ) {
  147.                 EndDialog( hwnd, IDCANCEL );
  148.             } else if( wParam == IDB_HELP ) {
  149.                 static char    szEditor[200];
  150.                 char*    pch;
  151.                 GetProfileString( "Extensions", "txt", "notepad.exe ^", szEditor, sizeof(szEditor) );
  152.                 pch = strchr( szEditor, '^' );
  153.                 if( pch != NULL ) *pch = '\0';
  154.                 GetModuleFileName( hInstance, szEditor + strlen(szEditor), 100 );
  155.                 strcpy( szEditor + strlen(szEditor) - 3, "TXT" );
  156.                 WinExec( szEditor, SW_SHOWNORMAL );
  157.             }
  158.             break;
  159.     }
  160.     return 0;
  161. }
  162.  
  163. static void near SetupDialog( void ) {
  164.     DialogBox( hInstance, "SETUP", hwndClient
  165.         , (DLGPROC)SetupDlgProc );
  166. }
  167.  
  168. extern "C" LONG CALLBACK _export ClientWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) {
  169.     switch( message ) {
  170.         case WM_CREATE:
  171.             {
  172.                 HMENU    hmenu = GetSystemMenu( hwnd, FALSE );
  173.                 ModifyMenu( hmenu, SC_RESTORE, MF_BYCOMMAND | MF_STRING | MF_ENABLED
  174.                     , SC_RESTORE,  "設定(&S)..." );
  175.                 DeleteMenu( hmenu, SC_SIZE, MF_BYCOMMAND);
  176.                 DeleteMenu( hmenu, SC_MINIMIZE, MF_BYCOMMAND);
  177.                 DeleteMenu( hmenu, SC_MAXIMIZE, MF_BYCOMMAND);
  178.             }
  179.             return TRUE;
  180.  
  181.         case WM_SYSCOMMAND:
  182.             if( wParam == CMD_SETUP ) {
  183.                 SetupDialog();
  184.             } else if( wParam == SC_RESTORE || wParam == SC_MAXIMIZE ) {
  185.                 PostMessage( hwnd, WM_SYSCOMMAND, CMD_SETUP, 0L );
  186.             } else {
  187.                 return DefWindowProc( hwnd, WM_SYSCOMMAND, wParam, lParam );
  188.             }
  189.             break;
  190.  
  191.         case WM_QUERYOPEN:
  192.             PostMessage( hwnd, WM_SYSCOMMAND, CMD_SETUP, 0L );
  193.             return 0L;
  194.  
  195.         case WM_DESTROY:
  196.             PostQuitMessage( 0 );
  197.             break;
  198.  
  199.         case WM_USER:
  200.             EditHookRButtonDown( (HWND)wParam );
  201.             break;
  202.  
  203.         default:
  204.             return DefWindowProc( hwnd, message, wParam, lParam );
  205.     }
  206.     return 0L;
  207. }
  208.  
  209. extern "C" LRESULT CALLBACK _export SysMsgProc( int code, WPARAM wParam, LPARAM lParam ) {
  210.     MSG FAR*    pmsg;
  211.     if( code == MSGF_DIALOGBOX ) {
  212.         pmsg = (MSG FAR*)lParam;
  213.         if( pmsg->message == WM_SYSKEYDOWN ) {
  214.             if( pmsg->wParam == VK_F10 ) {
  215.                 pmsg->message = WM_KEYDOWN;
  216.             }
  217.         } else if( pmsg->message == WM_CHAR ) {
  218.             if( pmsg->wParam < ' ' ) {
  219.                 int    cmd = GetCommand( pmsg->wParam + '@' );
  220.                 if( cmd == CMD_RETURN ) {
  221.                     pmsg->message = WM_KEYDOWN;
  222.                     pmsg->wParam = VK_RETURN;
  223.                 }
  224.             }
  225.         }
  226.         if( IsWindow( pmsg->hwnd ) ) {
  227.             char    szClassName[20];
  228.             GetClassName( pmsg->hwnd, szClassName, sizeof(szClassName) );
  229.             hwndTarget = pmsg->hwnd;
  230.             if( strcmp( szClassName, szEdit ) == 0 ) {
  231.                 wndclass = CLASS_EDIT;
  232.                 if( EditHookProc( pmsg->hwnd, pmsg->message, pmsg->wParam, pmsg->lParam ) ) return 1;
  233.             } else if( strcmp( szClassName, szListBox ) == 0 ) {
  234.                 wndclass = CLASS_LISTBOX;
  235.                 if( ListBoxHookProc( pmsg->hwnd, pmsg->message, pmsg->wParam, pmsg->lParam ) ) return 1;
  236.             } else if( strcmp( szClassName, szComboBox ) == 0 ) {
  237.                 wndclass = CLASS_COMBOBOX;
  238.                 if( ComboBoxHookProc( pmsg->hwnd, pmsg->message, pmsg->wParam, pmsg->lParam ) ) return 1;
  239.             }
  240.         }
  241.     } else if( code == MSGF_MENU ) {
  242.         pmsg = (MSG FAR*)lParam;
  243.         if( pmsg->message == WM_CHAR ) {
  244.             if( pmsg->wParam < ' ' ) {
  245.                 int    cmd = GetCommand( pmsg->wParam + '@' );
  246.                 if( cmd == CMD_RETURN ) {
  247.                     pmsg->message = WM_KEYDOWN;
  248.                     pmsg->wParam = VK_RETURN;
  249.                 } else if( cmd == CMD_CURSOR_UP ) {
  250.                     pmsg->message = WM_KEYDOWN;
  251.                     pmsg->wParam = VK_UP;
  252.                 } else if( cmd == CMD_CURSOR_DOWN ) {
  253.                     pmsg->message = WM_KEYDOWN;
  254.                     pmsg->wParam = VK_DOWN;
  255.                 } else if( cmd == CMD_CURSOR_RIGHT ) {
  256.                     pmsg->message = WM_KEYDOWN;
  257.                     pmsg->wParam = VK_RIGHT;
  258.                 } else if( cmd == CMD_CURSOR_LEFT ) {
  259.                     pmsg->message = WM_KEYDOWN;
  260.                     pmsg->wParam = VK_LEFT;
  261.                 }
  262.             }
  263.         }
  264.     }
  265.     return CallNextHookEx( hhookSysMsg, code, wParam, lParam );
  266. }
  267.  
  268. static BOOL near LoadHidemaruLib( void ) {
  269.     hmodHidemaruLib = LoadLibrary( "HIDEMSUB.DLL" );
  270.     if( hmodHidemaruLib == NULL ) {
  271.         MessageBox( NULL, "HIDEMSUB.DLL not found."
  272.             , NULL, MB_OK | MB_ICONHAND );
  273.         return FALSE;
  274.     }
  275.     PGETHIDEMARUSHAREMEM    pfunc = (PGETHIDEMARUSHAREMEM)GetProcAddress( hmodHidemaruLib, "GETHIDEMARUSHAREDMEM" );
  276.     pshare = pfunc();
  277.     return TRUE;
  278. }
  279.  
  280. int PASCAL WinMain( HANDLE hInstanceIn, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
  281.     MSG    msg;
  282.     WNDCLASS wc;
  283.     hInstance = hInstanceIn;
  284.     if( (hwndClient = FindWindow( szAppName, NULL )) != NULL) {
  285.         BringWindowToTop( hwndClient );
  286.         return 1;
  287.     }
  288.     if( !LoadHidemaruLib() ) {
  289.         return FALSE;
  290.     }
  291.     wc.style         = 0;
  292.     wc.lpfnWndProc     = (WNDPROC)ClientWndProc;
  293.     wc.cbClsExtra     = 0;
  294.     wc.cbWndExtra     = 0;
  295.     wc.hInstance     = hInstance;
  296.     wc.hIcon         = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_HIDEMIZE ) );
  297.     wc.hCursor         = LoadCursor(NULL, IDC_ARROW);
  298.     wc.hbrBackground = NULL;
  299.     wc.lpszMenuName     = NULL;
  300.     wc.lpszClassName = szAppName;
  301.     if( !RegisterClass( &wc ) ) {
  302.         return FALSE;
  303.     }
  304.     hwndClient = CreateWindow( szAppName, szTitle
  305.                 , WS_OVERLAPPEDWINDOW
  306.                 , 0, 0, 0, 0
  307.                 , HWND_DESKTOP
  308.                 , NULL, hInstance, NULL );
  309.     if( hwndClient == NULL ) {
  310.         return FALSE;
  311.     }
  312.     ShowWindow( hwndClient, SW_SHOWMINNOACTIVE );
  313.     UpdateWindow( hwndClient );
  314.     afConfig = GetPrivateProfileInt( szEnv, szHidemizeKey
  315.         , FLAG_HOOK_CTRL_XCV | FLAG_HOOK_RBUTTON | FLAG_HOOK_LISTBOX_SEARCH
  316.         , szHidemaruIni );
  317.     hhookSysMsg = SetWindowsHookEx( WH_SYSMSGFILTER, (HOOKPROC)SysMsgProc, hInstance, NULL );
  318.     while( GetMessage( &msg, NULL, 0, 0 ) ) {
  319.         TranslateMessage( &msg );
  320.         DispatchMessage( &msg );
  321.     }
  322.     UnhookWindowsHookEx( hhookSysMsg );
  323.     FreeLibrary( hmodHidemaruLib );
  324.     return TRUE;
  325. }
  326.  
  327.