有三个三角了,呵呵!散分

andy1118 andy1118 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
昨天看到有人说老师要求他用C#做一个输入法,然后大家说用.net根本没必要做

在此先不说有没有必要,我就想了一下,如果让我用C#去做一个输入法,是否有这个能力

今天上午找了些资料,感觉实现也不是很困难。现将实现思路及主要代码贴出来
(注意我这是一个外挂式输入法,不是IME式)

首先要有个字典,就是用户输入 英文 变为 中文。
比如:我用五笔 ,
输入 a 按空格 电脑会输入 工,
输入 aa 按空格 电脑会输入 式,

这个我想会C#的,都会
SortedDictionary<string, string> words = new SortedDictionary<string, string>();
words.Add("A", "工");
words.Add("AA", "式");

其次就是键盘钩子了,就是
输入A再空格时,电脑要将A屏蔽,然后输入 工
输入AA再空格时,电脑要将AA屏蔽,然后输入 式

安装钩子
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
HookProc KeyboardHookProcedure;
static int hHook = 0;

[DllImport("user32.dll", CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn,IntPtr hInstance, int threadId);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr GetModuleHandle(string lpModuleName);

if (hHook == 0)
{
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
Process curProcess = Process.GetCurrentProcess();
ProcessModule curModule = curProcess.MainModule;
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, GetModuleHandle(curModule.ModuleName), 0);
//If SetWindowsHookEx fails.
if (hHook == 0)
{
MessageBox.Show("SetWindowsHookEx Failed");
return;
}

卸载钩子
[DllImport("user32.dll", CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);

bool ret = UnhookWindowsHookEx(hHook);
if (ret == false)
{
MessageBox.Show("UnhookWindowsHookEx Failed");
return;
}
hHook = 0;

定义键盘钩子结构
public struct KeyboardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}

定义键盘钩子处理函数(也就是将用户输入的英文变为中文,并屏蔽键盘按键)
private int KeyboardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyboardHookStruct MyKBHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));
Keys keyData = (Keys)MyKBHookStruct.vkCode;
if (wParam == WM_KEYDOWN)
{
if (keyData == Keys.Space)
{
SendKeys.Send(words[sb1.ToString()]);
sb1.Remove(0, sb1.Length);
}
else
{
sb1.Append(keyData);
}
return 1;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
...全文

相关推荐

C语言实验-从键盘输入三角形三个边的长度,计算该三角形的面积。若输入的三条边不能构成三角形。则直接输出信息“不能构成三角形!”

编写程序。从键盘输入三角形三个边的长度,计算该三角形的面积。若输入的三条边不能构成三角形。则直接输出信息“不能构成三角形!”(提示:已知三角形的三条边为a、b和c,三角形的面积公式为: ,其中p=(a+b+c)/2;使用平方根函数sqrt时必须加头文件 #include<math.h> ) 运行结果:三条边长为3、4、5,面积6.000000。三条边长为1、2、3,不能构成三角形!

M01858682

由三个点坐标判断三个点能否组成三角形模板(自用,客官可取)

bool triangle(int x1,int y1,int x2,int y2,int x3,int y3)//判断三条边是否能组成三角形 { double a, b, c; a = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); b = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y...

Brights_Stars_

Delaunay三角形的算法之逐点插入算法

(此处参考了: https://www.cnblogs.com/zhiyishou/p/4430017.html) 如图,三个蓝色的点被一个由离散点的最大分布来求得的随机一个三角形包围。我们称这个三角形为超级三角(超级三角形包含了点集中所有的点)。作者的方法是根据相似三角形定理求得与矩形一半的小矩形的对角三角形,扩大一倍后则扩大后的直角三角形斜边经过右上角的点(Xmax,Ymin) 但是为了将所有的点包含在超级三角形内,在右下角对该三角形的顶点进行了横和高的扩展,并要保证这个扩展三角形底大于高,才能实

Wildcraner

散点三角化

这是散点云三角化的程序,非常完成,读入数据即可三角剖分化

tdnyb

python 判断三角形,给你三个整数a,b,c, 判断能否以它们为三个边长构成三角形。

# 判断三角形 # 给你三个整数a,b,c, 判断能否以它们为三个边长构成三角形。 若能,输出YES,否则输出NO # 输入示例 # 输入:a = 5 b = 5 c = 5 # 输出示例 # 输出:YES # 解析 # 三角形任意两边之和大于第三边,可以利用列表排序求出较小的两边,然后相加再和第三边比较,进行判断

神仙别闹
评论 41
收藏 已收藏
分享
返回顶部
andy1118
C# 111,129 成员 642,539 内容