Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cách thực hiện hook để viết tiếng Việt?

    Em có đoạn code sau dùng hook viết chữ thường thành chữ hoa. giờ em muốn viết 2 chữ a ra 1 chữ â thì làm như thế nào ạ các bác[IMG]images/smilies/21.gif[/IMG][IMG]images/smilies/21.gif[/IMG]
    em viết trên VS 2010
    đây là code hook

    Mã:
    #include "windows.h" typedef VOID(*LOADPROC)(HHOOK hHook); HWND hWindow;HINSTANCE hInst;HHOOK hHook;BOOL setHook();BOOL unHook(HHOOK hHook); enum { ID_LABEL = 1,ID_IMAGE,ID_EDIT,ID_LIST,ID_BUTTON,ID_COMBO, ID_BUTTON2 }; LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);  HINSTANCE g_hInst;TCHAR   szAppName[] = TEXT("SDI Frame");TCHAR   szWinClass[]    = TEXT("WIN_CLASS"); HWND button1,button2; int WINAPI WinMain(HINSTANCE hInstance,     HINSTANCE hPrevInstance,    PSTR lpCmdLine,    int nCmdShow){         MSG         msg;         WNDCLASS    wc;         HWND        hwnd;         g_hInst = hInstance;         wc.cbClsExtra       = 0;         wc.cbWndExtra       = 0;         wc.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);         wc.hCursor          = LoadCursor(NULL, IDC_ARROW);         wc.hIcon            = LoadIcon(NULL, IDI_APPLICATION);         wc.hInstance        = hInstance;         wc.lpfnWndProc      = WinProc;         wc.lpszClassName    = szWinClass;         wc.lpszMenuName     = NULL;         wc.style            = CS_HREDRAW | CS_VREDRAW;          if( !RegisterClass(&wc))         {            MessageBox(NULL, TEXT("Error registering class"), TEXT("ERROR"), MB_OK);            return 0;        }         hwnd = CreateWindow(szWinClass,            szAppName,             WS_OVERLAPPEDWINDOW,             CW_USEDEFAULT,             CW_USEDEFAULT,             250,             200,             (HWND) NULL,             (HMENU) NULL,             (HINSTANCE) hInstance,             (void *) NULL);          ShowWindow(hwnd, nCmdShow);         UpdateWindow(hwnd);          while (GetMessage(&msg, (HWND) NULL, 0, 0))        {            TranslateMessage(&msg);             DispatchMessage(&msg);         }        return msg.wParam; } LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){    PAINTSTRUCT ps;    HDC         hdc;    int iD;    int i;    switch(msg){    case WM_CREATE:        button1 = CreateWindow(L"Button",L"start hook",BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,50,50,150,25,hwnd,(HMENU)ID_BUTTON,g_hInst,0);                    button2 = CreateWindow(L"Button",L"end hook",BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,50,100,150,25,hwnd,(HMENU)ID_BUTTON2,g_hInst,0);        case WM_PAINT:         hdc = BeginPaint(hwnd, &ps);        EndPaint(hwnd, &ps);        return 0;    case WM_COMMAND:        iD = LOWORD(wParam);        if (iD == ID_BUTTON)        {            if (setHook())            {                MessageBox(hwnd, L"hook succeed", L"box", MB_OK);            }            else            {                MessageBox(hwnd, L"Err hook!", L"box", MB_OK);            }        }        else if (iD=ID_BUTTON2)        {            if (unHook(hHook))            {                MessageBox(hwnd, L"UnHook ", L"box", MB_OK);            }            else            {                MessageBox(hwnd, L"Err unhook!", L"box", MB_OK);            }        }        break;    case WM_CHAR:        i = wParam;        break;    case WM_DESTROY:         PostQuitMessage(0);        break;     case WM_CLOSE:        DestroyWindow(hwnd);        break;    }return DefWindowProc(hwnd, msg, wParam, lParam);} //// setuphook BOOL setHook(){    if (LoadLibraryW(L"..\\..\\DLL\\Debug\\DLL.dll") == NULL)    {        MessageBox(0, L"Can not load DLL file.",L"Error", 0);        return FALSE;    }     HMODULE hDLL = GetModuleHandle(L"DLL");     if (hDLL == NULL)    {        return FALSE;    }     hHook = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetProcAddress(hDLL,"GetMsgProc"),hDLL, 0);     if (hHook == NULL)    {        return FALSE;    }     LOADPROC fPtrFcnt;    fPtrFcnt = (LOADPROC)GetProcAddress(hDLL,"SetGlobalHookHandle");    if (fPtrFcnt == NULL)    {        return FALSE;    }    fPtrFcnt(hHook);     return TRUE; } BOOL unHook(HHOOK hHook){    return UnhookWindowsHookEx(hHook);}
    còn đây là code DLL

    Mã:
    #include <Windows.h> #pragma data_seg("SHARED_DATA")#pragma data_seg()HHOOK hGobalHook=NULL; __declspec(dllexport) LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam){    if (nCode<0)    {        return CallNextHookEx(hGobalHook,nCode,wParam,lParam);    }     MSG* msg=(MSG*)lParam;    if (msg->message==WM_CHAR)    {        if ((0x61<=msg->wParam)&&(msg->wParam<=0x7A))        {            msg->wParam=msg->wParam - 0x20;                    }    }    return CallNextHookEx(hGobalHook,nCode,wParam,lParam);} __declspec(dllexport) void SetGlobalHookHandle(HHOOK hHook){    hGobalHook=hHook;}

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    UniKey có mã nguồn mở, viết bằng c. Tham khảo UniKey mà làm theo bạn à.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •