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系統專用的 有的