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_)