FindWindow возвращает 0 в Windows 7

У меня есть программа на C#. Программа создает процесс Adobe Reader и печатает PDF документ. Он хорошо работает в Windows XP, но не работает в Windows 7. Я проверил, что AcroRd32.exe правильный путь в Windows 7. FindWindow Метод всегда возвращает 0 в Windows 7.

    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    [DllImport("User32.dll")]
    public static extern IntPtr FindWindow(string ClassN, string WindN);

    [DllImport("user32.dll", EntryPoint = "SendMessageA")]
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    [DllImport("shell32.dll ")]
    public static extern int ShellExecute(IntPtr hwnd, string lpszOp, string lpszFile, string lpszParams, string lpszDir, int FsShowCmd);

    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public static extern uint WinExec(string lpCmdLine, uint uCmdShow);

    public bool isAcrobatExsists(string acrobatLoc)
    {
        IntPtr currentHandle = getWindowHandlerByClass("AcrobatSDIWindow");
        if (currentHandle != IntPtr.Zero)
        {
            return true;
        }
        return false;
    }

    private static IntPtr getWindowHandlerByClass(string className)
    {
        IntPtr currentHandle = FindWindow(className, null);
        return currentHandle;
    }

    private static IntPtr getWindowHandlerByName(string appName)
    {
        IntPtr currentHandle = FindWindow(null, appName);
        return currentHandle;
    }

1 ответ

Findwindow может сильно зависеть от того, как вы запускаете приложение. Похоже, вы запускаете его как запланированное задание или службу Windows. Они запускаются в сеансе, отличном от того, в котором находится окно рабочего стола пользователя, поэтому он не видит и не может взаимодействовать с ними.

Они внесли это изменение в Windows Vista, поэтому приложения, которые делают это, будут отлично работать в XP, но не будут работать в Windows Vista или более поздней версии.

Вот ссылка из msdn об этом: Совместимость приложений: изоляция сеанса 0

Другие вопросы по тегам