Как я предотвращаю экран печати

Похоже, что вы смешиваете эталонную реализацию JSF Mojarra и реализацию Apache JSF MyFaces вместе. Я вижу классы обоих в вашей трассировке стека. (org.apache.myfaces и com.sun.faces). Я предполагаю, что WebLogic предоставляет реализацию Mojarra, поэтому вам не следует добавлять JAR-файлы, связанные с JSF, в ваше веб-приложение.

Если ваш инструмент сборки Maven, удалите артефакт myfaces-impl и пометьте myfaces-api с помощью <scope>provided</scope> или замените его на

<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>javax.faces-api</artifactId>
    <version>YOUR_WEB_LOGICS_JSF_API_VERSION_HERE</version>
    <scope>provided</scope>
</dependency>
10
задан 15 January 2009 в 19:25
поделиться

9 ответов

Вы не можете.

Лучшее, которое можно сделать, представить к аппаратно ускоренному устройству на наложении, подобном тому, что раньше делали видеоплееры. В основном Вы красите свое все окно синим, и представляете Вашу графику на видеокарту, и внутренне видеокарта заменит синий графикой. Оборотная сторона к этому - Вы, должны бросить использовать средства управления winforms, и я не знаю ни о каком способе сделать это с.NET легко. Я думаю, используете ли Вы DirectShow.NET, один из их образцов помещает Вашу собственную графику в поток.

Даже после выполнения, всех из которых, все еще возможно получить снимок экрана. Просто сделайте снимок экрана с цифровым фотоаппаратом.

23
ответ дан 3 December 2019 в 14:18
поделиться

Ну, Вы могли попытаться получить кнопку, но я не уверен, как хорошо, который будет работать.

Одна вещь, которая всегда раздражала меня, состояла в том, что каждый раз, когда я проигрывал фильм, он никогда не будет делать снимки экрана его. Если бы можно представить через отдельный контекст, он сделал бы это действительно раздражающим, чтобы сделать снимок его. Возможно, можно ли отправить экранный вывод через что-то как этот?

0
ответ дан 3 December 2019 в 14:18
поделиться

Это действительно не отвечает на вопросы, но имеет в виду, что там существует инструменты для получения экрана, и что простая камера повреждает все.

Я имею в виду хорошо, что Вы "имеете к", но я был бы (но я молод и все еще студент, таким образом, я не знаю много о том, что может быть сказано), отвечают, что это просто глупо.

1
ответ дан 3 December 2019 в 14:18
поделиться

FWIW, это возможно. Вот некоторый код:

Это было бы dll, что Вы создаете, затем называете метод HookKeyboard из своего приложения. Я протестировал его, и это работает. Предоставленный, если кто-то делает снимок с камерой, это не может помочь, но, высказанное мнение. NYAH!

    namespace KeyboardHook
    {
        public class Hooker
        {

            [StructLayout(LayoutKind.Sequential)]
            public struct KBDLLHOOKSTRUCT
            {
                public int vkCode;
                public int scanCode;
                public int flags;
                public int time

;
            public int extraInfo;
        }

        public delegate int HookProc(int nCode, int wParam, IntPtr ptrKBDLLHOOKSTRUCT);


        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        public static extern IntPtr SetWindowsHookEx(int idHook, HookProc callBack, IntPtr hMod, int threadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        public static extern int CallNextHookEx(IntPtr hhk, int nCode, int wParam, IntPtr lParam);

        private static IntPtr kbh_Handle;
        private static HookProc kbh_HookProc;

        private const int VK_SNAPSHOT = 0x2C;
        private const int WM_KEYDOWN = 0x0100;
        private const int WM_SYSKEYDOWN = 0x0104;
        private const int WH_KEYBOARD_LL = 13;

        private static int LowLevelKeyboardProc(int nCode, int wParam, IntPtr lParam)
        {
            if (nCode < 0)
            {
                CallNextHookEx(kbh_Handle, nCode, wParam, lParam);
                return 0;
            }

            if (wParam == WM_KEYDOWN)
            {
                IntPtr kbdll = lParam;
                KBDLLHOOKSTRUCT kbdllstruct = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(kbdll, typeof(KBDLLHOOKSTRUCT));

                if (kbdllstruct.vkCode == VK_SNAPSHOT)
                    return -1;

            }

            return CallNextHookEx(kbh_Handle, nCode, wParam, lParam);
        }

        public static void HookKeyboard()
        {
            try
            {
                kbh_HookProc = LowLevelKeyboardProc;

                kbh_Handle = SetWindowsHookEx(WH_KEYBOARD_LL, kbh_HookProc, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);

                if (kbh_Handle != IntPtr.Zero)
                    System.Diagnostics.Debug.WriteLine(String.Format("It worked! HookHandle: {0}", kbh_Handle));
                else
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(String.Format("ERROR: {0}", ex.Message));
            }
        }
    }
}
1
ответ дан 3 December 2019 в 14:18
поделиться

Вы могли изучить то, что делают проигрыватели фильмов. Я полагаю, что они представляют непосредственно на аппаратную поверхность (через DirectX). Я подозреваю, что необходимо было бы сделать это.

1
ответ дан 3 December 2019 в 14:18
поделиться

У Вас будет два случая здесь, что необходимо волноваться о. Один, когда Ваше окно/приложение фокусируется, другой, когда оно не фокусируется.

Когда это не фокусируется, нет много, можно сделать, т.е. если пользователь нажимает прочь приложения и на рабочий стол, ключи не отправляются в приложение, таким образом, Вы никогда не будете видеть их. В этом случае можно минимизировать к лотку, когда приложение теряет фокус (или, возможно, поместите "пустую" панель над формой, чтобы препятствовать тому, чтобы пользователи видели что-либо на нем, которое будет также препятствовать тому, чтобы экран печати был полезен).

В другом случае, когда Вы фокусируетесь, нажатия клавиш получения и исследуете их. Если клавиша Alt снижается, и клавиша Print Screen снижается, сбросьте значение так, чтобы экран печати не происходил. (Задумайтесь о нем, который не может работать. Я должен был бы протестировать его, чтобы быть уверенным.)

1
ответ дан 3 December 2019 в 14:18
поделиться

Отсюда:

A. Windows реализует Print Screen с помощью зарегистрированной горячей клавиши. Windows использует предопределенные горячие клавиши IDHOT_SNAPDESKTOP и IDHOT_SNAPWINDOW для обработки Print Screen. Они соответствуют Print Screen, которая получает весь экран и Экран Alt+Print, который получает только активное окно. Для отключения этих функций, все, что необходимо сделать, зарегистрировать горячие клавиши, который заставляет Windows отправлять приложению сообщение WM_HOTKEY, когда пользователь нажимает любую горячую клавишу. Ваша реализация может проигнорировать сообщение для обхода поведения снимка экрана по умолчанию. Хорошее место, чтобы сделать это находится в Вашем мейнфреймовом классе.

9
ответ дан 3 December 2019 в 14:18
поделиться

Есть приложения, которые могут захватывать экран из приложений OpenGL и DirectX! (в зависимости (используются для записи игровых фильмов) пс. windows aero - это DirectX

http://www.fraps.com/ я думаю, это приложение

0
ответ дан 3 December 2019 в 14:18
поделиться

Обратите внимание на новую технологию - sivizion.com , они полностью предотвращают печать экрана - обойти это невозможно. Если кто-то придумает, как его взломать, напишите, пожалуйста, здесь, я не смог. Думаю, они тоже лицензируют свои технологии, не уверен, зацените.

1
ответ дан 3 December 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: