⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inputatcmddlg.cpp

📁 一个简单的输入软键盘代码,可以供开发软键盘的朋友能有所帮助,针对WinCE的,也可以在windows 环境下使用
💻 CPP
字号:
// InputATCMDDlg.cpp : implementation file
//

#include "stdafx.h"
#include "InputATCMD.h"
#include "InputATCMDDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define	WM_ICON_NOTIFY WM_USER + 10

HWND gFocus;//不知道为什么必须在这里而不是在类中

/////////////////////////////////////////////////////////////////////////////
// CInputATCMDDlg dialog

CInputATCMDDlg::CInputATCMDDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CInputATCMDDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CInputATCMDDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CInputATCMDDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CInputATCMDDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CInputATCMDDlg, CDialog)
	//{{AFX_MSG_MAP(CInputATCMDDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_QUERYDRAGICON()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_RBUTTONDBLCLK()
	ON_WM_RBUTTONDOWN()
	ON_WM_RBUTTONUP()
	ON_WM_LBUTTONUP()
	ON_COMMAND(IDM_SHOW_INPUTATCMD, OnShowInputATCmd)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_INPUTATCMD, OnUpdateShowInputATCmd)
	ON_COMMAND(IDM_HIDE_INPUTATCMD, OnHideInputATCmd)
	ON_UPDATE_COMMAND_UI(IDM_HIDE_INPUTATCMD, OnUpdateHideInputATCmd)
	ON_COMMAND(IDM_EXIT, OnExit)
	ON_WM_SHOWWINDOW()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CInputATCMDDlg message handlers

BOOL CInputATCMDDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
//	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	VERIFY(cSystray.Create(NULL,			// Parent window
			WM_ICON_NOTIFY,					// Icon notify message to use
			_T("Input Manager"),		// tooltip
			m_hIcon,						// Icon to use
			IDR_TRAY_MENU));
	::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); //必须的  
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

BOOL CInputATCMDDlg::PreCreateWindow(CREATESTRUCT& cs) 
{
	DWORD dwExtendStyle=0;
	DWORD dwStyle=0;
	dwExtendStyle=GetWindowLong(this->m_hWnd,GWL_EXSTYLE);
	dwExtendStyle |=WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE;
	dwStyle=GetWindowLong(this->m_hWnd,GWL_STYLE);
    //dwStyle |=DS_SYSMODAL;
	cs.dwExStyle=dwExtendStyle;
	cs.style=dwStyle;
	return CDialog::PreCreateWindow(cs);
}
void CInputATCMDDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
		CDialog::OnSysCommand(nID, lParam);
}

HCURSOR CInputATCMDDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CInputATCMDDlg::SendKey()
{
	//Send AT
	BYTE ATCmd[50];
	int i=0;
	int ilength=0;
	ATCmd[0]='A';
	ATCmd[1]='T';
	ATCmd[2]=VK_ADD;//VK_OEM_PLUS;
	ATCmd[3]='C';
	ATCmd[4]='G';
	ATCmd[5]='D';
	ATCmd[6]='C';
	ATCmd[7]='O';
	ATCmd[8]='N';
	ATCmd[9]='T';
 	ATCmd[10]=0xBB;//'=';
	ATCmd[11]='1';
  	ATCmd[12]=0xBC;//VK_OEM_COMMA;//,
	ATCmd[13]=0xFF;//VK_LSHIFT;
	ATCmd[14]=0xDE;//VK_OEM_7;//" 
	ATCmd[15]='I';
	ATCmd[16]='P';
	ATCmd[17]=0xDE;//VK_OEM_7;
	ATCmd[18]=0xFF;//VK_LSHIFT;
	ATCmd[19]=0xBC;//VK_OEM_COMMA;//,
	ATCmd[20]=0xFF;//VK_LSHIFT;
	ATCmd[21]=0xDE;
    ATCmd[22]='C';
	ATCmd[23]='M';
	ATCmd[24]='N';
	ATCmd[25]='E';
	ATCmd[26]='T';
	ATCmd[27]=0xFF;//VK_LSHIFT;
	ATCmd[28]=0xDE;//VK_OEM_7;
	ATCmd[29]=VK_RETURN;

	if(!(GetKeyState(VK_CAPITAL) && 0xFF))
    {
		keybd_event(VK_CAPITAL,0,0,0);
		keybd_event(VK_CAPITAL,0,KEYEVENTF_KEYUP,0);
	}
	for(i=0;i<=29;i++)
	{
		switch(i)
		{
		case 14:
		case 17:
		case 20:
		case 21:
		case 28:			
			keybd_event(VK_LSHIFT,0,0,0);
			keybd_event(ATCmd[i],0,0,0);
			keybd_event(ATCmd[i],0,KEYEVENTF_KEYUP,0);
			keybd_event(VK_LSHIFT,0,KEYEVENTF_KEYUP,0);
			break;
		default:
			keybd_event(ATCmd[i],0,0,0);
			keybd_event(ATCmd[i],0,KEYEVENTF_KEYUP,0);
			break;
		}

	}

//	sleep(1000);
	Sleep(500);

	ATCmd[0]='A';
	ATCmd[1]='T';
	ATCmd[2]='D';
	ATCmd[3]=VK_SPACE;
	ATCmd[4]=VK_MULTIPLY;
	ATCmd[5]='9';
	ATCmd[6]='9';
	ATCmd[7]='3';//35;//'#';
	ATCmd[8]=0xBA;//;
	ATCmd[9]=VK_RETURN;
	for(i=0;i<=9;i++)
	{
		switch(i)
		{
		case 7:	
			keybd_event(VK_LSHIFT,0,0,0);
			keybd_event(ATCmd[i],0,0,0);
			keybd_event(ATCmd[i],0,KEYEVENTF_KEYUP,0);
			keybd_event(VK_LSHIFT,0,KEYEVENTF_KEYUP,0);
			break;
		default:
			keybd_event(ATCmd[i],0,0,0);
			keybd_event(ATCmd[i],0,KEYEVENTF_KEYUP,0);
			break;
		}
	}
     
	Sleep(2000);
	//Send OK to close the windows
	//hdc=::GetWindowDC(gFocus);
	RECT rect;
    if(::GetWindowRect(gFocus, &rect))
	{
		mouse_event(MOUSEEVENTF_MOVE,rect.right-40,rect.top+8,0,0);
		mouse_event(MOUSEEVENTF_LEFTDOWN,rect.right-40,rect.top+8,0,0);
		mouse_event(MOUSEEVENTF_LEFTUP,rect.right-40,rect.top+8,0,0);
	}
}

void CInputATCMDDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	ReleaseFocus();
	SendKey();
}

void CInputATCMDDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	OnLButtonDown(nFlags, point);
}

BOOL CInputATCMDDlg::PreTranslateMessage(MSG* pMsg) 
{
	HWND wnd = ::GetForegroundWindow();
	if(IsWindow(wnd))
	{
		if(wnd != this->m_hWnd)
		{
			if(gFocus != wnd)
			{
				if(IsWindow(gFocus))
				{
			//		AttachThreadInput(
			//			GetWindowThreadProcessId(m_hWnd,NULL),
			//			GetWindowThreadProcessId(gFocus,NULL),
			//			FALSE);
					gFocus=::GetFocus();
				}

				gFocus = wnd;
			//	AttachThreadInput(
			//		GetWindowThreadProcessId(m_hWnd,NULL),
			//		GetWindowThreadProcessId(gFocus,NULL),
			//		TRUE);
			}
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

void CInputATCMDDlg::OnRButtonDblClk(UINT nFlags, CPoint point) 
{
	OnLButtonDown(nFlags, point);
}

void CInputATCMDDlg::OnRButtonDown(UINT nFlags, CPoint point) 
{
	OnLButtonDown(nFlags, point);
}

void CInputATCMDDlg::OnRButtonUp(UINT nFlags, CPoint point) 
{
	ReleaseFocus();
}

void CInputATCMDDlg::OnLButtonUp(UINT nFlags, CPoint point) 
{
	ReleaseFocus();
}

void CInputATCMDDlg::ReleaseFocus() 
{
	if(IsWindow(gFocus))
	{
		HWND wnd = ::GetForegroundWindow();
		if(IsWindow(wnd))
		{
			if(wnd == gFocus)
			{
				return;
			}
		}
		::SetForegroundWindow(gFocus);
		::SetFocus(gFocus);
	}
}

void CInputATCMDDlg::OnOK() 
{
	ShowWindow(SW_HIDE);
}

void CInputATCMDDlg::OnCancel() 
{
	ShowWindow(SW_HIDE);
}

void CInputATCMDDlg::OnShowInputATCmd() 
{
	ShowWindow(SW_SHOW);
}

void CInputATCMDDlg::OnUpdateShowInputATCmd(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!IsWindowVisible());
}

void CInputATCMDDlg::OnHideInputATCmd() 
{
	ShowWindow(SW_HIDE);
}

void CInputATCMDDlg::OnUpdateHideInputATCmd(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(IsWindowVisible());
}

void CInputATCMDDlg::OnExit() 
{

	CDialog::OnOK();
}

void CInputATCMDDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	if(bShow)
	{
		cSystray.SetMenuDefaultItem(IDM_HIDE_INPUTATCMD, FALSE);
	}
	else
	{
		cSystray.SetMenuDefaultItem(IDM_SHOW_INPUTATCMD, FALSE);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -