ТС или Проводник является местом запуска скрипта?
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: ТС или Проводник является местом запуска скрипта? Author: goraLocation: Иваново PostPosted: Thu Feb 05, 2015 21:47
    —
Скрипт (VBS) запускается из контекстного меню в Проводнике или ТС. Как из скрипта определить место вызова контекстного меню из которого и был запущен этот скрипт?

#2:  Author: FlasherLocation: Москва PostPosted: Thu Feb 05, 2015 22:55
    —
Контекстные меню как отдельные приложения или как часть интерфейса? Нужна конкретика с примером (способ вызова меню, название пункта, запись в shell и т.д.).

#3:  Author: goraLocation: Иваново PostPosted: Fri Feb 06, 2015 09:27
    —
Flasher wrote:
Нужна конкретика с примером (способ вызова меню, название пункта, запись в shell и т.д.).

1 Запись в контекстном меню создается reg файлом:
Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Test]
@="Тест папки"
"Icon"="\"C:\\Program Files (x86)\\Test\\Test.ico\",0"

[HKEY_CLASSES_ROOT\Directory\shell\Test\command]
@="wscript \"C:\\Program Files (x86)\\Test\\Test.vbs\" \"%1\" /TEST"

В контекстном меню любой папки появится пункт "Тест папки" служащий для запуска скрипта.

2 В папке программы C:\Program Files (x86)\Test лежит скрипт и произвольная иконка:
Code:
If WScript.Arguments.Count < 2 Then WScript.Quit
F = WScript.Arguments.UnNamed.Item(0)
'~~~~~~~
If WScript.Arguments.Named.Exists("TEST") Then
   shell = "???"
   MsgBox "Папка: " & F & vbCr & "Запущено из: " & shell, 48, "Тест"
End If
'~~~~~~~
If WScript.Arguments.Named.Exists("TEST2") Then
' что бы не было вопросов, "зачем два параметра?"
End If
'~~~~~~~
If WScript.Arguments.Named.Exists("TEST3") Then
' что бы не было вопросов, "зачем два параметра?"
End If

3 Нужно, что-бы после запуска в окне скрипта был ответ на вопрос вынесенный в заголовок темы.

#4:  Author: FlasherLocation: Москва PostPosted: Fri Feb 06, 2015 10:25
    —
В общем, не суть. Тут главное то, что само меню встроенное. Поэтому хоть по Enter, хоть по Открыть в комстроке, хоть по Тест на папке - без разницы.
Code:
QL ="winmgmts:\\.\root\cimv2:win32_process.Handle="
With CreateObject("WScript.Shell")
  With GetObject(QL & .Exec("rundll32 kernel32,Sleep").ProcessId)
    Path = GetObject(QL & GetObject(QL & .ParentProcessId)._
    ParentProcessId).ExecutablePath : .Terminate()
  End With
  With .Environment("Process")
    If Path = .Item("COMMANDER_EXE") Then
     MsgBox "Это TC!"
    ElseIf StrComp(Path, .Item("SystemRoot") & "\explorer.exe", 1) = 0 Then
      MsgBox "Это проводник!"
    Else MsgBox "Это что-то другое!"
    End if
  End With : .Run "wmic.exe exit", 0
End With


Last edited by Flasher on Fri Feb 06, 2015 12:47; edited 3 times in total

#5:  Author: goraLocation: Иваново PostPosted: Fri Feb 06, 2015 11:26
    —
Flasher
Спасибо, это работает. А "тормоза" нельзя убрать или как-нибудь уменьшить?

#6:  Author: FlasherLocation: Москва PostPosted: Fri Feb 06, 2015 11:34
    —
gora, исправил.

#7:  Author: goraLocation: Иваново PostPosted: Fri Feb 06, 2015 12:45
    —
Flasher
На ХР не работает, выдает:
Code:
Сценарий:   C:\Program Files\Test\Test.vbs
Строка:   54
Символ:   2
Ошибка:   Недопустимый дескриптор окна.
Код:   80070578
Источник:    (null)

Строка 54:
Code:
   Exec.Terminate

#8:  Author: FlasherLocation: Москва PostPosted: Fri Feb 06, 2015 12:47
    —
Дык сейчас другой уже вариант.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group