×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

谢谢!我写了这段code,是从网上抄来的,可是一点都不work,请进来看看。

[DllImport("user32.dll")]
private static extern void keybd_event(int bVk, int bScan, int dwFlags, int dwExtraInfo);
[DllImport("user32.dll")]
private static extern int VkKeyScan(char ch);

private void CopyCommandHandler(Object sender, BizEventArgs e)
{
// Simulating a Ctrl+C keystroke
keybd_event(0x11, 0x9d, 0, 0); // Ctrl Press
keybd_event(VkKeyScan('C'), 0x9e, 0, 0); // 'C' Press
keybd_event(VkKeyScan('C'), 0x9e, 2, 0); // 'C' Release
keybd_event(0x11, 0x9d, 2, 0); // Ctrl Release
}
Report

Replies, comments and Discussions:

  • 工作学习 / 专业技术讨论 / 请问,哪位知道对应ctrl+c事件的windows api是哪一个?我需要调用它进行拷贝,谢谢!!
    • just use keybd_event
      • 谢谢!我写了这段code,是从网上抄来的,可是一点都不work,请进来看看。
        [DllImport("user32.dll")]
        private static extern void keybd_event(int bVk, int bScan, int dwFlags, int dwExtraInfo);
        [DllImport("user32.dll")]
        private static extern int VkKeyScan(char ch);

        private void CopyCommandHandler(Object sender, BizEventArgs e)
        {
        // Simulating a Ctrl+C keystroke
        keybd_event(0x11, 0x9d, 0, 0); // Ctrl Press
        keybd_event(VkKeyScan('C'), 0x9e, 0, 0); // 'C' Press
        keybd_event(VkKeyScan('C'), 0x9e, 2, 0); // 'C' Release
        keybd_event(0x11, 0x9d, 2, 0); // Ctrl Release
        }
        • 这段Code很完美,没有问题,可以工作的,我把它稍微改一下......
          本文发表在 rolia.net 枫下论坛假设你有一个button和一个textbox,实现点击button然后模拟按键Ctrl+C的功能

          using System.Runtime.InteropServices;

          public class Form1 : System.Windows.Forms.Form
          {
          [DllImport("user32.dll")]
          private static extern void keybd_event(int bVk, int bScan, int dwFlags, int dwExtraInfo);

          ..
          ..
          ..

          private void button1_Click(object sender, System.EventArgs e)
          {
          // 0x90 是numLock的键盘代码,模拟点击NumLock,第三个参数0代表按下此键
          keybd_event(0x90,0x45,0,0);
          // 第三个参数2代表放开此键
          keybd_event(0x90,0x45,2,0);

          // 将焦点放在TextBox1上,并且选择里面所有的字符,为底下的^+C做好准备
          this.textBox1.Focus();
          this.textBox1.SelectAll();

          // 0x11为Ctrl键盘代码,0x43为C键键盘代码,分别执行两个键的按下和放开
          keybd_event(0x11,0x45,0,0);
          keybd_event(0x43,0x45,0,0);

          keybd_event(0x43,0x45,2,0);
          keybd_event(0x11,0x45,2,0);
          // 好了,现在textbox1种的字符已经存储在clipboard中了
          }


          这个函数 keybd_event(int bVk, int bScan, int dwFlags, int dwExtraInfo);
          它是一个事件,也就是说每当用户按下^+C的时候会自动地调用这个函数,现在你手工的调用了它,等于跳过了^+C,直接运行。
          有关键盘代码可以参看:
          http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/UserInput/VirtualKeyCodes.asp更多精彩文章及讨论,请光临枫下论坛 rolia.net
          • 大猫,谢谢你。你如果不介意搬到美国来,我可以帮你。我们公司一直都很需要人,前几天我老板还让我推荐呢。