C# 键盘监视+剪切板编程(每次复制都不一样哦!*v*)

由来:
      前一段时间把收藏的google徽标都上传到博客上来,上传的时候发现不支持批量上传图片,而且上传的图片名称还不一样!!我靠!一百多张图片要弄到猴年马月才能上传完毕啊!!于是乎想办法偷懒:先下了一个批量更改文件名的工具,把图片通过改成了1~1百多.jpg,然后写了一个剪切板的程序来动态的更改每次复制的文件名,这样只需要每次CTRL+C然后点一下上传然后再CTRL+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徽标\@_@.gif"</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\@_@.jpg";

        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用于监测键盘事件的。

结束语:
      请把你所学的运用于生活,这样才会在快乐中学到东西,在学到东西的同时解决实际问题。按原来笨办法全部上传也用不了写这代码的时间的一半,但是你知道——我赚到了!!:)

转载:http://www.cnblogs.com/over140/archive/2007/11/05/934452.html

时间: 2025-01-01 15:49:40

C# 键盘监视+剪切板编程(每次复制都不一样哦!*v*)的相关文章

Visual C#的剪切板编程

Visual C#是微软.Net框架中的一个重要的程序开发语言,虽然在.Net框架中还有其他的程序开发语言,但微软似乎对Visual C#更喜爱有加.这同时也就决定了Visual C#在.Net框架中的地位,以及他以后的发展前途.由于针对剪切板方面的编程始终是程序设计的一个重点,当然也可以算是一个难点.本文将探讨如何利用Visual C#进行剪切板编程.本文将结合二个具体的程序例子来介绍Visual C#剪切板编程的二个重要方面:判定剪切板中的数据类型.保存剪切板中的数据.首先来介绍Visual

支持多浏览器(IE、Firefox、Opera)剪切板复制函数修正版_javascript技巧

需要注意的是,firefox下必须要设置下 signed.applets.codebase_principal_support 在 firefox浏览器地址栏输入about:config 过滤器中输入signed.applets.codebase_principal_support双击设置为true即可支持.因为firefox默认情况下是不支持脚本操作剪切板的. 因为只是什么都不支持的浏览器才是最安全的浏览器. [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 下面是ie firefo

js 复制到剪切板 js 剪切板

js 复制到剪切板   js 剪切板   js实现画图功能   js实现复制   复制到剪切板 剪切变成复制   剪切功能   右键剪切变成复制   vb 复制到剪切板   剪切与复制 <SCRIPT language=JavaScript> function copy(ob){ var obj=findObj(ob); if (obj) { obj.select();js=obj.createTextRange();js.execCommand("Copy");} } f

Delphi中剪切板的使用[4]:如果把子控件一起复制

如果连同子控件一起复制到剪切板, 需要定义一个新类型. 譬如在一个 TPanel 中包含一个 TEdit; 在复制 TPanel 时, 若要连同 TEdit 一起复制, 需要重新从 TPanel 中继承出一个类来(譬如是 TMyPanel), 把 TEdit 包含在新的类中. 运行效果图: TMyPanel 类的单元: unit MyPanel; interface uses Classes, StdCtrls, ExtCtrls; type TMyPanel = class(TPanel) E

js复制到剪切板的实例方法

这篇文章介绍了复制到剪切板js代码,有需要的朋友可以参考需要   复制代码 代码如下: <script type="text/javascript" language="javascript"> //复制到剪切板js代码 function copyToClipBoard(s) { //alert(s); if (window.clipboardData) { window.clipboardData.setData("Text", s

JS将制定内容复制到剪切板的方法

 这篇文章主要介绍了JS将制定内容复制到剪切板的方法,需要的朋友可以参考下  代码如下: function copyText() {    //复制内容  var txt = document.getElementById("table2").rows[1].cells[0].innerHTML;    //去除空格  txt = txt.replace(/ /," ");    //去除换行  txt = txt.replace(/<BR><BR

zeroclipboardjs 复制到剪切板的flash代码

zeroclipboard网页特效 复制到剪切板的flash代码 //这步很重要,设定flash文件引用路径. zeroclipboard.setmoviepath('http://www.111cn.net/scripts/zeroclipboard/zeroclipboard.swf'); //创建zeroclipboard对象 clip = new zeroclipboard.client(); clip.sethandcursor(true); //加载事件,在mouseo教程ver事件

java 复制图片到剪切板

Java 如何复制图片到剪切板呢? 下面是我做的一个软件: 项目源代码见附件  这里面就有"复制图片到剪切板"功能.核心方法如下: Java代码   /***       * 复制图片到剪切板       * @param image       */       public static void setClipboardImage(JFrame frame, final Image image) {           Transferable trans = new Trans

关于jquery.zclip.js 插件 复制剪切板的应用

问题描述 关于jquery.zclip.js 插件 复制剪切板的应用 3C 我在网上下了一个jquery.zclip.js包 放在我的项目中 在绑定zclip 按钮直接就死掉了 点击无效 解决方案 jquery导入没有,swf路径是否配置正确jquery.zclip.js API