Что нового

Запрет нажатия ПКМ, копирование текста, выделение текста.

vanekzver

Новичок
Сообщения
91
Репутация
2
Как запретить в программе нажимать правую кнопку мыши, копировать текст, выделять текст. Есть только сама страница.

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$iGUI_Width = 800
$iGUI_Height = 400

$Form1 = GUICreate("Form1", $iGUI_Width, $iGUI_Height)
$Obj1 = ObjCreate("Shell.Explorer.2")
GUICtrlCreateObj($Obj1, 0, 0, 800, 454)
GUISetState(@SW_SHOW)
$Obj1.Navigate("http://ya.ru")

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd
 

Moonsin

Новичок
Сообщения
17
Репутация
2
Shell.Explorer - тот же самый IE.

В голову пришло 2 варианта:
1. Внедрение JavaScript внутрь загружаемой страницы
Источник

Код:
<!-- Начнём с самого простого скрипта, ЗАЩИТА ОТ КЭШИРОВАНИЯ: -->
<meta http-equiv="pragma" content="no-cache"/>
 
<!-- Следующий скрипт - ЗАЩИТА ОТ КОПИРОВАНИИ ИНФОРМАЦИИ -->
<script language=JavaScript>
function notcopy(){
alert("Извините, но с этой страницы нельзя ничего копировать!")
return false
}
</script>
 
<!-- Ну этот код очень полезный - Защита от перетаскивания и выделения текста. -->
<script language=javaScript>document.onselectstart=new Function("return false");
document.ondragstart=new Function("return false");</script>
 
<!-- НУ И ПОСЛЕДНИЙ СКРИПТ - ЗАЩИТА ОТ ПЕЧАТИ -->
<script type="text/javascript">
function atlpdp1()
{
for (wi=0; wi<document.all.length; wi++)
{
if (document.all[wi].style.visibility != 'hidden')
{
document.all[wi].style.visibility = 'hidden';
document.all[wi].id = 'atlpdpst'
}
}
}
 
function atlpdp2()
{
for (wi=0; wi<document.all.length; wi++)
{
if (document.all[wi].id == 'atlpdpst')
document.all[wi].style.visibility = ''
}
}
 
window.onbeforeprint = atlpdp1;
window.onafterprint = atlpdp2;
</script>
 
 
/* Выключение Правой кнопки мыши */
<script>
<!--
var message="";
function clickIE() {if (document.all) {(message);return false;}}
function clickNS(e) {if
(document.layers||(document.getElementById&&!document.all)) {
if (e.which==2) {
(message);
return false;}}}
if (document.layers) {
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=clickNS;
}else{
document.onmouseup=clickNS;
document.oncontextmenu=clickIE;
}
document.oncontextmenu=new Function("return false")
-->
</script>

2. Работа с объектами IE.
Источник

Internet Explorer

Данный браузер дает нам две возможности:

[list type=decimal]
[*] Для элементов устанавливаем атрибут unselectable со значением on. Но тут есть один нюанс: текст блока с таким атрибутом нельзя выделить (то есть нельзя начать выделение с данного элемента, и клик по такому элементу не будет снимать выделение с текста, если такой выделен), но если он содержит другие элементы (к примеру "безобидные" SPAN, B и т.д.) то текст в них выделить можно. К тому же если выделение текста начато с блока без такого атрибута, то текст внутри блока с атрибутом unselectable так же будет выделен. В такой ситуации решение одно - ставить всем (!) элементам данный атрибут, что неудобно и не практично.
[*]Перехват события selectstart. Другими словами добавив элементу onselectstart="return false" (к примеру к BODY) запрещает выделение текста внутри него. Опять же нюанс: если начать выделять текст за пределами такого блока, то текст внутри него выделяется без проблем.
[/list]
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Ну это решение по средству Js в самой страницу, а можно как-нибудь сделать жто через исходник? , Но все равно мне помогло.
 

Moonsin

Новичок
Сообщения
17
Репутация
2
Я думаю маловероятно, т.к. работаем с объектом IE. Работу с ним я описал выше. AutoIT-у все равно, что происходит внутри объекта.
 
Верх