У меня есть таблица, которая суммирует использование сервера. Электронная таблица ссылается на текстовый файл, который обновляется, когда VBA посылает некоторые команды на сервер Linux через командную строку Windows (и Cygwin). Моя проблема в том, что единственный способ, которым я нашел выполнение команд в Cygwin, - это выполнить команду SendKeys
. Это приводит к двум проблемам:VBA SendKeys к определенному окну
- Я должен доверять, что пользователь не будет нажимать где-нибудь, пока скрипт не будет запущен.
- Мне нужно скопировать количество времени, чтобы ждать выполнения команды до следующей команды.
Я бы (и сделал) попытался создать файл bash для запуска в Cygwin, но я не знаю, как это сделать, что также позволяет пользователю вводить свой пароль для входа на сервер Linux. В настоящее время я получаю пароль пользователя из UserForm, который выполняется до того, как будет выполнен основной код. Затем этот пароль сохраняется на «очень скрытом» листе, который удаляется при закрытии приложения.
настоящее время я использую следующий скрипт для запуска команды:
Public Sub test()
' Declare Variables
Dim cmd As String
Dim ret As Double
Dim LastRow As Integer
Dim PssWrd As String
PssWrd = Worksheets("PssWrd").Range("A1").Value
' Run Linux Commands
cmd = "C:\cygwin\Cygwin.bat"
ret = Shell(cmd, vbMinimizedFocus)
wait 0.02
cmd = "ssh " & Worksheets("Settings").Range("LOGIN") & "~" ' Format: [email protected]
SendKeys cmd
cmd = PssWrd & "~"
SendKeys cmd
wait 2.78
cmd = "{(} date ; fs ; qstat ; date {)} > & zout &~"
SendKeys cmd
cmd = "exit~"
SendKeys cmd
wait 0.5
cmd = "exit~"
SendKeys cmd
wait 5
' Update PivotTable and other data
End Sub
Public Sub wait(PauseTime As Double)
Dim Start As Double
Dim Finish As Double
Dim TotalTime As Double
Start = Timer ' Set start time
Do While Timer < Start + PauseTime
DoEvents ' Yield to other processes
Loop
Finish = Timer ' Set end time
TotalTime = Finish - Start ' Calculate total time
End Sub
Есть ли способ, по крайней мере, отправить нажатие клавиш в определенное окно вместо только активного окна? Любая помощь будет принята с благодарностью, и любая дополнительная необходимая информация будет легко предоставлена.
Вместо «очень скрытого» листа вы можете захотеть сохранить/получить учетные данные пользователя в реестре пользователя, используя 'SaveSetting' /' GetSetting (...) ' – MikeD
' SaveSetting'/'GetSetting' небезопасно ... Получает хранится в 'HKEY_CURRENT_USER \ Software \ VB и VBA Program Settings' – anishsane
Я могу просто заставить пользователя вводить его пароль каждый раз, когда он запускает скрипт, но я хотел немного облегчить его использование. Наиболее частое использование этого скрипта будет заключаться в том, чтобы кто-то сохранял копию на своем локальном компьютере и запускал ее для проверки активности на сервере нашей компании. Лист удаляется, когда файл закрыт, поэтому версия, которую они получают из сети, не будет иметь в нем никого. Более того, даже если они столкнулись с трудностями, чтобы выяснить, как работает код и сделать листок видимым, они смогут видеть только свои собственные. – tlewis3348