海思剪切板:alt+1~9复制,ctrl+1~9粘贴,当手工复制了之后,代码怎么实现ctrl+1~9粘贴这个动作? 我经常使用“海思剪切板”复制、粘贴,复制、粘贴,alt+1~9复制,ctrl+1~9粘贴,当手工复制了之后,我想使用C#代码实现ctrl+1~9粘贴这个动作,请问怎么实现?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 到MSDN中查询一下Clipboard类的相关信息你可以用Clipboard把数据存到剪切板,也可以从Clipboard取出你放进去的数据 第一点:Key press事件里面去定义你的key第二点:读写clipboard. 在KeyPress事件里面写如果调用 IDataObject data = Clipboard.GetDataObject(); if (data.GetDataPresent(DataFormats.Text)) textBox1.Text = data.GetData(DataFormats.Text).ToString(); 测试过了在Key_Down事件里面写if (e.Control && e.KeyValue >= 49 && e.KeyValue <= 57) { IDataObject getData = Clipboard.GetDataObject(); if(getData.GetDataPresent(DataFormats.Text)) { this.txtValue.Text = getData.GetData(DataFormats.Text).ToString(); } } 谢谢楼上各位的指点但是这个应该不是我需求的,不过还是谢谢!这个问题的难点在于,海思剪贴板是第三方软件,它运行的时候,使用alt+1~9复制,ctrl+1~9粘贴我现在的问题就是要在手工复制了之后,我想使用C#代码实现ctrl+1~9粘贴这个动作但是上面的代码好像都是针对C#来操作的?继续请教,谢谢先! using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.Windows.Forms;using System.Diagnostics;namespace ClipboardEdit{ public class InterceptKeys { private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private static LowLevelKeyboardProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; /// <summary> /// 启动监测程序 /// </summary> public static void RunHook() { _hookID = SetHook(_proc); } /// <summary> /// 关闭监测程序 /// </summary> public static void UnHook() { UnhookWindowsHookEx(_hookID); } private static IntPtr SetHook(LowLevelKeyboardProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { return SetWindowsHookEx(WH_KEYBOARD_LL, proc,GetModuleHandle(curModule.ModuleName), 0); } } /// <summary> /// 设置默认值与数据 /// </summary> /// <param name="initInt"></param> /// <param name="outString">"F:\图片\精品分类\品牌图片\google徽标\@[email protected]"</param> public static void Init(int initInt, string outString) { i = initInt; str = outString; } private static int i = 0; private static string str = @"I:\over\Images\google\@[email protected]"; private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { int vkCode = Marshal.ReadInt32(lParam); Keys key=(Keys)vkCode; //同时按下Ctrl+V键的时候 if (Control.ModifierKeys == Keys.Control && key.Equals(Keys.V)) { //获得剪切板数据 string data = Clipboard.GetText(TextDataFormat.UnicodeText); //重新设置剪切板数据 DataObject m_data = new DataObject(); m_data.SetData(DataFormats.Text, true, str.Replace("@_@",Convert.ToString(++i))); Clipboard.SetDataObject(m_data, true); } } return CallNextHookEx(_hookID, nCode, wParam, lParam); } #region 调用API private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName); #endregion } }调用:InterceptKeys.RunHook();说明: 其实光显示或改变剪切板里面的数据没有这么多代码的,这里启动键盘监测程序,只有按下CTRL+C改会改变剪切板中的数据,像[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]这样的代码都是引入DLL,调用系统API用于监测键盘事件的。 自动升级的原理 文件管理程序 C# 继承类的问题 关于DataGrid数据绑定控件的数据格式转换问题,急,在线等~~ 100分求解Ftp上传遇到的3个头痛的问题(我的分快没了,否则还可以加) 征求大家用VS.NET编程时的方式,麻烦了.是程序员的,麻烦多进来看看.谢谢 c# 网页游戏辅助开发 AMF消息问题 vc6.0,vc.net以及c#...它们的区别是? MDI子窗体的字体设置的问题 装 .NET 的两个问题! c#操作ExcelCreator的问题 一个正则问题
第二点:读写clipboard.
如果调用
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Text))
textBox1.Text = data.GetData(DataFormats.Text).ToString();
在Key_Down事件里面写
if (e.Control && e.KeyValue >= 49 && e.KeyValue <= 57)
{
IDataObject getData = Clipboard.GetDataObject();
if(getData.GetDataPresent(DataFormats.Text))
{
this.txtValue.Text = getData.GetData(DataFormats.Text).ToString();
}
}
但是这个应该不是我需求的,不过还是谢谢!
这个问题的难点在于,海思剪贴板是第三方软件,它运行的时候,使用alt+1~9复制,ctrl+1~9粘贴
我现在的问题就是要在手工复制了之后,我想使用C#代码实现ctrl+1~9粘贴这个动作但是上面的代码好像都是针对C#来操作的?继续请教,谢谢先!
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;namespace ClipboardEdit
{
public class InterceptKeys
{
private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private static LowLevelKeyboardProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; /// <summary>
/// 启动监测程序
/// </summary>
public static void RunHook()
{
_hookID = SetHook(_proc);
} /// <summary>
/// 关闭监测程序
/// </summary>
public static void UnHook()
{
UnhookWindowsHookEx(_hookID);
} private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc,GetModuleHandle(curModule.ModuleName), 0);
}
} /// <summary>
/// 设置默认值与数据
/// </summary>
/// <param name="initInt"></param>
/// <param name="outString">"F:\图片\精品分类\品牌图片\google徽标\@[email protected]"</param>
public static void Init(int initInt, string outString)
{
i = initInt;
str = outString;
} private static int i = 0;
private static string str = @"I:\over\Images\google\@[email protected]"; private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Keys key=(Keys)vkCode;
//同时按下Ctrl+V键的时候
if (Control.ModifierKeys == Keys.Control && key.Equals(Keys.V))
{
//获得剪切板数据
string data = Clipboard.GetText(TextDataFormat.UnicodeText);
//重新设置剪切板数据
DataObject m_data = new DataObject();
m_data.SetData(DataFormats.Text, true, str.Replace("@_@",Convert.ToString(++i)));
Clipboard.SetDataObject(m_data, true);
}
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
} #region 调用API private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName); #endregion
}
}调用:InterceptKeys.RunHook();
说明:
其实光显示或改变剪切板里面的数据没有这么多代码的,这里启动键盘监测程序,只有按下CTRL+C改会改变剪切板中的数据,像[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]这样的代码都是引入DLL,调用系统API用于监测键盘事件的。