如标题

解决方案 »

  1.   

    同FORM,只是它的的初始接口和FORM不同罢了,我用VC写过,把那个代码给你一段吧
    DELPHI只要指定ACTIVEX的WINDOWPROC过程就行了
    LRESULT CTopEisKeyboardCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    switch(message)
    {
    case WM_ACTIVATE:
    MSG msg;
     wParam=WA_INACTIVE;
     msg.wParam=wParam;
     msg.lParam=wParam;
     msg.message=message;
     msg.hwnd=hwnd;
     DispatchMessage(&msg);
     break;
    case WM_MOUSEACTIVATE:

    return MA_NOACTIVATE;  

            break;
    case WM_SETFOCUS:
    {
        
    ::PostMessage(hwnd,WM_KILLFOCUS,0,0);
    CWnd *wnd=::AfxGetMainWnd();
    HWND hwndwnd=wnd->m_hWnd;
    lihao=hwndwnd;
    ::SetFocus(hwndwnd);

    //&&gFocus!=NULL
    /*if (hwndwnd!=gFocus)
    {
    ::SetFocus(gFocus);
        char buffer[9];
    long l=(long)gFocus;
    _ltoa(l,buffer,16);
    //MessageBox(buffer);
    }*/
    }
    break;
    case WM_KILLFOCUS:
    {
    //::SetFocus(lihao);
    /*if (hwndwnd!=hwnd)
    b=::PostMessage(hwndwnd,WM_MOUSEACTIVATE,0,0);
                if (b)
    {
    ::SetFocus(hwndwnd);
    lihao=hwndwnd;
    }9*/
    }
    case WM_DESTROY:
             if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
               break;
    case WM_CREATE:

    CWnd *wnd;
    //MSG msg;
    hwnd=CWnd::m_hWnd;
    wnd=AfxGetMainWnd();
    hInst=AfxGetResourceHandle();

    //HANDLE hmutex;
    //LPCTSTR szAppName;
    //CreateMutex
    /*while (GetMessage(&msg,NULL,0,0))        
    {
    HWND hwndx=::GetForegroundWindow();
    //BringWindowToTop(hwndMain);
    if (IsWindow(hwndx))
    {
    if (hwndx!=hwnd)
    {
    if (gFocus!=hwndx)
    {
    if (IsWindow(gFocus))
    {
    AttachThreadInput(GetWindowThreadProcessId(hwnd,NULL),GetWindowThreadProcessId(gFocus,NULL),false);
    }
    gFocus=hwndx;
    AttachThreadInput(GetWindowThreadProcessId(hwnd,NULL),GetWindowThreadProcessId(gFocus,NULL),true);
    }
    }
    }
    if (!hwnd||!::IsDialogMessage(hwnd,&msg))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } //ReleaseMutex(hMutex);
    return(msg.wParam );*/
    //AfxGetInstanceHandle();
    /*char buffer[20];
    long l=(long)hInst;
    _ltoa(l,buffer,16);
            //MessageBox(buffer);
    /*MessageBox("next");
    HINSTANCE hin=AfxGetInstanceHandle();
    l=(long)hin;
    _ltoa(l,buffer,16);
    MessageBox(buffer);*/

    /*HDC hdc;
    HDC hMemdc;
    HBITMAP hbitmap;
    BITMAP bm;
    hbitmap=LoadBitmap(hInst,"IDB_KEYBOARD");
    GetObject(hbitmap,sizeof(BITMAP),&bm);
            hdc=::GetDC(hwnd);
    hMemdc=CreateCompatibleDC(hdc);

    GetClientRect(&rect);
    StretchBlt(hdc,0,0,rect.right,rect.bottom,hMemdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    DeleteDC(hMemdc);
    ::ReleaseDC(hwnd,hdc);

    DeleteObject(hbitmap); /*char buff[20];
    _itoa(rect.top,buff,10);
    MessageBox(buff);
    _itoa(rect.left,buff,10);
    MessageBox(buff);
    _itoa(rect.bottom,buff,10);
    MessageBox(buff);
    _itoa(rect.right,buff,10);
    MessageBox(buff);*/
    break;
    case WM_LBUTTONDOWN:
    int x,y;
    RECT rect;
    x=LOWORD(lParam);  
    y=HIWORD(lParam);
    POINT p;
    p.x=x;
    p.y=y;
    //the '~'
    rect=CRect(0,0,25,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0xC0,0,0,0);
                    keybd_event(0xC0,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'1'
        rect=CRect(25,0,50,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x31,0,0,0);
                    keybd_event(0x31,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'2'
        rect=CRect(50,0,75,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x32,0,0,0);
                    keybd_event(0x32,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'3'
        rect=CRect(75,0,100,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x33,0,0,0);
                    keybd_event(0x33,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'4'
        rect=CRect(100,0,125,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x34,0,0,0);
                    keybd_event(0x34,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'5'
        rect=CRect(125,0,150,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x35,0,0,0);
                    keybd_event(0x35,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'6'
        rect=CRect(150,0,175,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x36,0,0,0);
                    keybd_event(0x36,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'7'
        rect=CRect(175,0,200,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x37,0,0,0);
                    keybd_event(0x37,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
    //'8'
        rect=CRect(200,0,225,27);
    if (PtInRect(&rect,p))
    {
    keybd_event(0x38,0,0,0);
                    keybd_event(0x38,0,KEYEVENTF_KEYUP,0);
    if (gShift==true)
    {
    keybd_event(0x20,0,KEYEVENTF_KEYUP,0);
    }
    }
      

  2.   

    谢谢,但是在delphi中好象行不通。只能截获部分消息。