如上图所示,我做了一个winform,能根据需要生成符合编号要求的随机数。
由于有多处需要这样操作,为了提高效率,我想在点击“插入”按钮时,直接把这个随机数复制到 另一个软件的“编号”等文本框里。
请大家指点一下我该怎么编这个“插入”按钮的代码?

解决方案 »

  1.   

    两个软件,用SendMessage API或者模拟按键。
    一个软件的两个窗体可以直接传值。比如用委托或者构造函数+属性。
      

  2.   

    是同一个工程吗?如果是同一个工程的话可以在form1中写一个公共方法,在点击插入按钮的时候,调用公共方法,写入值
      

  3.   

    form提供一个API返回你随机生成的数
    form1调用form的API取值
    form1要监控着form什么时候点击了插入按钮、同时调用API取值
      

  4.   

    补充说明一下:
    1、这是两个不同的软件。
        其中form软件是咱自己编写的,想怎么写都行;
        但form1这个不是咱自己编写的软件,也没有源程序,做不了任何修改。2、这种情况下,4楼的办法就不行了,因为form1这个软件咱修改不了。1楼的模拟按键办法可行,能否具体说明一下?或者给个DEMO学习一下?我也去找找模拟按键的资料,期待各位高手继续指点啊。
      

  5.   


    建议去查下win32的api手册。
      

  6.   

    查了一下,由于form软件可以自己编写,所以用代码复制进剪贴板或者用模拟按键复制进剪贴板都容易实现。
    类似下面的组合按键,这是我参考的代码。        /// <summary>
            /// 键盘事件
            /// </summary>
            /// <param name="bvk"></param>
            /// <param name="bScan"></param>
            /// <param name="dwFlags"> 0 为按下,2为释放</param>
            /// <param name="dwExtraInfo">一般情况下设成为 0</param>
            [DllImport("user32.dll")]
            public extern static void keybd_event(byte bvk, byte bScan, int dwFlags, int dwExtraInfo);
            //调用
             keybd_event((byte)Keys.LWin, 0, 0, 0); //按下LWIN
             keybd_event((byte)Keys.R, 0, 0, 0); //按下R
             keybd_event((byte)Keys.LWin, 0, 2, 0);  //释放LWIN
             keybd_event((byte)Keys.R, 0, 2, 0);        //释放R现在问题出在粘贴时的定位问题了。由于form1这个软件不是自己编写的软件,开启位置因屏幕大小而不同。所以在粘贴时,不知该如何定位它的文本框和粘贴操作了?请高手指点一下。
      

  7.   

    /// <summary>
        /// 向指定窗口发送字符串
        /// </summary>
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, string lParam);
    /// <summary>
        /// 查找指定窗口句柄
        /// </summary>
        /// <param name="lpClassName">窗口类名</param>
        /// <param name="lpWindowName">窗口标题</param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        /// <summary>
        /// 查找子窗口句柄
        /// </summary>
        /// <param name="hwndParent">要查找子窗口的父窗口句柄</param>
        /// <param name="hwndChildAfter">上一个子窗口句柄</param>
        /// <param name="lpszClass">子窗口类名</param>
        /// <param name="lpszWindow">子窗口标题</param>
        /// <returns></returns> 
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);先用FindWindow找到父窗口句柄,IntPtr parentWindow= FindWindow();
    再找文本框句柄IntPtr userNameHwnd=FindWindowEx(parentWindow,IntPtr.Zero,"Edit", "");"Edit"为文本框的类名
    发送内容
    const int WM_SETTEXT = 0x000C;//发送文本
    SendMessage(userNameHwnd, WM_SETTEXT, IntPtr.Zero, qq);窗口类名用Spy++获取
      

  8.   

    附一下我参考的模拟按键文章吧,以供有共同需求的朋友们一起学习。
    C#模拟按键  
    http://blog.csdn.net/zhxiaoyu1990/article/details/5840612
    http://bbs.csdn.net/topics/390154073
    http://blog.csdn.net/menglingjun/article/details/1789788
      

  9.   

    原来Spy++是vs自带的工具正在学习如何使用中……