ULONG WinProc(POBJECT hObject, ULONG uMsg, ULONG wParam, ULONG lParam) { ULONG Status = FALSE; // if msg is not handled by our winproc the let default handler do it PUCHAR CommandBuffer, LogBuffer; switch(uMsg) { case MSG_KEYDOWN : if(lParam == CTRL) CTRLStatus = TRUE; // Set CtrlStatus as pressed else if(lParam == 'd') if(CTRLStatus) // if ctrl+d { Fired = !Fired; HandleKbEvent = Fired; // keyboard event is handled only if gui is fired if(Fired) RefreshDisplay(); Status = TRUE; // We don't want this event to be handled by object manager } if(Fired)// if gui is fired { switch(lParam) // let's go handle keycode { case ENTER : // log command LogBuffer = (PUCHAR)SendMessage(hLogEdit, MSG_GETTEXT, 0, 0); CommandBuffer = (PUCHAR)SendMessage(hCommandEdit, MSG_GETTEXT, 0, 0); strcat(LogBuffer, "\r\n"); strcat(LogBuffer, CommandBuffer); SendMessage(hLogEdit, MSG_SCROLL_DOWN, 0, 10); // auto scroll SendMessage(hCommandEdit, MSG_SET_TEXT, 0, (ULONG)": "); // then process command... Status = TRUE; break; case F5 : // refresh RefreshDisplay(); Status = TRUE; break; } } break; case MSG_KEYUP : if(lParam == CTRL) CTRLStatus = FALSE; // Set CtrlStatus as released Status = TRUE; } if(!Fired) return TRUE; // If gui is not fired, no need to let object manager handle this message return Status; };