Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ Поиск папки пользователя C:\Users\%USERPROFILE%\ средствами пилота.

Автор: sel 4.7.2018, 5:41

Всем доброго времени суток,
Довольно долго искал на форуме и в интернете, но такой темы не нашёл.
Вопрос в следующем, хочу что бы пилот запускал программу которая находится в AppData, если в ручную прописать название профиля пользователя то всё работает, но проблема в том, что тогда каждому пользователю моей "чудесной" программы придётся лезть во все скрипты, что бы исправлять путь.
Есть вариант кустарно через средства винды, запускать окно "выполнить" через Win+R и вводом туда "%USERPROFILE%\AppData\", но вопрос такой, пилот умеет как то сам находить имя профайла?
Буду благодарен за любой ответ.
Спасибо.

Автор: cirus 4.7.2018, 13:16

Код
set $path1 "C:\Windows\Temp\tmp.txt"   // путь к файлу, в котором будет имя папки
set $path2 "C:\Windows\Temp\tmp.bat"   // путь к батнику, который получит имя папки
set %tmp [1] echo %username% > $path1  

if  fileexists($path1) = 0       // если файл не существует
    if  fileexists($path2) = 0   // если файл не существует
        save_array %tmp $path2
        wait 500
        exec $path2
        wait 1000
    end_if
end_if

load_array %a $path1
log %a [1]   // имя папки
end_script

При первом запуске будет появляться окно cmd.

Автор: sel 5.7.2018, 0:22

Благодарю, буду пробовать.

Автор: sel 6.7.2018, 22:01

Появился ещё один вопрос, что делать если у пользователя русскоязычное название профиля?
Например профиль Мария скрипт записывает в массив как: Њ аЁп

Скрипт:

Код
set $path1 "C:\Windows\Temp\tmp.txt"   // путь к файлу, в котором будет имя папки
set $path2 "C:\Windows\Temp\tmp.bat"   // путь к батнику, который получит имя папки
set %tmp [1] echo %username% > $path1

if fileexists($path1) = 0       // если файл не существует
    if fileexists($path2) = 0   // если файл не существует
        save_array %tmp $path2
        wait 500
        exec $path2
        wait 1000
    end_if
end_if

load_array %a $path1
log %a [1]
set %a [1] rtrim(%a [1])
set $b C:\Users\%a [1]\AppData\Local\*\*\*.exe
exec cmd /c start $b
end_script

Автор: DarkMaster 6.7.2018, 22:04

подозреваю, что в батнике нужно первой строкой написать:
chcp 1251

Автор: sel 6.7.2018, 22:27

Цитата(DarkMaster @ 7.7.2018, 0:04) *

подозреваю, что в батнике нужно первой строкой написать:
chcp 1251


Не помогло, имеется в виду батник который запускает пилот с запущенным скриптом?

Автор: DarkMaster 6.7.2018, 22:40

Цитата
set %tmp [1] echo %username% > $path1

Замените на:
set %tmp [1] chcp 1251
set %tmp [2] echo %username% > $path1

Прошлый батник удалить. Вот по этому адресу:
set $path2 "C:\Windows\Temp\tmp.bat" // путь к батнику, который получит имя папки

Автор: sel 6.7.2018, 23:04

Получилось, спасибо!

Автор: sel 28.7.2018, 8:32

Я пишу некий аналог автологина, и всё фачится когда пользователем выбрана не та раскладка клавиш, т.е. если включён CAPS LOCK, то скрипт вводит пароль в большом регистре и естественно система его не принимает. Есть какая то команда определения включённого\выключенного капслока?

Автор: DarkMaster 28.7.2018, 8:38

Попробуйте использовать say. Он посылает символы, а не нажатия.

Автор: sel 28.7.2018, 9:03

Цитата(DarkMaster @ 28.7.2018, 10:38) *

Попробуйте использовать say. Он посылает символы, а не нажатия.


К сожалению это не помогает, скрипт вводит данные в дочернее окно только при команде sendex. При say, send, ничего не вводит.

Кусок кода:
Код

Set $login1 "почта~2mail.ru "
Set $password1 "пароль"

call log_pass $login1 $password1 #handleWin

proc log_pass $login1 $password1 #handleWin $gamecentr
set #z GetWindow (#handleWin CHILD)
while #h < 0
set #h FindImage (0, 0 1920 1080 abs (images\pic18.bmp) %arr_pass 2 70 20 5)
if #h > 0
    set $var setlayout (0409)
    wait 400
    sendex $login1
    wait 200
    sendex {tab}
    wait 200
    sendex $password1
    wait 200
    sendex {enter}
else
    sendex_down {WindowsLeft}{d}
    sendex_up {WindowsLeft}{d}
    ShowWindow #handleWin TOP
    set #h -1
    end_while
end_if
end_proc

Автор: cirus 28.7.2018, 10:49

Копируйте логин и пароль в буфер, всталяйте через ctrl+v.

Автор: sel 28.7.2018, 11:28

Цитата(cirus @ 28.7.2018, 12:49) *

Копируйте логин и пароль в буфер, всталяйте через ctrl+v.


Благодарю за ответ, помогло.

Автор: DarkMaster 28.7.2018, 11:43

Цитата
К сожалению это не помогает, скрипт вводит данные в дочернее окно только при команде sendex.

А вы пробовали делать привязку именно к дочернему окну? Скорее всего это решит проблему.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)