熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VS2005中C#用代碼打開軟鍵盤

2013-11-13 09:44:49  來源: .NET編程 
     前段時間研究過API後來由於工作關系就沒有再玩C#而別說API了今天晚上正好加班等其他部門出活等到凌晨一點多了還沒有動靜就趁機耍一耍了正好學習一下VS
  以前曾經見別人CSDN上面問過如何用程序打開軟鍵盤我也關注過可沒有結果在網上搜了一下也沒有能找出滿意的答案今天就拿這個開開刀吧反正大項目也沒有只是一個小功能結果沒曾想弄出來了也有好久沒有更新我的這一畝三分田了就放上來了
  
  獻給那些為中國共享軟件和提高中國程序水平作努力的人們
  
  注程序是在VS裡面注意一下控件需要自己添加了一個ComboBox一個Textbox一個Button直接拖進去沒有更改name
  
  以下程序開始
  ==================================
  
  using System;
  using SystemCollectionsGeneric;
  using SystemComponentModel;
  using SystemData;
  using SystemDrawing;
  using SystemText;
  using SystemWindowsForms;
  using SystemRuntimeInteropServices;
  
  namespace InputLanguageSwitch
  {
   /// <summary>
   /// 獲取系統所有的輸入法並可以程序改變當前輸入法打開關閉軟鍵盤
   /// 程序房客
   /// QQ
   /// Blog
   /// </summary>
   public partial class Form : Form
   {
   public Form()
   {
   InitializeComponent();
   thisInputLanguageChanged += new InputLanguageChangedEventHandler(Form_InputLanguageChanged);
   }
  
   void Form_InputLanguageChanged(object sender InputLanguageChangedEventArgs e)
   {
   //throw new Exception(The method or operation is not implemented);
   for( int i=;i<comboBoxItemsCount;i++)
   {
   if (InputLanguageCurrentInputLanguageLayoutName == comboBoxItems[i]ToString())
   {
   comboBoxSelectedIndex = i;
   }
  
   }
   }
  
   private void comboBox_SelectedIndexChanged(object sender EventArgs e)
   {
   string strTemp = comboBoxItems[comboBoxSelectedIndex]ToString();
   InputLanguageCollection collects = InputLanguageInstalledInputLanguages;
   for (int i = ; i < collectsCount; i++)
   {
   if (collects[i]LayoutName == strTemp)
   InputLanguageCurrentInputLanguage = collects[i];
   }
  
   }
  
   private void Form_Load(object sender EventArgs e)
   {
   InputLanguageCollection collects = InputLanguageInstalledInputLanguages;
   for (int i = ; i < collectsCount; i++)
   {
   comboBoxItemsAdd(collects[i]LayoutName);
   }
   comboBoxSelectedIndex = collectsIndexOf(InputLanguageCurrentInputLanguage);
   }
  
   private void button_Click(object sender EventArgs e)
   {
   thistextBoxFocus();
   IntPtr hwndInput = ImmGetContext(thisHandle);
   IntPtr dw = IntPtrZero;
   IntPtr dw = IntPtrZero;
   bool isSuccess = ImmGetConversionStatus(hwndInput ref dw ref dw);
   if (isSuccess)
   {
   int intTemp = dwToInt() & IME_CMODE_SOFTKBD;
   if (intTemp > )
   dw = (IntPtr)(dwToInt() ^ IME_CMODE_SOFTKBD);
   else
   dw = (IntPtr)(dwToInt() IME_CMODE_SOFTKBD);
   }
   isSuccess = ImmSetConversionStatus(hwndInput dw dw);
   ImmReleaseContext(thisHandle hwndInput);
   }
  
   public const int IME_CMODE_SOFTKBD = x;
  
   [DllImport(immdll EntryPoint = ImmGetContext)]
   public static extern IntPtr ImmGetContext(
   IntPtr hwnd
   );
   [DllImport(immdll EntryPoint = ImmGetConversionStatus)]
   public static extern bool ImmGetConversionStatus(
   IntPtr himc
   ref IntPtr lpdw
   ref IntPtr lpdw
   );
   [DllImport(immdll EntryPoint = ImmSetConversionStatus)]
   public static extern bool ImmSetConversionStatus(
   IntPtr himc
   IntPtr dw
   IntPtr dw
   );
  
   [DllImport(immdll EntryPoint = ImmReleaseContext)]
   public static extern int ImmReleaseContext(
   IntPtr hwnd
   IntPtr himc
   );
  
   }
  }
  
  ==============================
  代碼結束
  另外也可以直接執行OSK而直接打開虛擬鍵盤不過這個和軟鍵盤是不一樣的
  現在反釣魚的軟件越來越多了祝大家共同進步
  
  謝謝大家的支持昨天晚上發的到現在已經有好幾個人加我問我了為了方便大家我把源程序一並也發在附件裡以供大家下載參考
  
  點擊下載
From:http://tw.wingwit.com/Article/program/net/201311/11474.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.