Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Кнопка вызова "Свойства - Безопасность" объекта под курсором
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Mon Aug 09, 2010 05:55    Post subject: Кнопка вызова "Свойства - Безопасность" объекта под курсором Reply with quote

Здравствуйте, хотелось бы кнопочку по вызову диалога "Свойства" объекта под курсором и что бы сразу открывалась закладка "Безопасность".

Затем я совмещу эту кнопку с командой cm_EditPersmissionInfo\cm_EditPermissionInfo, что бы на Win2000\XP у нас выполнялась эта команда, а на Win выше открывалась вкладка "Безопасность"

Есть идеи как сделать эту кнопку?

Исправлена опечатка - безопастность.
Моторокер.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Mon Aug 09, 2010 10:04    Post subject: Reply with quote

HA3APET
Идея одна — просить Гислера, чтобы на ОС выше XP по нужной NTFS-команде сразу выполнялось открытие именно того, что позволяет система. Чтобы соответствующая группа cm-команд начиная с Висты опять какую-то пользу приносила. Альтернативы, ИМХО, слишком громоздки и, по большому счёту, могут быть интересны только для сборок.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Mon Aug 09, 2010 10:51    Post subject: Reply with quote

Мысль хорошая. Собственно, вот.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Mon Aug 09, 2010 11:12    Post subject: Reply with quote

MVV
OK. Только лучше было дать предложение по всем трём командам этой группы: cm_EditPermissionInfo, cm_EditAuditInfo и cm_EditOwnerInfo.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Mon Aug 09, 2010 13:25    Post subject: Reply with quote

Добавил.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Mon Aug 09, 2010 19:48    Post subject: Reply with quote

ghisler(Author) wrote:
To my knowledge, there is no function to activate the correct tab automatically.

Видимо я захотел невозможного.
Может наши гуру по скриптам смогут это осуществить...

Есть reg-файл добавляющий в контекстное меню объектов команду, которая делает Владельцем текущего пользователя.
Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\runas]
@="Take Ownership"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="Take Ownership"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"

Возможно ли сделать кнопку с такой же функцией для выделенного под курсором объекта? Это и будет наша замена для cm_EditOwnerInfo


Last edited by HA3APET on Mon Aug 09, 2010 20:38; edited 1 time in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Mon Aug 09, 2010 20:29    Post subject: Reply with quote

Кстати, Гислер не вполне прав. Точнее, прав он, например, в том смысле, что для разных объектов вкладка "Безопасность" может занимать разное место в общем ряду, а при определённых системных настройках — вовсе отсутствовать. Однако же при запуске в Висте/7 одной из трёх NTFS-команд лучше, если даже она просто откроет системное окно свойств на основной вкладке, чем не будет делать ничего.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Mon Aug 09, 2010 20:58    Post subject: Reply with quote

HA3APET, позаменяй "%1" на %P%N - и будет работать.

Code:
cmd.exe /c takeown /f %P%N && icacls %P%N /grant administrators:F
Code:
cmd.exe /c takeown /f %P%N /r /d y && icacls %P%N /grant administrators:F /t


Разумеется, если у тебя есть утилиты/команды takeown и icacls.

Уточню, эти команды делают владельцем не текущего пользователя, а группу администраторов.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Tue Aug 10, 2010 13:36    Post subject: Reply with quote

HA3APET
В принципе Гислер прав, нет никакой возможности однозначно определить расположение нужной вкладки на разных языках.
Однако, если остановиться на каком-нибудь одном языке, можно пройти по всем вкладкам, получить их заголовки и перейти на нужную.

Скрипт ниже (разумеется, Autoit) это и делает для русского языка. Довольно развесистый, что связано со сложностью получения заголовка таба в другом процессе. Требует модуль Memory.au3, который входит в стандартный дистрибутив Autoit.

При запуске в Vista/7 открывает диалог свойств и переходит на нужную закладку, в других ОС - вызывает стандарную функцию тотала.
Code:

#include <Memory.au3>

Global $hWnd = _TCHGetActiveInstance()

Global Const $cm_Properties=1003
Global Const $cm_EditPermissionInfo=2200
Global Const $TC_SENDMESSAGE = 0x400 + 51
Global Const $TCM_FIRST = 0x1300
Global Const $TCM_GETITEMW = ($TCM_FIRST + 60)
Global Const $TCM_GETITEMCOUNT = ($TCM_FIRST + 4)
Global Const $TCIF_TEXT = 0x1

If Not ((@OSVersion = "WIN_7") Or (@OSVersion = "WIN_VISTA")) Then
    __TCHSendMessage($hWnd, $TC_SENDMESSAGE, $cm_EditPermissionInfo)
    Exit
EndIf

__TCHSendMessage($hWnd, $TC_SENDMESSAGE, $cm_Properties)

$WinWnd = WinWait("Свойства:", "", 5)
$TabWnd = ControlGetHandle($WinWnd, "", "SysTabControl321")

$nCount = __TCHSendMessage($TabWnd, $TCM_GETITEMCOUNT, 0, 0)
For $i = 0 To $nCount-1
    $sText = _TabGetItemText($TabWnd, $i)
    If $sText = "Безопасность" Then
        For $j =  0 To $i - 1
            ControlCommand($WinWnd, "", $TabWnd, "TabRight", "")
        Next
        Exit
    EndIf
Next

; Вспомогательные функции

Func __TCHSendMessage($hWnd, $nMsg, $wParam = 0, $lParam = 0)
    Local $aResult = DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $nMsg, "wparam", $wParam, "lparam", $lParam)
   If @error Then Return SetError(@error, @extended, "")
   Return $aResult[0]
EndFunc
 
Func _TCHGetActiveInstance()
    Local $aList = WinList("[CLASS:TTOTAL_CMD]")
    For $i = 1 To $aList[0][0]
        If WinActive($aList[$i][1]) Then Return $aList[$i][1]
    Next
    Return 0
EndFunc

Func _TabGetItemText($hWnd, $iIndex)
    Local $iBuffer = 1024, $iMaxPtrSize = 8
    Local $tItem = DllStructCreate("uint Mask;dword State;dword StateMask;ptr Text;int TextMax;int Image;lparam Param")
    Local $pItem = DllStructGetPtr($tItem)
    Local $iItem = DllStructGetSize($tItem)

    DllStructSetData($tItem, "Mask", $TCIF_TEXT)
    DllStructSetData($tItem, "TextMax", $iBuffer)

    Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
    Local $pBuffer = DllStructGetPtr($tBuffer)

    Local $tMemMap
    Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer * 2 + $iMaxPtrSize, $tMemMap)
    Local $pText = $pMemory + $iItem + $iMaxPtrSize

    DllStructSetData($tItem, "Text", $pText)
   
    _MemWrite($tMemMap, $pItem, $pMemory, $iItem)
   
    Local $iRet = __TCHSendMessage($hWnd, $TCM_GETITEMW, $iIndex, $pMemory)

    _MemRead($tMemMap, $pText, $pBuffer, $iBuffer)
    _MemFree($tMemMap)
    Return DllStructGetData($tBuffer, "Text")
EndFunc
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Wed Aug 11, 2010 21:56    Post subject: Reply with quote

Loopback
Ещё проблема в том, что некоторые программы вносят свою вкладку в свойства.
Спасибо за скрипт, буду пробовать.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Thu Aug 12, 2010 11:03    Post subject: Reply with quote

HA3APET wrote:
Ещё проблема в том, что некоторые программы вносят свою вкладку в свойства.

Скрипт это учитывает, поскольку определяет закладку по заголовку.
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Thu Aug 12, 2010 14:27    Post subject: Reply with quote

Loopback
Спасибо, всё работает. Не понял фразу - "Требует модуль Memory.au3"
Я переконвертировал ваш скрипт в exe, жаль только очень большой по размеру получился 600Kb в несжатом виде.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Aug 12, 2010 14:31    Post subject: Reply with quote

HA3APET wrote:
Не понял фразу - "Требует модуль Memory.au3"
Этот файл должен быть в папке include для правильной работы скрипта. >>
Loopback wrote:
Code:
#include <Memory.au3>
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Thu Aug 12, 2010 14:55    Post subject: Reply with quote

Flasher
А папка где должна быть тогда?
У меня всё чётко работает... просто сделал из приведённого выше скрипта exe-файл.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Aug 12, 2010 15:04    Post subject: Reply with quote

HA3APET wrote:
А папка где должна быть тогда?
<PATH>\Autoit\Include\Memory.au3
HA3APET wrote:
просто сделал из приведённого выше скрипта exe-файл
Ну да, и пожаловался на размер. Wink Любая конвертация в exe-шник(хоть из vbs, хоть из cmd/bat, и из au3 в данном случае) получает размер конечного файла в десятки и сотни раз больший в сравнении с исходным.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group