:: Visual Foxpro, Foxpro for DOS
Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
Казалось бы чего проще, но из командной строки CMD работает, а из приложения VFP нет.
sa = CreateObject("WScript.shell")
sa.Exec('"%WinDir%\System32\dsquery.exe"'+' user -name '+ALLT(comp.user)+' > \\Server-ivc\Projects\IPStat\1.txt')



Исправлено 2 раз(а). Последнее : FoxShip, 18.01.19 10:31
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
FoxShip
Казалось бы чего проще, но из командной строки CMD работает, а из приложения VFP нет.
sa = CreateObject("WScript.shell")
sa.Exec('"%WinDir%\System32\dsquery.exe"'+' user -name '+ALLT(comp.user)+' > \\Server-ivc\Projects\IPStat\1.txt')

Может дело в %WinDir% - если попробовать вынести его за кавычки.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
Сработало только вот так!
sa = CreateObject("WScript.shell")
sa.Run('f:\1.cmd',0)

Может не нравится > \\Server-ivc\Projects\IPStat\1.txt' в предыдущем варианте ?
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
Не прокатило.
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Crispy
FoxShip
Казалось бы чего проще, но из командной строки CMD работает, а из приложения VFP нет.
sa = CreateObject("WScript.shell")
sa.Exec('"%WinDir%\System32\dsquery.exe"'+' user -name '+ALLT(comp.user)+' > \\Server-ivc\Projects\IPStat\1.txt')

Может дело в %WinDir% - если попробовать вынести его за кавычки.
Не прокатит.
Значение %WinDir% надо получать через getenv('windir') и формировать полную строку пути.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
Лучший вариант кажется вот этот. Собственно мне и нужен был вывод на консоль без чтения с диска промежуточного файла.
sa = CreateObject("Wscript.Shell")
x = sa.Exec('%WinDir%\System32\dsquery.exe user -name '+ALLT(comp.user))
ee=x.StdOut
wait ee.ReadAll wind

Только как подавить черный экран. В методе Run это делается просто. А в Exec что то не получается.



Исправлено 2 раз(а). Последнее : FoxShip, 18.01.19 11:44
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
FoxShip
Только как подавить черный экран. В методе Run это делается просто. А в Exec что то не получается.

Ну дык делай в Run, чем не нравится?
В ShellExecute кстати тоже есть параметр скрытия.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
Crispy
FoxShip
Только как подавить черный экран. В методе Run это делается просто. А в Exec что то не получается.

Ну дык делай в Run, чем не нравится?
В ShellExecute кстати тоже есть параметр скрытия.

1.Run почему то не создает объект.
2.Какой параметр скрытия ShellExecute если не секрет?



Исправлено 1 раз(а). Последнее : FoxShip, 18.01.19 13:40
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
FoxShip
Лучший вариант кажется вот этот. Собственно мне и нужен был вывод на консоль без чтения с диска промежуточного файла.
sa = CreateObject("Wscript.Shell")
x = sa.Exec('%WinDir%\System32\dsquery.exe user -name '+ALLT(comp.user))
ee=x.StdOut
wait ee.ReadAll wind

Только как подавить черный экран. В методе Run это делается просто. А в Exec что то не получается.

Беда подкралась незаметно. При попытке передать вывод консоли в переменную она теряется.
dn_name = allt(ee.ReadAll)
messagebox(dn_name)

messagebox(dn_name) ничего не выдает !
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
FoxShip
Какой параметр скрытия ShellExecute если не секрет?

Когда-то повыбирал для себя справку для разных методов загрузки.
Может пригодится еще когда кому:
*!* API функция Windows - ShellExecute
*!* Синтаксис:
DECLARE Long ShellExecute in Shell32 ;
Long hWnd, ; && хэндл родительского окна, обычно можно = 0
String lpOperation, ; && действия с файлом = "open", "print", "explore", если '', по умолчанию "open"
String lpFile, ; && имя файла - можно с путем доступа
String lpParameters, ; && доп.параметры запуска - только для исполняемых файлов
String lpDirectory, ; && директория, относительно которой искать файл
Integer ShowCmd && режим открытия приложения
*!* Режимы открытия приложения:
*!* 0 - скрытое окно.
*!* 1 - нормальное окно.
*!* 2 - минимизированное окно.
*!* 3 - максимизированное окно.
*!* 4 - окно в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
*!* 5 - запустить приложение с окном в текущем состоянии.
*!* 7 - минимизированное окно. Текущее активное окно останется активным.
*!* 10 - состояние окна по умолчанию для приложения.
*!* Код возврата - число, анализируя которое можно задавать необходимые дальнейшие действия
*!* Если функции ShellExecute вернула значение больше 32, команда выполнена успешно.
*!* В противном случае произошла какая-то ошибка.
*!* Примеры использования.
*!* Сначала всегда загружается в память сама функция строкой:
DECLARE Long ShellExecute in Shell32 ;
Long hWnd, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Integer ShowCmd
*!* а затем уже можно запускать ее на выполнение сколько угодно раз:
*!* открытие файла PDF программой по умолчанию
mKod = ShellExecute(0, "open", "sample.pdf", '', "C:\Мои документы", 1)
*!* отправка текстового файла на печать:
mKod = ShellExecute(0, "print", "sample.txt", '', "C:\Мои документы", 0)
*!* Запуск хранителя экрана (системные пути можно не указывать):
mKod = ShellExecute(0, '', 'logon.scr', '', '', 1)
*!* Запуск экранной лупы (системная утилита):
mKod = ShellExecute(0, '', 'magnify.exe', '', '', 1)
*!* Запуск ярлыка какой-то программы с Рабочего стола:
mKod = ShellExecute(0, '', "SomeApp.lnk", '', "c:\Documents and Settings\User\Рабочий стол\", 1)
*!* Открытие проводника Windows на указанной директории:
mKod = ShellExecute(0, "explore", "C:\Мои документы", '', '', 1)
*******************************
*******************************
*!* Метод оболочки Shell Windows - ShellExecute
*!* Назначение: выполняет указанное действие над указанным файлом. Возвращаемого значения нет.
*!* Синтаксис:
ShellExecute(<File>, <Arguments>, <Directory>, <Operation>, <Show> )
*!* <File> - строка. Имя файла.
*!* <Arguments> - строка (необязательный). Параметры для <Operation>.
*!* <Directory> - строка (необязательный). Путь к каталогу с указанным файлом. Если не указан, используется текущий каталог.
*!* <Operation> - строка (необязательный). Действие ("глагол"), которое необходимо выполнить. Если не указан, используется действие по умолчанию.
*!* <Show> - число (необязательный). Рекомендуемое состояние окна при выполнении. Запускаемое приложение может проигнорировать этот параметр.
*!* Возможные значения:
*!* 0 - скрытое окно.
*!* 1 - нормальное окно.
*!* 2 - минимизированное окно.
*!* 3 - максимизированное окно.
*!* 4 - запустить приложение с окном в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
*!* 5 - запустить приложение с окном в текущем состоянии.
*!* 7 - минимизированное окно. Текущее активное окно останется активным.
*!* 10 - состояние окна по умолчанию для приложения.
*!* Примеры:
*!* Аналогично, как и c предыдущем случае, объект оболочки создается один раз. После чего его методы можно использовать сколько угодно раз.
objShellApp = CREATEOBJECT("Shell.Application")
*!* Редактирование текстового файла программой по умолчанию:
objShellApp.ShellExecute("sample.txt", '', "C:\", "edit", 1)
*!* Редактирования текстового файла программой AkelPad:
objShellApp.ShellExecute("AkelPad.exe", "c:\sample.txt", "c:\Program Files\AkelPad\", "open", 1)
*!* Открытие проводника Windows на указанной директории:
objShellApp.ShellExecute('', '', "c:\Мои документы", "explore", 1)
*******************************
*******************************
*!* Функция скриптовой оболочки WshShell Windows - Run
*!* Синтаксис:
Run(<Command>, <WindowStyle>, <WaitOnReturn> )
*!* Назначение: создаёт новый независимый процесс, который запускает заданное приложение.
*!* Параметры:
*!* <Command> - строка, командная строка запуска приложения.
*!* <WindowStyle> - необязательный, число. Определяет вид окна запускаемого приложения.
*!* Возможные значения:
*!* 0 - скрытое окно.
*!* 1 - нормальное окно.
*!* 2 - минимизированное окно.
*!* 3 - максимизированное окно.
*!* 4 - запустить приложение с окном в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
*!* 5 - запустить приложение с окном в текущем состоянии.
*!* 7 - минимизированное окно. Текущее активное окно останется активным.
*!* 10 - состояние окна по умолчанию для приложения.
*!* <WaitOnReturn> - необязательный, булево (число).
*!* True - сценарий возобновит работу только после завершения вызванного процесса.
*!* False (по умолчанию) - управление передаётся сразу обратно в сценарий.
*!* Описание: если параметр "WaitOnReturn" установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.
*!* Примеры (также объект оболочки создается один раз, далее его методы используются сколько угодно раз):
WshShell = CREATEOBJECT("WScript.Shell")
*!* Открытие блокнота Windows:
RetCode = WshShell.Run("notepad.exe", 1, .T.)
*******************************
*******************************
*!* Метод скриптовой оболочки WshShell Windows - Exec
*!* Синтаксис:
Exec(<Command> )
*!* Назначение: создаёт новый дочерний процесс (т.е. процесс с теми же переменными среды), который запускает заданное консольное приложение.
*!* Возвращается объект "WshScriptExec", который позволяет контролировать ход выполнения запущенного приложения и обеспечивает доступ к
*!* потокам StdIn, StdOut и StdErr этого приложения.
*!* Параметры:
*!* <Command> - строка, командная строка запуска приложения.
*!* Описание: с помощью данного метода можно запускать и графические оконные приложения.
*!* В этом случае возвращаемый объект "WshScriptExec" полезен тем, что позволяет получить идентификатор запущенного процесса,
*!* который можно использовать, например, для активизации приложения с помощью метода AppActivate.
*!* Примеры.
*!* создается объект оболочки:
WshShell = CREATEOBJECT("WScript.Shell")
*!* Запускается блокнот Windows:
WshExec = WshShell.Exec("notepad.exe")
*******************************
*******************************
*!* Фундаментальный класс VFP - Shell Execute
*!* Запускает приложения или документы с ассоциированными с ними приложениями.
*!* Синтаксис:
ShellExecute(tcFileName, tcWorkDir, tcOperation)
*!* Возврат: nSuccess
*!* Аргументы:
*!* tcFileName - указывает файл для запуска.
*!* tcWorkDir - указывает путь к запускаемому файлу.
*!* tcOperation - указывает производимую операцию.
*!* nSuccess - определяет успешной или неуспешной была попытка запуска, используя одно из приведеннных значений:
*!* 2 = Плохая ассоциация (например, недопустимый URL)
*!* 29 = Ошибка при загрузке приложения
*!* 30 = Приложение занято
*!* 31 = Не имеется ассоциированного приложения
*!* Значения более 32 представляют признак успешного выполнения и возвращают дескриптор для запущенного приложения.
*!* Примеры
*!* загрузка библиотеки:
SET CLASSLIB TO (HOME()+"Ffc\_environ.vcx")
*!* создание экземпляра класса:
oShell = CREATEOBJECT("_shellexecute")
*!* делается один раз в программе, затем многократное использование:
*!* запуск AkelPad:
mKod = oShell.ShellExecute("AkelPad.exe", "c:\Program Files\AkelPad\", "open")


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 1 раз(а). Последнее : Crispy, 18.01.19 20:37
Ratings: 0 negative/1 positive
Re: Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
Если вот так то нормально.

DO WHILE xx.Status = 0
dn_name = ALLT(xx.StdOut.ReadAll)
ENDDO


Спасибо всем за участие !
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
FoxShip
Автор

Сообщений: 458
Дата регистрации: 27.06.2007
Crispy
FoxShip
Какой параметр скрытия ShellExecute если не секрет?

Когда-то повыбирал для себя справку для разных методов загрузки.
Может пригодится еще когда кому:
*!* API функция Windows - ShellExecute
*!* Синтаксис:
DECLARE Long ShellExecute in Shell32 ;
Long hWnd, ; && хэндл родительского окна, обычно можно = 0
String lpOperation, ; && действия с файлом = "open", "print", "explore", если '', по умолчанию "open"
String lpFile, ; && имя файла - можно с путем доступа
String lpParameters, ; && доп.параметры запуска - только для исполняемых файлов
String lpDirectory, ; && директория, относительно которой искать файл
Integer ShowCmd && режим открытия приложения
*!* Режимы открытия приложения:
*!* 0 - скрытое окно.
*!* 1 - нормальное окно.
*!* 2 - минимизированное окно.
*!* 3 - максимизированное окно.
*!* 4 - окно в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
*!* 5 - запустить приложение с окном в текущем состоянии.
*!* 7 - минимизированное окно. Текущее активное окно останется активным.
*!* 10 - состояние окна по умолчанию для приложения.

Может я не разобрался конечно, но мне кажется ShellExecute не создает нужный мне объект с атрибутами StdOut и ReadAll.
Для их создания я пользуюсь методом Exec объекта CreateObject("Wscript.Shell") у которого только один параметр - ссылка на запускаемую программу.

На ресурсе qaru.site сказано:
Вы всегда будете получать вспышку окна с Exec(). Вместо этого вы можете использовать Run() для выполнения команды в скрытом окне. Но вы не можете напрямую захватить вывод команды с помощью Run(). Вам придется перенаправить вывод во временный файл, который ваш VBScript мог бы открыть, прочитать и удалить.

Т.е. приходим к началу. Юзаю run с выводом во временный файл, зато без вспышки.



Исправлено 2 раз(а). Последнее : FoxShip, 18.01.19 18:46
Ratings: 0 negative/0 positive
Re: Команды управления AD из VFP
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Crispy
Когда-то повыбирал для себя справку для разных методов загрузки.

Непонятно, почему вы эти коды пишете в справке, а не в полноценных рабочих классах.
Тогда в рабочих кодах останутся только строки вызова.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 27 Владимир Максимов AndyNigmatec PaulWist hvh2007  (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика