public void test()
        {
            const int WM_KEYDOWN = 0x100;
            const int WM_KEYUP = 0x101;
            //const int WM_SETTEXT = 0x000C;
            IntPtr VK_A = new IntPtr(65);
            IntPtr hwnd = FindWindow(null, "无标题.txt - 记事本");
            IntPtr htextbox = FindWindowEx(hwnd, IntPtr.Zero, "EDIT", null);
            IntPtr htextbox2 = FindWindowEx(hwnd, htextbox, "EDIT", null);
            PostMessage(htextbox, WM_KEYDOWN, VK_A, "0");
            Thread.Sleep(200);
            PostMessage(htextbox, WM_KEYUP, VK_A, "0");
        }一直往记事本下‘a’停不下来,貌似WM_KEYUP没效果;然后我把 PostMessage(htextbox, WM_KEYDOWN, VK_A, "0");注释掉了,
竟然产生的效果也是不停的记事本写‘a’!
纠结了,请高手指教!

解决方案 »

  1.   

    你用的是什么操作系统啊?另外如果只是想往记事本里写字母,用WM_CHAR就可以了
      

  2.   

    没有用过你自己 GOOGLE 下 WM API 就完事了被。
      

  3.   

    private static void MySendMessage ()
    {
    int WM_KEYDOWN = 0x100;
    int WM_KEYUP = 0x101;
    int WM_CHAR = 0x0102;
    IntPtr VK_F = new IntPtr(70);
    uint vk_f =70;
    IntPtr Hwnd = (IntPtr)0x6107AA;
    int hwnd= 0x6107AA;
    //SendMessage (Hwnd, WM_CHAR, VK_F, IntPtr.Zero);
    PostMessage (hwnd, WM_KEYDOWN, vk_f, 0);
    Thread.Sleep (100);
    PostMessage (hwnd, WM_KEYUP, vk_f, 0);
    }测试没有你说的情况啊。。不过会输入两次
      

  4.   

    又测试了一下,只发送WM_KEYDOWN就一点问题都没有了。但我的问题是 IntPtr hwnd = FindWindow(null, "无标题.txt - 记事本"); 这句代码无法获取到窗体句柄。windows不开源这点真的是很郁闷,各种莫名其妙的问题只能靠猜,哎