View previous topic :: View next topic |
Author |
Message |
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Mon Aug 09, 2010 05:55 Post subject: Кнопка вызова "Свойства - Безопасность" объекта под курсором |
|
|
Здравствуйте, хотелось бы кнопочку по вызову диалога "Свойства" объекта под курсором и что бы сразу открывалась закладка "Безопасность".
Затем я совмещу эту кнопку с командой cm_EditPersmissionInfo\cm_EditPermissionInfo, что бы на Win2000\XP у нас выполнялась эта команда, а на Win выше открывалась вкладка "Безопасность"
Есть идеи как сделать эту кнопку?
Исправлена опечатка - безопастность.
Моторокер. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Mon Aug 09, 2010 10:04 Post subject: |
|
|
HA3APET
Идея одна — просить Гислера, чтобы на ОС выше XP по нужной NTFS-команде сразу выполнялось открытие именно того, что позволяет система. Чтобы соответствующая группа cm-команд начиная с Висты опять какую-то пользу приносила. Альтернативы, ИМХО, слишком громоздки и, по большому счёту, могут быть интересны только для сборок. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Mon Aug 09, 2010 11:12 Post subject: |
|
|
MVV
OK. Только лучше было дать предложение по всем трём командам этой группы: cm_EditPermissionInfo, cm_EditAuditInfo и cm_EditOwnerInfo. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Mon Aug 09, 2010 19:48 Post subject: |
|
|
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 |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Mon Aug 09, 2010 20:29 Post subject: |
|
|
Кстати, Гислер не вполне прав. Точнее, прав он, например, в том смысле, что для разных объектов вкладка "Безопасность" может занимать разное место в общем ряду, а при определённых системных настройках — вовсе отсутствовать. Однако же при запуске в Висте/7 одной из трёх NTFS-команд лучше, если даже она просто откроет системное окно свойств на основной вкладке, чем не будет делать ничего. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Tue Aug 10, 2010 13:36 Post subject: |
|
|
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 |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Wed Aug 11, 2010 21:56 Post subject: |
|
|
Loopback
Ещё проблема в том, что некоторые программы вносят свою вкладку в свойства.
Спасибо за скрипт, буду пробовать. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Thu Aug 12, 2010 11:03 Post subject: |
|
|
HA3APET wrote: | Ещё проблема в том, что некоторые программы вносят свою вкладку в свойства. |
Скрипт это учитывает, поскольку определяет закладку по заголовку. |
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Thu Aug 12, 2010 14:27 Post subject: |
|
|
Loopback
Спасибо, всё работает. Не понял фразу - "Требует модуль Memory.au3"
Я переконвертировал ваш скрипт в exe, жаль только очень большой по размеру получился 600Kb в несжатом виде. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Aug 12, 2010 14:31 Post subject: |
|
|
HA3APET wrote: | Не понял фразу - "Требует модуль Memory.au3" | Этот файл должен быть в папке include для правильной работы скрипта. >> Loopback wrote: | Code: | #include <Memory.au3> |
|
|
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Thu Aug 12, 2010 14:55 Post subject: |
|
|
Flasher
А папка где должна быть тогда?
У меня всё чётко работает... просто сделал из приведённого выше скрипта exe-файл. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Aug 12, 2010 15:04 Post subject: |
|
|
HA3APET wrote: | А папка где должна быть тогда? | <PATH>\Autoit\Include\Memory.au3
HA3APET wrote: | просто сделал из приведённого выше скрипта exe-файл | Ну да, и пожаловался на размер. Любая конвертация в exe-шник(хоть из vbs, хоть из cmd/bat, и из au3 в данном случае) получает размер конечного файла в десятки и сотни раз больший в сравнении с исходным. |
|
Back to top |
|
|
|
|
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
|