我运行的时候切到其他窗口。结果一个按下的命令就没有执行。直接跳过了
有其他办法可以不用只执行当前活动窗口吗?

解决方案 »

  1.   

    不是 SendMessage 出问题了,是你找不到那个窗口了。
      

  2.   

    找到了这个窗口了啊。
    我有写
    while (hwndCalc == IntPtr.Zero)
                    {
                        hwndCalc = FindWindow(null, "文件下载");
                    }
    他都走过了
      

  3.   

    把你的问题描述清楚
    SendMessage 的第一个参数就是目标窗口的句柄,不是针对活动窗口
      

  4.   

    private void timer1_Tick(object sender, EventArgs e)
            {
                a++;
                if (a == 2)
                {
                    hwndCalc = FindWindow(null, "文件下载"); //查找计算器的句柄
                    while (hwndCalc == IntPtr.Zero)
                    {
                        hwndCalc = FindWindow(null, "文件下载");
                    }
                    if (hwndCalc != IntPtr.Zero)
                    {
                        hwnd1 = FindWindowEx(hwndCalc, 0, null, "保存(&S)");
                        SetForegroundWindow(hwndCalc);    
                        SendMessage(hwnd1, BM_DOWN, 0, 0);
                        SendMessage(hwnd1, BM_UP, 0, 0);
                        b = 0;
                        timer2.Enabled = true;
                    }
                    timer1.Enabled = false;
                }
            }
    private void timer2_Tick(object sender, EventArgs e)
            {
                b++;
                if (b == 2)
                {
                    if (System.IO.File.Exists("C:\\Documents and Settings\\Administrator\\桌面\\rbxt_esn.sig"))
                        System.IO.File.Delete("C:\\Documents and Settings\\Administrator\\桌面\\rbxt_esn.sig");
                    if (System.IO.File.Exists("C:\\Documents and Settings\\Administrator\\桌面\\rbxt_imei.sig"))
                        System.IO.File.Delete("C:\\Documents and Settings\\Administrator\\桌面\\rbxt_imei.sig");
                    if (System.IO.File.Exists("C:\\Documents and Settings\\Administrator\\桌面\\rbxt_meid.sig"))
                        System.IO.File.Delete("C:\\Documents and Settings\\Administrator\\桌面\\rbxt_meid.sig");
                    hwndCalc = FindWindow(null, "另存为");
                    while (hwndCalc == IntPtr.Zero)
                    {
                        hwndCalc = FindWindow(null, "另存为");
                    }
                    System.Threading.Thread.Sleep(1000);
                    hwndThree = FindWindowEx(hwndCalc, 0, null, "保存(&S)");
                    SendMessage(hwndThree, BM_DOWN, 0, 0);
                    SendMessage(hwndThree, BM_UP, 0, 0);
                    c = 0;
                    timer3.Enabled = true;
                    timer2.Enabled = false;
                }
            }
    我要的是做一个自动下载的东西。
    弹出下载对话框的时候。去点击其他窗体
    就会在
    while (hwndCalc == IntPtr.Zero)
                    {
                        hwndCalc = FindWindow(null, "另存为");
                    }
    这里卡住
      

  5.   


    请看 MSDN,如果 FindWindows 找不到窗体, 它的返回值是 NULL所以你卡在这个循环里面是理所当然的。既然卡在这个循环里面, SendMessage 连执行的机会都没有。。