www.pudn.com > ntshell.rar > cmdshell.h
// consoleView.h : interface of the CCmdShell class // ///////////////////////////////////////////////////////////////////////////// #if !defined(AFX_CONSOLEVIEW_H__1D46232F_7E9A_4370_8A2A_D091818F3CB7__INCLUDED_) #define AFX_CONSOLEVIEW_H__1D46232F_7E9A_4370_8A2A_D091818F3CB7__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CCmdEditCtrl : public CWindowImpl{ public: DECLARE_WND_SUPERCLASS(NULL, CEdit::GetWndClassName()) CCmdEditCtrl(); virtual ~CCmdEditCtrl(); BOOL PreTranslateMessage(MSG* pMsg); BOOL StartCmdEditor(SOCKET sock); BEGIN_MSG_MAP(CCmdEditCtrl) MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown) MESSAGE_HANDLER(WM_CHAR, OnChar) MESSAGE_HANDLER(WM_RBUTTONDOWN, OnRButtonDown) MESSAGE_HANDLER(WM_SOCKET_READ, OnSocketRead) END_MSG_MAP() // Handler prototypes (uncomment arguments if needed): // LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) // LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) // LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) LRESULT OnKeyDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnChar(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnRButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnSocketRead(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnPaste(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); private: typedef struct _RECORD_LIST { _RECORD_LIST *flink; _RECORD_LIST *blink; char cmd[]; } RECORD_LIST, *PRECORD_LIST; SOCKET slave_sock; int nCmdStartPos; int nCmdRecord; int nMaxCmdRecord; PRECORD_LIST history; void AddCmdRecord(char *cmd); char *GetNextCmdRecord(); char *GetPrevCmdRecord(); }; class CCmdShell : public CDialogImpl { public: enum { IDD = IDD_CMDSHELL }; CCmdEditCtrl m_edit; BEGIN_MSG_MAP(CCmdShell) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus) MESSAGE_HANDLER(WM_SOCKET_READ, OnSocketRead) MESSAGE_HANDLER(WM_CONNECT_CREATED, OnConnectCreated) MESSAGE_HANDLER(WM_CONNECT_CLOSED, OnConnectClosed) END_MSG_MAP() // Handler prototypes (uncomment arguments if needed): // LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) // LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) // LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { // center the dialog on the screen CenterWindow(); m_edit.SubclassWindow(GetDlgItem(IDC_CMDEDIT)); // register object for message filtering and idle updates CMessageLoop* pLoop = _Module.GetMessageLoop(); ATLASSERT(pLoop != NULL); return TRUE; } LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) { ::MoveWindow(GetDlgItem(IDC_CMDEDIT), 7, 7, LOWORD(lParam) - 14, HIWORD(lParam) - 14, TRUE); return TRUE; } LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { ::SetFocus(GetDlgItem(IDC_CMDEDIT)); return TRUE; } LRESULT OnConnectCreated(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) { m_edit.StartCmdEditor((SOCKET)wParam); return TRUE; } LRESULT OnConnectClosed(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) { m_edit.StartCmdEditor(INVALID_SOCKET); return TRUE; } LRESULT OnSocketRead(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { return m_edit.SendMessage(WM_SOCKET_READ, wParam, lParam); } }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_CONSOLEVIEW_H__1D46232F_7E9A_4370_8A2A_D091818F3CB7__INCLUDED_)