vc输入法源码
❶ 怎么查看一软件的VC++源码
除非它是开源软件,公布了源代码,不然是看不到的。
有反编码的工具,但是容易出错,而且得到的不一定是纯正的原代码。。
为什么看不到,因为程序编写成C++文件后是不能直接运行的,它要编译成机器可以读懂的语言,变成另一个文件,0101001100000001101000之类的东西,所以是不能直接查看的。
而反编码的是这样的,就像你把一句话中文翻译成英文后,又让人把这句英文翻译成中文,这两句中文是不一定一样的(甚至是基本不可能是完全一样的。)
❷ VC++能编写中文输入法吗
当然可以。操作系统提供有输入法相关的API,用这些API来开发。
或者,直接捕获键盘输入,然后查 汉字码表,返回给当前的focus窗口一个编码字符串即可。
VC能开发window下运行的任何程序。
❸ 用VC6.0写个输入法程序!添加资源Version里 FILESUBTYPE怎么没有VFT2_DRV_INPUTMETHOD这一项呢
你需要在将FILETYPE设置为VFT_DRV之后,关闭资源窗口,在文件菜单中,以文本方式打开rc文件,手动修改为VFT2_DRV_INPUTMETHOD。
需要注意的是,VC6可以开发输入法,但开发的输入法只能在win98/ME/XP/下很好的运行,win7基本可以兼容,win8下就完全无法使用了。如果希望开发兼容新版操作系统的输入法,强烈建议使用2010以上版本。
❹ 在VC++6.0中,怎样编写一个程序,实现输入多个汉字,输出其编码,求源代码
#include <iostream>
using namespace std;
int getHighest(int[], int); //最高分
int main()
{
const int NUM_STU= 5;
int array[NUM_STU],
max;
cout<< "请输入5个整数: \n";
for(int i=0; i < NUM_STU; i++)
{
cin>> array[i];
}
max= getHighest(array, NUM_STU);
cout<< "最大值是: "<<max<<endl;
return 0;
}
int getHighest(int array[], int size)
{
int highest;
highest= array[0];
for(int count=1; count< size; count++)
{
if(array[count] > highest)
highest= array[count];
}
return highest;
}
我可以帮助你,你先设置我最佳答案后,我网络Hii教你。
❺ 求VC++编程源代码
打开VC++6.0,新建基于对话框的工程RS485Comm,在主对话框窗口IDD_RS485COMM_DIALOG上添加两个按钮,ID分别为IDC_SEND和IDC_RECEIVE,标题分别为“发送”和“接收”;添加一个静态文本框IDC_DISP,用于显示串口接收到的内容。
在RS485CommDlg.cpp文件中添加全局变量:
HANDLE hCom; //全局变量,串口句柄
在RS485CommDlg.cpp文件中的OnInitDialog()函数添加如下代码: // TODO: Add extra initialization here
hCom=CreateFile("COM1",//COM1口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL);
if(hCom==(HANDLE)-1)
{
AfxMessageBox("打开COM失败!");
return FALSE;
}
SetupComm(hCom,100,100); //输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier=0;
TimeOuts.ReadTotalTimeoutConstant=0;
//在读一次输入缓冲区的内容后读操作就立即返回,
//而不管是否读入了要求的字符。
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=100;
TimeOuts.WriteTotalTimeoutConstant=500;
SetCommTimeouts(hCom,&TimeOuts); //设置超时
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600; //波特率为9600
dcb.ByteSize=8; //每个字节有8位
dcb.Parity=NOPARITY; //无奇偶校验位
dcb.StopBits=TWOSTOPBITS; //两个停止位
SetCommState(hCom,&dcb);
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
分别双击IDC_SEND按钮和IDC_RECEIVE按钮,添加两个按钮的响应函数: void CRS485CommDlg::OnSend()
{
// TODO: Add your control notification handler code here
// 在此需要简单介绍百特公司XMA5000的通讯协议:
//该仪表RS485通讯采用主机广播方式通讯。
//串行半双工,帧11位,1个起始位(0),8个数据位,2个停止位(1)
//如:读仪表显示的瞬时值,主机发送:DC1 AAA BB ETX
//其中:DC1是标准ASCII码的一个控制符号,码值为11H(十进制的17)
//在XMA5000的通讯协议中,DC1表示读瞬时值
//AAA是从机地址码,也就是XMA5000显示仪表的通讯地址
//BB为通道号,读瞬时值时该值为01
//ETX也是标准ASCII码的一个控制符号,码值为03H
//在XMA5000的通讯协议中,ETX表示主机结束符
char lpOutBuffer[7];
memset(lpOutBuffer,''\0'',7); //前7个字节先清零
lpOutBuffer[0]=''\x11''; //发送缓冲区的第1个字节为DC1
lpOutBuffer[1]=''0''; //第2个字节为字符0(30H)
lpOutBuffer[2]=''0''; //第3个字节为字符0(30H)
lpOutBuffer[3]=''1''; // 第4个字节为字符1(31H)
lpOutBuffer[4]=''0''; //第5个字节为字符0(30H)
lpOutBuffer[5]=''1''; //第6个字节为字符1(31H)
lpOutBuffer[6]=''\x03''; //第7个字节为字符ETX
//从该段代码可以看出,仪表的通讯地址为001
DWORD dwBytesWrite=7;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,& dwBytesWrite,NULL);
if(!bWriteStat)
{
AfxMessageBox("写串口失败!");
}
}
void CRS485CommDlg::OnReceive()
{
// TODO: Add your control notification handler code here
char str[100];
memset(str,''\0'',100);
DWORD wCount=100;//读取的字节数
BOOL bReadStat;
bReadStat=ReadFile(hCom,str,wCount,&wCount,NULL);
if(!bReadStat)
AfxMessageBox("读串口失败!");
PurgeComm(hCom, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
m_disp=str;
UpdateData(FALSE);
}
您可以观察返回的字符串,其中有和仪表显示值相同的部分,您可以进行相应的字符串操作取出仪表的显示值。
打开ClassWizard,为静态文本框IDC_DISP添加CString类型变量m_disp,同时添加WM_CLOSE的相应函数: void CRS485CommDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CloseHandle(hCom); //程序退出时关闭串口
CDialog::OnClose();
}
程序的相应部分已经在代码内部作了详细介绍。连接好硬件部分,编译运行程序,细心体会串口同步操作部分。
❻ 如何把VC编程生成的EXE文件反编译出源代码
vc++ 写的代码只能反编译成汇编。源码就算了!
❼ VC 源代码学习
vc源代码:http://sites.google.com/site/qiujiejia1/Home/VC_SourceCode.zip
通用控件使用详解: http://sites.google.com/site/qiujiejia1/Home/通用控件使用详解.zip
CSDN VC编程经验总结:http://sites.google.com/site/qiujiejia1/Home/CSDN_VC编程经验总结.zip
vc++ 编程指南 :http://sites.google.com/site/qiujiejia1/Home/vc++编程指南.zip
MFC问答 : http://sites.google.com/site/qiujiejia1/Home/MFC问答.zip
MFC教程
下载地址:http://cid-3ba16e78a53d2d3d.skydrive.live.com/self.aspx/ShareData/MFC%e6%95%99%e7%a8%8b.rar
建议你看看孙鑫的视频教程,这样学习起来没那么吃力。
下载地址:http://www.verycd.com/topics/35626/
最后希望你在学习VC++和MFC编程前先学习win32编程,这样不至于到后来学习不下去。个人意见,仅供参考。
❽ 用VC++制作一个中文输入法,应该先建立什么样的工程
输入法也是DLL动态链接调用库,你应该建立一个动态链接调用库的工程。
❾ 怎样用VC++语言实现打开输入法(Windows系统)
看完你应很清楚,以前收藏的,呵呵
Visual C++编程控制输入法
2003-03-07
在Windows系统中一般都安装了至少三种输入法,在输入数据时常常会切换输入法,虽然Windows系统提供了切换快捷健,但对输入工作还是带来了不少麻烦。如果在应用程序中为用户提供智能输入法自动切换,那么这样的应用程序就显得更加专业、更加具有竞争力。不知你可用过Access,在表数据输入时Access自动切换输入法,如某字段需要输入英文时自动切换到En输入状态,如另一字段需要输入中文自动切换到某中文输入状态。
本文将对如何在Windows应用程序中动态的控制输入法的技术进行探讨。在DELPHI中许多控件都有控制输入法的属性,用户在设计时只要设置好这个属性就可以了,但在VC中并不直接提供对输入法的控制,要在VC应用中实现这种功能必须调用Windows API。在本文中我将用一个类将与输入法操作有关的Windows API函数进行封装,读者可以直接将这个类导入项目工程中,通过操作这个类来实现对输入法的控制,这样更适合于面向对象的开发。
要想控制输入法,首先要解决的问题是如果获得系统已安装的输入法信息。在Windows平台下,每个安装的输入法都在注册表中注册了相关信息。在“HKEY_CURRENT_USER\keyboard layout\preload”键下就可以找到这些信息,键下由以1为基的递增数字做为值名(暂取名为数字号),其值的内容是一个由八个数字组成的字符串(暂取名为代号,如"e0040804"),其中左4位是设备代码(device identifier),右4位是语言代码(language identifier)。例如上面:左e004指智能ABC,右0804指大陆中文。在MSDN中对所有代码做了详细的说明,如感兴趣请浏览MSDN相关内容。另外要说明一点的是在Windows98版本中输入法注册信息与上面说明略有不同,它是将已安装的输入法的数字号做为…\Preload下面的子键,而Windows2000将数字号做为…\Preload键下的值。
通过读取注册表中的输入法信息,可以列出所有已安装的输入法,但得到的输入法信息只是一些让人难懂的数字串,如何将这些数字串翻译成易懂的文字说明呢?同样, 在HKEY_LOCAL_MACHINE:"System\CurrentControlSet\Control\Keyboard Layouts\"键下注册了这些信息,它的子键名为输入法代号(keyboard layout),内容为该输入法的ime文件,名称等信息。到此,我们已经了解了Windows系统控制输入法的原理知识,下面我们开始着手创建一个控制输入法的C++类,主要步骤如下:
1. 创建一个新类,新类名为:CInputLanguage
2. 新建一个保存输入法信息的结构。当加载系统已安装的输入法信息时,用一个此结构的链表来保存输入法信息。
struct IL{
char ilID[15]; //输入法代号。
char szName[100];//输入法的说明文字。
IL* pNext;
};
3. 加入一个私有的成员变量
IL* m_pILHead;
4. 加入加载输入法列表信息的成员函数
//此函数只针对Windows2000以上版本,如要在Windows98版本的代码请与笔者联系。
BOOL CInputLanguage::LoadInputLanguage()
{
HKEY hKey,hKey1;
DWORD cp=16;
char lp[15];
CString szID;
CString szKeyName,szKeyName1;
szKeyName = "Keyboard Layout\\Preload";
szKeyName1 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\";
int i=1;
szID.Format("%d",i);
DWORD lpT=REG_SZ;
if(::RegOpenKey(HKEY_CURRENT_USER,szKeyName,&hKey)==ERROR_SUCCESS )
{
While( ::RegQueryValueEx(hKey,szID,NULL,&lpT,(LPBYTE)lp,&cp) == ERROR_SUCCESS )
{
CString szTempName;
szTempName = szKeyName1 + (LPCTSTR)(LPTSTR)lp;
if(RegOpenKey(HKEY_LOCAL_MACHINE,szTempName,&hKey1)==ERROR_SUCCESS )
{
char lpD[100];
DWORD lpS=100; //DataSize
if(RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)lpD,&lpS)==ERROR_SUCCESS)
{
IL* p1,*p2;
p1 = m_pILHead;
p2 = new(IL);
strcpy(p2->ilID,lp);
strcpy(p2->szName,lpD);
p2->pNext = NULL;
if( p1 )
{
while( p1->pNext ){ p1 = p1->pNext ; }
p1->pNext = p2;
}
else
{
m_pILHead = p2;
}
}
}
::RegCloseKey(hKey1);
i++;
szID.Format("%d",i);
}
}
::RegCloseKey(hKey);
return (m_pILHead != NULL );
}
5. 加入选择输入法成员函数
BOOL CInputLanguage::SelectInputLanguage(IL *pIL)
{
if( !pIL ) return FALSE;
HKL hkl;
hkl=LoadKeyboardLayout(pIL->ilID,KLF_ACTIVATE);//装载输入法
if(hkl==NULL) return FALSE;
else{
ActivateKeyboardLayout(hkl,KLF_SETFORPROCESS);//激活输入法
}
return TRUE;
}
6. 其它部分
CInputLanguage::CInputLanguage()
{
m_pILHead = NULL;
LoadInputLanguage();
}
CInputLanguage::~CInputLanguage()
{
Clear();
}
//消除链表内存。
void CInputLanguage::Clear()
{
IL* p1,*p2;
p1 = m_pILHead;
while( p1 )
{
p2 = p1;
p1 = p1->pNext;
delete(p2);
}
m_pILHead = NULL;
}
//获得输入法信息链表头结点指针。
IL* CInputLanguage::GetInputLanguageList()
{
return m_pILHead;
}
使用此类时,只要将其头文件包括到要调用的文件中,调用GetInputLanguageList函数可以得到输入法信息链表的头结点指针,通过遍历此链表得到所有已安装的输入法的信息;通过SelectInputLanguage函数可以自由的控制输入法了
❿ 跪求 VC++写 输入法注入例子详细点 高手指点
加你了~~ 我给你弄下 看看行不~ 智能ABC 得用vista系统专用的, 不能和XP的混合,,要不然就会按出提示英文来.去网上下吧 vista系统专用的 有的