解决方案 »

  1.   

    GetForegroundWindow 还有可能是null
      

  2.   

    用SPY++看下桌面的句柄是多少。
      

  3.   

    GetForegroundWindow 只是用于非桌面的窗体。
      

  4.   

    GetClass()或是GetWindowThreadProcessId() 两个任选
      

  5.   

    看看这里的代码有用不http://www.vbforums.com/showthread.php?658305-C-NET-detect-if-user-is-on-the-desktop
      

  6.   


     x.MainWindowHandle ==  proc.Length一直为false,所以总是为桌面(任意窗体)
      

  7.   

    貌似解决了 IntPtr cabinetWClassIntPtr = new IntPtr(hwnd);
                    string cabinetWClassName = GetFormClassName(cabinetWClassIntPtr);
                    string cabinetWClassTitle = GetFormTitle(cabinetWClassIntPtr);
     if (cabinetWClassName.Equals("Progman", StringComparison.OrdinalIgnoreCase) && cabinetWClassTitle.Equals("Program Manager", StringComparison.OrdinalIgnoreCase))
    {
    Console.write("桌面");
    }