前段時間研究過API
後來由於工作關系就沒有再玩C#
而別說API了
今天晚上正好加班
等其他部門出活等到凌晨一點多了
還沒有動靜
就趁機耍一耍了
正好學習一下VS
以前曾經見別人CSDN上面問過如何用程序打開軟鍵盤
我也關注過
可沒有結果
在網上搜了一下也沒有能找出滿意的答案
今天就拿這個開開刀吧
反正大項目也沒有
只是一個小功能
結果沒曾想
弄出來了
也有好久沒有更新我的這一畝三分田了
就放上來了
獻給那些為中國共享軟件和提高中國程序水平作努力的人們
注
程序是在VS
裡面
注意一下
控件需要自己添加了
一個ComboBox
一個Textbox
一個Button
直接拖進去沒有更改name
以下程序開始
==================================
using System;
using System
Collections
Generic;
using System
ComponentModel;
using System
Data;
using System
Drawing;
using System
Text;
using System
Windows
Forms;
using System
Runtime
InteropServices;
namespace InputLanguageSwitch
{
/// <summary>
/// 獲取系統所有的輸入法
並可以程序改變當前輸入法
打開關閉軟鍵盤
/// 程序
房客
/// QQ
/// Blog
/// </summary>
public partial class Form
: Form
{
public Form
()
{
InitializeComponent();
this
InputLanguageChanged += 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<comboBox
Items
Count;i++)
{
if (InputLanguage
CurrentInputLanguage
LayoutName == comboBox
Items[i]
ToString())
{
comboBox
SelectedIndex = i;
}
}
}
private void comboBox
_SelectedIndexChanged(object sender
EventArgs e)
{
string strTemp = comboBox
Items[comboBox
SelectedIndex]
ToString();
InputLanguageCollection collects = InputLanguage
InstalledInputLanguages;
for (int i =
; i < collects
Count; i++)
{
if (collects[i]
LayoutName == strTemp)
InputLanguage
CurrentInputLanguage = collects[i];
}
}
private void Form
_Load(object sender
EventArgs e)
{
InputLanguageCollection collects = InputLanguage
InstalledInputLanguages;
for (int i =
; i < collects
Count; i++)
{
comboBox
Items
Add(collects[i]
LayoutName);
}
comboBox
SelectedIndex = collects
IndexOf(InputLanguage
CurrentInputLanguage);
}
private void button
_Click(object sender
EventArgs e)
{
this
textBox
Focus();
IntPtr hwndInput = ImmGetContext(this
Handle);
IntPtr dw
= IntPtr
Zero;
IntPtr dw
= IntPtr
Zero;
bool isSuccess = ImmGetConversionStatus(hwndInput
ref dw
ref dw
);
if (isSuccess)
{
int intTemp = dw
ToInt
() & IME_CMODE_SOFTKBD;
if (intTemp >
)
dw
= (IntPtr)(dw
ToInt
() ^ IME_CMODE_SOFTKBD);
else
dw
= (IntPtr)(dw
ToInt
() IME_CMODE_SOFTKBD);
}
isSuccess = ImmSetConversionStatus(hwndInput
dw
dw
);
ImmReleaseContext(this
Handle
hwndInput);
}
public const int IME_CMODE_SOFTKBD =
x
;
[DllImport(
imm
dll
EntryPoint =
ImmGetContext
)]
public static extern IntPtr ImmGetContext(
IntPtr hwnd
);
[DllImport(
imm
dll
EntryPoint =
ImmGetConversionStatus
)]
public static extern bool ImmGetConversionStatus(
IntPtr himc
ref IntPtr lpdw
ref IntPtr lpdw
);
[DllImport(
imm
dll
EntryPoint =
ImmSetConversionStatus
)]
public static extern bool ImmSetConversionStatus(
IntPtr himc
IntPtr dw
IntPtr dw
);
[DllImport(
imm
dll
EntryPoint =
ImmReleaseContext
)]
public static extern int ImmReleaseContext(
IntPtr hwnd
IntPtr himc
);
}
}
==============================
代碼結束
另外
也可以直接執行OSK而直接打開虛擬鍵盤
不過這個和軟鍵盤是不一樣的
現在反釣魚的軟件越來越多了
祝大家共同進步
謝謝大家的支持
昨天晚上發的
到現在已經有好幾個人加我問我了
為了方便大家
我把源程序一並也發在附件裡
以供大家下載參考
點擊下載
From:http://tw.wingwit.com/Article/program/net/201311/11474.html