Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Не постоянный путь к файлу в строковой переменной (Как мне сделать так чтобы по кнопке запускался "setup.exe",)
Не постоянный путь к файлу в строковой переменной
RVRdpДата: Суббота, 29 Марта 2008, 03:59 | Сообщение # 1
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline

*** НЕ ПОСТОЯННЫЙ ПУТЬ К ФАЙЛУ В СТРОКОВОЙ ПЕРЕМЕННОЙ

*** в строковой переменной путь к файлу к примеру выглядит так:

setup$=folder$+'folder2\setup.exe'


*** как мне сделать так чтоб открывался не "setup.exe",
*** а *.exe с любым названием в папке "folder2"?

setup$=folder$+'folder2\*.exe'


*** После такого варианта он просто пытается открыть файл *.exe

*** Суть в том что папка "folder2" будет постоянной,
*** а название файла "setup.exe" может быть разным.
*** И запуск этого файла нужно поставить на кнопку.


Вся жизнь сплошной код! (RVRdp)
 
toizyДата: Суббота, 29 Марта 2008, 10:21 | Сообщение # 2
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Фигасе! Нельзя ли сделать проще? Пусть имя файла будет фиксированным. Ну а если всё-таки нужно, то делай поиск SearchForFile, и запускай любой из найденных файлов.

Хотя задача странная, имхо...

Добавлено (29 Март 2008, 10:21)
---------------------------------------------
Если не секрет, что ваяешь?


Жизнь оказалась не такой уж и забавной, как поначалу...
 
basmeДата: Суббота, 29 Марта 2008, 11:15 | Сообщение # 3
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote (toizy)
и запускай любой из найденных файлов.

Да не любой. Ему-то нужен какой-то конкретный exe, а не просто любой exe из папки. То есть, этот способ не пройдёт, если в папке несколько exe-файлов.
А вот что ваяеццо, правда интересно.
 
Alex3AДата: Суббота, 29 Марта 2008, 12:47 | Сообщение # 4
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (RVRdp)

*** как мне сделать так чтоб открывался не "setup.exe",
*** а *.exe с любым названием в папке "folder2"?


setup$=folder$+'folder2\'+'имя твоего любого файла'+'.exe'
Только разберись, что для тебя "любой файл", згрузить можно только тот
файл, который ЕСТЬ по указанному тобой пути.
Получить список имеющихся, в указанной папке, файлов не проблема.
Какой из них грузить - твое дело.
Система не понимает путей "На деревню к дедушке", так что включай
свой интелект.
 
basmeДата: Суббота, 29 Марта 2008, 18:19 | Сообщение # 5
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote (Alex3A)
+'имя твоего любого файла'

Так в том и дело, что имени-то у него и нет. Ему, если конечно я правильно понял, нужно, чтобы прога запускала из папки exe-файл вообще - имя-то конкретное ему и неизвестно.
Quote (Alex3A)
грузить можно только тотфайл, который ЕСТЬ по указанному тобой пути.

Ну, это-то проверить не проблема - FileExist()
 
Alex3AДата: Суббота, 29 Марта 2008, 20:25 | Сообщение # 6
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (basme)
Так в том и дело, что имени-то у него и нет.

Нет имени - нет файла!
Файлы без расширения бывают, но вот что бы без имени....

Quote (Alex3A)
Получить список имеющихся, в указанной папке, файлов не проблема.
 
YURIYДата: Суббота, 29 Марта 2008, 20:28 | Сообщение # 7
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
RVRdp, это надо?

Code
SongListReset()
SearchForFiles("ПАПКА_С_EXE","*.exe")
For i=1 To CBK_NumInList
    LoadText("a$","<List>i")
    Run("a$","")
Next i



Вечная память Андрею Сергееву!
 
basmeДата: Суббота, 29 Марта 2008, 21:49 | Сообщение # 8
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote (basme)
Так в том и дело, что имени-то у него и нет.

Quote (basme)
Нет имени - нет файла!
biggrin
Я имел ввиду, что пользователь не знает конкретного имени файла, а не то, что файл без имени сам.
Yuriy, видимо, это ему и надо. Вот только для чего, интересно?
 
YURIYДата: Суббота, 29 Марта 2008, 21:56 | Сообщение # 9
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (basme)
Вот только для чего, интересно?

Quote (RVRdp)
*** Суть в том что папка "folder2" будет постоянной,
*** а название файла "setup.exe" может быть разным.

biggrin



Вечная память Андрею Сергееву!
 
toizyДата: Суббота, 29 Марта 2008, 23:21 | Сообщение # 10
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (basme)
То есть, этот способ не пройдёт

Ещё как подойдёт. Ессли и правда у него файлы именуются по какой-то маске, то можно организовать выборку из найденных файлов по маске, какая там у него...


Жизнь оказалась не такой уж и забавной, как поначалу...
 
RVRdpДата: Воскресенье, 30 Марта 2008, 06:18 | Сообщение # 11
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
Quote (Yuriy)
RVRdp, это надо?

Code SongListReset() SearchForFiles("ПАПКА_С_EXE","*.exe") For i=1 To CBK_NumInList LoadText("a$","<List>i") Run("a$","") Next i

Я это уже видел где-то на форуме, и как я понял он работает со списком, а мне нужно чтоб это работало на кнопке.

Суть в том

Quote (basme)
Так в том и дело, что имени-то у него и нет. Ему, если конечно я правильно понял, нужно, чтобы прога запускала из папки exe-файл вообще - имя-то конкретное ему и неизвестно.

Да ты правильно понял, это мне и надо. Суть в том что файл будет запускаться из определённой папки и он будет с расшерением .exe и всего один, но название может быть любым.

Quote (toizy)
Если не секрет, что ваяешь?

Не секрет! Тема не новая но мне кажется до сих пор актуальная! Авторан для домашнего софта, но и пойдет для большого масштаба! Велосипед я изобретать не стал и взял за основу
вот этого автора:

Название: Авторан-CD для ленивых
Автор: HEnog@pok
Версия ММВ: 4.9.7
Как я уже понял он тоже чью-то идею переделал только не написал чью!

Ну так вот оформление в стиле Media Center style - Royale. Размеры окна уменьшил на 600x400 (3:2). Убрал сплэш и эффекты открытия и закрытия авторана, увеличил количество разделов, еле как догадался как сделать графические кнопки с не постоянными названиями, оказалось всё просто. Изначально я планировал изменить расположение кнопок и немного структуру, но потом решил оставить всё как есть но доработать. Получилось вполне красиво а также пользователю уже не нужно будет подгонять файлы под стандартные названия типа setup.exe , crack.exe , rus.exe , update.exe , нужно будет положить файлы только в нужные папки. Ещё планирую изменить систему поиска, в данный момент поиск производится по активному списку и это не правильно я считаю. Структуру поиска изложу позже когда разберусь с проблемой запуска файла. С регистрационными данными вроде хорошо но я думаю можно доработать. так же планирую изменять высоту рисованного окошка под количество кнопок. В общем не смотря на сложность работы самой программы само окно будет без наворотов и излишеств. Интерфейс весь делал средствами Paint'а и кнопки Preent Screen, эффекта уменьшения размера добился с помощью изменения масштаба экрана с 96ти на 72 точки на дюйм. Единственно чтоб сделать кнопку папки пришлось воспользоваться фотошопом.
Так вот я и хочу понять как сделать так чтоб запускался файл с расширением .exe из определенной папки.
Пример: Нужно запустить например программу по ссылке:
диск:\каталог\название_программы\файл_установки.exe
ну а потом крэк например
диск:\каталог\название_программы\крэк\файл_крэк.exe
этот путь диск:\каталог\название_программы\ мы уже определили и внесли в переменную и назвали folder$ далее оставшийся путь крэк\ у нас постоянный так как во всех папках он одинаков и обозначили мы его как 'folder2\'. А вот как узнать название файла файл_крэк.exe уже проблема, так как название будет разным и изначально не известным но файл будет во во всех программах в одной и той же папке(конечной папке имеется ввиду за исключением установки программы) и расширение .exe будет в единственном числе, а если это будет не так то надо будет известить об этом.
в общем должно быть примерно так setup$=folder$+'folder2\неизвестен.exe'

для примера возьмем эту часть кода:

***исходим из предположения, что в выбранной папке
***находится подпапка "Crack", а в ней файл "crack.exe"
crack$=setuppatch$+'Crack\crack.exe'
***проверяем, существует ли данный файл
FileExist("crack$","chk")
***если да, то показываем кнопку с надписью "Crack"
If (chk=TRUE) Then
z=z+1
LoadText("Stp-a[z]","Crack")
Show("Stp[z]")
runs$[z]=crack$
Else
End

в ней нужно изменить строчку crack$=setuppatch$+'Crack\crack.exe'

Скриншот можете посмотреть, там где розовый цвет будет градиент.

Прикрепления: 1555172.jpg (40.4 Kb)


Вся жизнь сплошной код! (RVRdp)
 
basmeДата: Воскресенье, 30 Марта 2008, 10:25 | Сообщение # 12
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote (RVRdp)
Я это уже видел где-то на форуме, и как я понял он работает со списком,

Не, со списком она конечно работает, но только со внутренним, невидимым списком MMB <List>, а запускаться может по нажатию кнопки. Это оттого, что команда SearcForFiles помещает все ссылки на найденные файлы во внутренний список MMB, и потом их надо оттуда достать.
 
RVRdpДата: Воскресенье, 30 Марта 2008, 10:58 | Сообщение # 13
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
Quote (basme)
Quote (RVRdp) Я это уже видел где-то на форуме, и как я понял он работает со списком,

Не, со списком она конечно работает, но только со внутренним, невидимым списком MMB <List>, а запускаться может по нажатию кнопки. Это оттого, что команда SearcForFiles помещает все ссылки на найденные файлы во внутренний список MMB, и потом их надо оттуда достать.

Подскажи пожалуйста как мне сделать чтоб всё это работало! Я вообще с кодом работал всего два дня и я многого не знаю, в скриптах разбирался чисто интуитивно.

*** эта строка отвечает за очистку внутреннего списка?
SongListReset()
*** я правильно указал путь к папке, лично самому кажется что чтото не так
*** или правильней будет так?
*** Crackpatch$='Crack\'
*** SearchForFiles("setuppatch$+Crackpatch$","*.exe")

SearchForFiles("setuppatch$+Crack\","*.exe")

For i=1 To CBK_NumInList
LoadText("a$","<List>i")
Run("a$","")
Next i
*** какую переменную мне нужно подставить под кнопку? У меня она будет запускаться через runs$[z]. Может переменная Run$ ?
runs$[z]=?????$


Вся жизнь сплошной код! (RVRdp)
 
basmeДата: Воскресенье, 30 Марта 2008, 15:22 | Сообщение # 14
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote (RVRdp)
какую переменную мне нужно подставить под кнопку?

То есть - подставить под кнопку?
Команда SongListReset() действительно очищает <List> - внутренний список.
Если я правильно понял твою задачу: тебе нужно определить, какие папки - Crack, Rus и т. д. существуют в папке определённой программы, и, если они есть, то запустить из них любой exe-файл.
Например, в папке folder$ содержится установочные файлы программы и, возможно, папки Crack и Rus.
Тебе нужно проверить сначала, есть ли они:
Code

path$=folder$+'Crack'
FileExist("path$","iscrack")
path$=folder$+'Rus'
FileExist("path$","isrus")

Таким образом, если существует папка Crack в папке folder$, то переменная iscrack будет содержать 1, иначе 0.
Далее с помощью условного оператора можно показать соответствующую кнопку:
Code

If (iscrack=1) Then
Show("CrackBTN")
End
If (isrus=1) Then
Show("RusBTN")
End

А на сами кнопки помещаем следующий код, на кнопку Crack, например:
Code

SongListReset()
path$=folder$+'Crack'
SearchForFiles("path$",*.exe)
For n=1 To NumInList
LoadText("a$","<List>i")   
Run("a$","")
End n

Ну, и соответствующий скрипт на кнопку Rus. Причём, код на всех кнопках одинаков (это и вообще могут быть одна кнопка), меняется только переменная, содержащая путь к папке с программой.
Если что не понятно, спрашивай.


Сообщение отредактировал basme - Воскресенье, 30 Марта 2008, 15:25
 
Alex3AДата: Воскресенье, 30 Марта 2008, 17:19 | Сообщение # 15
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Следуя твоей логике, в папке только один ехе файл,
следовательно,
SearchForFiles("setuppatch$+Crack\","*.exe")
вернет тебе всего один путь. По этому конструкция
For i=1 To CBK_NumInList
LoadText("a$","<List>i")
Run("a$","")
Next i
не имеет смысла, в случае если exe файл там не один,
смысла нет вдвойне, ты последовательно запустишь
все найденные файлы.(функция просматривает и все вложенные папки)
Строк
LoadText("a$","<List>1")
Run("a$","")
будет вполне достаточно.
Тем не мение, ты что то не додумал со своим алгоритмом,
зачем разные имена, все сетапы могут быть с одним именем,
от того что wordpad.exe переименовать в bulka.exe ничего не меняется,
все равно запустится wordpad.
И поскольку это авторан, то незачем мутить всякие поиски,
ты можешь хранить сразу полные пути (с именем файла) в массиве
spisok$[1]='C:\papkaX\papkaY\filename.exe'
spisok$[2]='E:\papkaX\papkaY\drugoe_filename.exe'
и так далее, сохранять его в файл, редактировать и так
далее.
Далее, скрипты в билдере, находятся или в отдельном объекте
типа "script" (запустить его можно из скрипта объекта,
командами RunScript(""), ScriptTimer("","") и т.д.),
либо непосредственно написав его в свойствах объекта.
Советую не спешить с выдумыванием алгоритмов, а с начала
почитать описания комманд ммв, посмотреть примеры, короче говоря
начать с азов. Ты сам поймешь, что вместо сложных построений
можно обойтись самыми примитивными вещами.
 
RVRdpДата: Воскресенье, 30 Марта 2008, 23:02 | Сообщение # 16
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
Quote (basme)
То есть - подставить под кнопку?

ты же сам на него и ответил сказав вот это:
Quote (basme)
А на сами кнопки помещаем следующий код, на кнопку Crack, например...

я сразу не понял как запустить этот скрипт по кнопке, оказалось его нужно запихать в саму кнопку, в

общем интересовало меня какую переменную мне запускать, в данном случае это Run("a$","") .

Quote (basme)
Если что не понятно, спрашивай.

Всё очень доходчиво и понятно, только вот в некоторых местах появлялись мелкие ошибки а именно:
дважды обозначена переменная path$=folder$+'Crack'
в этой строчке нет кавычек где *.exe SearchForFiles("path$",*.exe)
эта команда не правильна End n если в отдельном скрипте писать то я так и не понял

что туда нужно добавить в конец, а вот на кнопке этот скрипт работает и без этой строчки нормально.
Эти ошибки мелочь, но не знающие люди могут сильно споткнуться.

Quote (Alex3A)
не имеет смысла, в случае если exe файл там не один, смысла нет вдвойне

Этого не должно быть так как для патчей крэков и всего остального будут созданы отдельные папки и они

будут не изменны. В случае если обновлений двое то они будут лежеть в разных папках например update1

update2 и тд, а также будут отдельные кнопки для этих файлов с названиями этих же папок. Но на случай

если всё же будут в одной папке два .exe файла нужно придумать как сделать чтоб хотябы появлялось

сообщение об этом.

Quote (Alex3A)
Строк LoadText("a$","<List>1") Run("a$","") будет вполне достаточно.

Полностью согласен.
Quote (Alex3A)
Тем не мение, ты что то не додумал со своим алгоритмом, зачем разные имена, все сетапы

могут быть с одним именем, от того что wordpad.exe переименовать в bulka.exe ничего не меняется, все

равно запустится wordpad. И поскольку это авторан, то незачем мутить всякие поиски, ты можешь хранить

сразу полные пути (с именем файла) в массиве spisok$[1]='C:\papkaX\papkaY\filename.exe'

spisok$[2]='E:\papkaX\papkaY\drugoe_filename.exe' и так далее, сохранять его в файл, редактировать и так

далее.


Дело в том что оболочка авторана будет создана для будущих файлов а не файлы для авторана! Будет

одинакова только структура папок, названия файлов совпадать не будут. Смысл в том что нет необходимости

переименовывать файл Keymaker.exe в Keygen.exe или в crack.exe, его просто закидываешь в соответствующую

папку и все, программа сама уже ищет как он называется, зная чо он лежит там один, а если он не один что

редкость то просто делаем две папки. И потом не все сетапы могут быть с одним именем, некоторые идут с

названием самой программы. А переименовывать кучу файлов под программу зачем, если она и так может сама

найти их названия?
Кроме этого например каталоги легко можно будет обновлять простым закидыванием папки с программой. Ну не

переделывать же для этого код авторана для этого еще и исходный код понадобится. В общем преимуществ в

том что я собираюсь сделать очень много.

Добавлено (30 Март 2008, 23:02)
---------------------------------------------
### Итак перейдём к моему скрипту

### Вот что у меня было

*** объект SongList
z=1
**** дальше идет код который не берём во внимание

**** Ищем дерикторию "Crack"
Crack=setuppatch$+'Crack\Crack.exe'
FileExist("Crack$","chk")
If (chk=TRUE) Then
z=z+1
LoadText("Stp-a[z]","Crack")
Show("Stp[z]")
runs$[z]=Crack$
Else
End

**** Ищем дерикторию "Update"
update$=setuppatch$+'Update\Update.exe'
FileExist("update$","chk")
If (chk=TRUE) Then
z=z+1
LoadText("Stp-a[z]","Update")
Show("Stp[z]")
runs$[z]=update$
Else
End

*** и так далее

*** дальше идут у нас кнопки
**** [color=green]объект группа кнопки 2
***** сама кнопка с названием Stp2
Run("runs$[2]","")
***** объект надпись с названием Stp-a2

**** объект группа кнопки 3
***** сама кнопка с названием Stp3
Run("runs$[3]","")
***** объект надпись с названием Stp-a3

*** и так далее

### И вот что у меня получилось

*** объект SongList
z=1
**** дальше идет код который не берём во внимание

**** Ищем дерикторию "Crack"
Crack=setuppatch$+'Crack'
FileExist("Crack$","chk")
If (chk=TRUE) Then
z=z+1
LoadText("Stp-a[z]","Crack")
Show("Stp[z]")
SearchDir$[z]=Crack$
Else
End

**** Ищем дерикторию "Update"
update$=setuppatch$+'Update'
FileExist("update$","chk")
If (chk=TRUE) Then
z=z+1
LoadText("Stp-a[z]","Update")
Show("Stp[z]")
SearchDir$[z]=update$
Else
End

*** и так далее

*** дальше идут у нас кнопки
**** объект группа кнопки 2
***** сама кнопка с названием Stp2
SongListReset()
SearchForFiles("SearchDir$[2]","*.exe")
LoadText("a$","<List>1")
Run("a$","")

***** объект надпись с названием Stp-a2

**** объект группа кнопки 3
***** сама кнопка с названием Stp3
SongListReset()
SearchForFiles("SearchDir$[3]","*.exe")
LoadText("a$","<List>1")
Run("a$","")

***** объект надпись с названием Stp-a3

*** и так далее

### Здесь я воспользовался советамиbasmeи

Alex3A
Alex3A прав, подводным камнем оказалось то что этот метод я не могу применить к

главному файлу, файлу установки, так как идёт поиск и во вложенных папках и первым файлом идеёт явно не

тот файл что лежит в корне папки.
Вопрос 1: Можно ли как нибудь запретить поиск во вложенных папках. Либо второй

вариант: как сделать так чтоб запускался всегда последний найденный файл? Как я уже понял сначала

выводится список файлов из конечных папок а потом уже из корня, отсюда вывод чо нужный мне файл лежащий

в корне указанной папки будет в списке последним учитывая то что в корне будет находится всего один

exe-шник!
Вопрос 2: Как мне сделать если при поиске в папке будут лежать два exe-шных файла,

чтоб вылезло сообщение что в каталоге два файла либо появилось окно с выбором какой файл запустиь либо

просто запустился проводник в этой папке где лежат данные файлы?


Вся жизнь сплошной код! (RVRdp)
 
Alex3AДата: Понедельник, 31 Марта 2008, 02:15 | Сообщение # 17
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Вопрос 1: НЕТ,

**запуск последнего файла, NumInList количество найденных файлов,
**он же номер последнего.
LoadText("a$","<List>NumInList")
Run("a$","")

Вопрос 2:
If (NumInList>1) Then
**тут код отработки случая когда файл не один
Message("вот гадость какая, файлов аж","NumInList")
Else
Message("все путем!","NumInList")
End
Теперь по коду.
Замечания.
**** Ищем дерикторию "Crack" ..."Update"
runs$[z]=Crack$, или в варианте 2
SearchDir$[z]=update$
используеться один и тот же массив, который
после выполнения содержит только "Update",
делай для каждой категории свой массив.
Совет.
Обрати внимание, у тебя многие скрипты, одинаковы,
меняються только переменные, так что все может выполняться
с помощью одной копии скрипта - устанавливаешь переменные,
выполняешь скрипт.
Не вздумай применять эти скрипты в готовом проекте, только
в генераторе проектов. Ибо при запуске, пока рекурсивно
будет просмотрено все содержимое, юзер может не дождаться.
Сохраняй найденое в файл, прочитать его намного быстрее,
чем генерировать.
P.S.
Я бы написал толковый механизм, но это будет не интересно,
ни тебе ни мне, даю только общие принципы, без детализации.

 
RVRdpДата: Понедельник, 31 Марта 2008, 07:54 | Сообщение # 18
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
Alex3A, Спасибо, работает! Только вместо NumInList(у меня не сработала без CBK_) нужно писать CBK_NumInList

Ещё подводные камни!!!
При поиске файлов с расширением .exe в папке System\ во внутреннем списке получилась вот такая вот бяка.

C:\...\Soft\System\Crack\crack.exe
C:\...\Soft\System\Rus\Rus.exe
C:\...\Soft\System\Setup.exe
C:\...\Soft\System\Update\ghhUpda te.exe

Здесь срочки сортируются в алфавитном порядке и без разницы файл это или папка. Узнать папка это или нет можно только по косой "\". Мне необходимо узнать есть ли в строке после текста "System\" косая "\" и если косая существует то нужно удалить эту строку и с остальными строками тоже самое. В итоге должна остаться одна строка где и будет путь к запускаемому файлу. Как можно это реализовать?


Вся жизнь сплошной код! (RVRdp)
 
RushДата: Понедельник, 31 Марта 2008, 09:46 | Сообщение # 19
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Останутся файлы только корневой папки, без подпапок:
Code
path$='C:\...\Soft\System\\'
SearchForFiles("path$","*.exe")
ListBoxAddItem("SongList","RESET")
For i=1 To CBK_NumInList
   LoadText("file$","<List>i")
   check$=ExtractDrive(file$)+ExtractDir(file$)
   If (check$=path$) Then
     ListBoxAddItem("SongList","<List>i")
   End
Next i
 
RVRdpДата: Понедельник, 31 Марта 2008, 09:53 | Сообщение # 20
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
Rush, Спасибо! Немного вникаю, о результатах отпишусь!
Мне эта программа нравится всё больше и больше, прям как конструктор какойто! smile


Вся жизнь сплошной код! (RVRdp)
 
RushДата: Понедельник, 31 Марта 2008, 09:59 | Сообщение # 21
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
А если, как ты говоришь, у тебя в нужной папке только один файл с нужным расширением, то можно еще проще:
Code

path$='C:\...\Soft\System\\'  
SearchForFiles("path$","*.exe")
For i=1 To CBK_NumInList
   LoadText("file$","<List>i")
   If (path$=ExtractDrive(file$)+ExtractDir(file$)) Then
     Run("file$","")
     Break()
   End
Next i
 
Alex3AДата: Понедельник, 31 Марта 2008, 10:11 | Сообщение # 22
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Проверить последнюю букву.
s$='C:\...\Soft\System\Crack\crack.exe1'
c=LEN(s$)
b$=StrGet(s$,c)
If (b$='1') Then
Message("popal","s$")
Else
Message("ne popal.","b$")
End
 
RVRdpДата: Пятница, 04 Апреля 2008, 06:19 | Сообщение # 23
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
Quote (Rush)
А если, как ты говоришь, у тебя в нужной папке только один файл с нужным расширением, то можно еще проще:

Уже столько видоизменя этот код что получилось вот это:
Code

SongListReset()
SearchForFiles("SearchDir$[rnex]","*.exe")
ListBoxAddItem("TempSetupList","RESET")
For i=1 To CBK_NumInList
   LoadText("file$","<List>i")
   check$=ExtractDrive(file$)+ExtractDir(file$)
   If (check$=SearchDir$[rnex]) Then
     ListBoxAddItem("TempSetupList","<List>i")
   Next i
   For k=1 To Count
     SongListReset()
     ListBoxGetItems("TempSetupList","<List>k")
   End
Next k
LoadText("runfile$","<List>1")
***Если во внутреннем списке несколько путей к '.exe' файлам, то выдаём сообщение.
If (2<=CBK_NumInList<=4) Then
   abc$=' исполняемых файла.'
Else
   abc$=' исполняемых файлов.'
End
If (CBK_NumInList>1) Then
   ***Количество файлов
   stpnum$=CBK_NumInList
   ***Заголовок сообщения
   Title$ = 'Ошибка запуска файла "'+ErrEXE$[z]+'"'
   ***Текст сообщения
   Text$ = 'В папке "'+ErrEXE$[z]+'" находится '+stpnum$+abc$+' Открыть папку "'+ErrEXE$[z]+'" в Проводнике?'
   ***Флаги (подробности смотри в справке)
   Flag= 1 + 48 + 0
   ***время, через которое окно закроется само
   timeout=0
   Params$ = Text$+','+CHAR(Flag)+'[, '+CHAR(timeout)+']'
   MessageEx("Title$","Params$")
   bu=CBK_MsgEx
   ***если нажали ОК, или время истекло(измените для этого параметр timeout=0), то
   If (bu <= 1) Then
     ***открываем папку(которая соответствует кнопке установки) в проводнике
     Run("Explorer","SearchDir$[rnex]")
     ***иначе
   Else
     ***ничего не делаем
   End
Else
   ***иначе(если файл один) запускаем файл из первой строки
   Run("runfile$","")
End
SongListEdit()

По сути я использовал все предложенные варианты, Сделал такой ход: Поиск, сравнение, если совпадение(а иначе быть не может потому что скрипт не запустится, следовательно и кнопка) то запуск файла, если совпадений больше одного то появится сообщение об ошибке с предложением открыть текущую папку в проводнике! При игнорировании сообщения ничего не происходит! Примечание: все найденные нужные пути копируем во временный список(не внутренний, так и не понял как почистить внутренний список удалив не нужные пути и оставив нужные, не прибегая к этому способу).

В ходе работы появляются новые идеи, и поэтому я решил пока остановиться на чистке кода, много чего повторяется, много не нужных строк, где-то можно сделать проще и всё такое. Вопросы по ютой теме ещё будут появляться.

Как-то я решил сделать смену скина более гибкой для пользователя, и споткнулся на градиенте, его просто НЕТ! Потом посидел и написал свой код(его ещё можно доделать):

Code

** Градиент
For n=0 To (PubHeight()/h)
   inlabel$='Grad-01'
   x=0
   y=n*h
   w=PubWidth()
   h=PubHeight()/100
   ** Красный
   ra=ra+(h/PubHeight()*15)
   r=98-ra
   ** Зелёный
   ga=ga+(h/PubHeight()*46)
   g=160-ga
   ** Синий
   ba=ba+(h/PubHeight()*42)
   b=232-ba
   CreateRectangle("inlabel$","outlabel$,x,y,w,h,r,g,b")
   SetObjectParam("outlabel$","BORDERCOLOR=r,g,b")
Next n

И с этим кодом у меня три вопроса:
1) Почему созданные обьекты с одинаковыми именами 'Grad-01' работают? По идее из-за этой ошибки должен был создаться всего один обьект. И каковы реальные имена получились? Ну явно же не все с одним именем! В общем как задать имя правильно чтоб потом его можно было бы найти и управлять им?
2) Как созданный обьект с помощью скрипта или просто обьект или группу переместить на слой выше или ниже(либо переместить в самый низ либо самый верх по списку)
3) Можно ли сделать градиент намного проще? Тоесть без использования растровой графики!

Примечания к скрипту градиент: Ширина и высота 600 на 400! В общем он сам всё узнаёт и расчитывает, нужно только ввести начальный цвет(r,g,b) в этих же строчках поставить+/-(возрастание либо убывание цвета) ну и на какое число нужно перейти в цвете нужно ставить в строчках (ra,ga,ba)! ну и в этой строчке h=PubHeight()/100 количество полосок на высоту, чем их больше тем качественнее и больше ТОРМОЗИТ и ясно дело почему!

За градиент строго не судите сам вижу что не пойдет, но учитывая что я новый человек в работе с этой программой и догадался до такого извращённого метода, то это уже ЧТОТО!


Вся жизнь сплошной код! (RVRdp)
 
RushДата: Пятница, 04 Апреля 2008, 13:23 | Сообщение # 24
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
RVRdp
По первому коду(второй пока не смотрел smile ):

Code
For k=1 To Count     
         SongListReset()     
         ListBoxGetItems("TempSetupList","<List>k")     
Next k

Этот код совершенно бессмысленен. Функция ListBoxGetItems создает массив (вернее, псевдомассив ММВ) из элементов списка.
Пишется она правильно так - ListBoxGetItems("TempSetupList","items$,itemsNum$,#,numItems")
Имена параметров, конечно, произвольные. Что они означают?
items$ - в эту переменную заносится массив всех значений пунктов списка, разделенных делимитером #, который стоит третим параметром.
itemsNum$ - в эту переменную заносится массив всех номеров списка. Это служебный массив.
numItems - количество пунктов списка.
Есть и ListBoxGetItems("TempSetupList","<List>"), но эта функция передает элементы обычного списка во внутренний список ММВ. Поэтому вместо ненужного цикла напиши просто:

Code
SongListReset()     
ListBoxGetItems("TempSetupList","<List>")

Code
If (2<=CBK_NumInList<=4) Then     
       abc$=' исполняемых файла.'     
Else     
       abc$=' исполняемых файлов.'     
End

Эта конструкция работать не будет. Напиши так:
Code
If (CBK_NumInList=>2 & CBK_NumInList<=4) Then

Идем дальше - ну и нагорожено же тут... smile

ErrEXE$[z] - откуда взялась эта переменная, да еще и из массива переменных. Где определяется та же "z"?

Не проще написать так?

Code
SongListReset()
SearchForFiles("SearchDir$[rnex]","*.exe")
ListBoxAddItem("TempSetupList","RESET")
For i=1 To CBK_NumInList
      LoadText("file$","<List>i")
      If (SearchDir$[rnex]=ExtractDrive(file$)+ExtractDir(file$)) Then
        ListBoxAddItem("TempSetupList","<List>i")
      End
Next i
SongListReset()
ListBoxGetItems("TempSetupList","<List>")
If (CBK_NumInList>1) Then
      If (CBK_NumInList<5) Then
        abc$=' исполняемых файла.'
      Else
        abc$=' исполняемых файлов.'
      End
      ***Заголовок сообщения
      Title$ = 'Ошибка запуска файла "'+SearchDir$[rnex]+'"'
      ***Текст сообщения
      Text$ = 'В папке "'+SearchDir$[rnex]+'" находится '+CHAR(CBK_NumInList)+abc$+' Открыть папку "'+SearchDir$[rnex]+'" в Проводнике?'
      ***Флаги (подробности смотри в справке)
      Flag= 1 + 48 + 0
      ***время, через которое окно закроется само
      timeout=0
      Params$ = Text$+','+CHAR(Flag)+'[, '+CHAR(timeout)+']'
      MessageEx("Title$","Params$")
      bu=CBK_MsgEx
      ***если нажали ОК, или время истекло(измените для этого параметр timeout=0), то
      If (bu <= 1) Then
        ***открываем папку(которая соответствует кнопке установки) в проводнике
        Run("Explorer","SearchDir$[rnex]")
      End
Else
      ***иначе(если файл один) запускаем файл из первой строки
      If (CBK_NumInList=0) Then
        Text$='В папке '+SearchDir$[rnex]+' нет исполняемых файлов.'
        Message("Text$","")
      Else
        LoadText("runfile$","<List>1")
        Run("runfile$","")
      End
End
SongListEd it()

И еще, зачем здесь SongListEdit()?

Добавлено (04 Апрель 2008, 12:58)
---------------------------------------------
По градиенту - молодец! Ты будешь хорошим креатором на ММВ.
Код, конечно, надо оптимизировать, но принцип хороший.

Code

h=PubHeight()/100
w=PubWidth()
x=0
red=h/PubHeight()*15
green=h/PubHeight()*46
blue=h/PubHeight()*42
inlabel$='Grad-01'
For n=0 To PubHeight()/h
      y=n*h
      r=98-red*n
      g=160-green*n
      b=232-blue*n
      CreateRectangle("inlabel$","outlabel$,x,y,w,h,r,g,b")
      SetO bject Param("outlabel$","BORDERCOLOR=r,g,b")
Next n

Поясню - все, что можно, нужно вынести за цикл. Зачем тебе надо, чтобы при каждом проходе цикла по новой шли вычисления переменных, которые не меняются в цикле?
Теперь по вопросам:
1) Имена создаются не одинаковые, а Grad-01, Grad-011, Grad-012...Grad-01100. Программа автоматом изменяет одинаковые имена.
2) При помощи команды ReorderObject("ИмяОбъекта","FRONT|BACK|FORWARD|BACKWARD")
3) Ну ты же только что без использования графики написал градиент...

Добавлено (04 Апрель 2008, 13:23)
---------------------------------------------
Какие-то странные глюки по форуму гуляют. Пробелы где попало иногда появляются...

Сообщение отредактировал Rush - Пятница, 04 Апреля 2008, 13:21
 
RVRdpДата: Понедельник, 07 Апреля 2008, 10:33 | Сообщение # 25
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
Quote (Rush)
Идем дальше - ну и нагорожено же тут... smile

Я и сам заметил что много чего лишнего, Сам путаюсь, но больше не в своём коде а то что было написано до меня, я же не с нуля пишу.

Quote (Rush)
ErrEXE$[z] - откуда взялась эта переменная, да еще и из массива переменных. Где определяется та же "z"?

biggrin А это я заменил полный путь к папке, названием папки, изначально думал что строка в ошибке будет длинной и сделал по короче. Зачем писать полный путь если пользоватьль откроет папку в проводнике и увидит этот путь там если ему надо будет!

Quote (Rush)
Не проще написать так?
Code...

Да ты сделал по этому коду всю работу за меня smile Спасибо!!!

Quote (Rush)
По градиенту - молодец! Ты будешь хорошим креатором на ММВ. Код, конечно, надо оптимизировать, но принцип хороший.

Ещё раз спасибо!!!
Потом как доберусь до этого кода, планирую вместо количества на сколько сдвинуть цвет чтоб вводился конечный цвет! Так намного будет удобней, код останется тем же но ещё добавится авто определения на какое число сдаигать цвет. ещё бы не плохо чтоб он сам определял какое знак ставить плюс или минус, но я не знаю как это сделать. Например если второй цвет больше по числу то плюс, если меньше то минус. Я даже уже пробовол вот это: r=98+'-'+red*n где знак '-' или '+' определяется по скрипту, который к сожалению уже не помню. Ясно дело что бред, я и не надеялся что прокатит, но попробовать то стоило же. happy

Quote (Rush)
3) Ну ты же только что без использования графики написал градиент...

Ну да написал. Я имел ввиду до меня кто нибудь подобное делал! И есть ли скрипты по созданию градиента проще чем у меня? Или есть какие либо стандартные комманды где градиент создается типа такой команды grad(r,g,b, to r,g,b,)?

PS: Извиняюсь за задержку в работе, а так же ответах на форуме, очень мало свободного времени!

Quote (Alex3A)
Проверить последнюю букву.
s$='C:\...\Soft\System\Crack\crack.exe1'
c=LEN(s$)
b$=StrGet(s$,c)
If (b$='1') Then
Message("popal","s$")
Else
Message("ne popal.","b$")
End

Думал куда же его прикрутить этот код, и вот нашел. Он у меня будет определять расширение установочного файла имя которого не известно! Принцип работы скрипта понятен, только вот не могу понять что нужно сделать чтоб в этой переменной b$= содержался не один символ а три например! тоесть мне нужно узнать какое расширение в конце строчки exe или msi, а в данный момент я могу узнать e там или i.
В общем он будет искать файлы с расширением exe если нет то msi или ещё там какие есть установочные! и то что он найдет передаст другому коду для поиска имени файла этого расширения. ну а дальше запуск этого файла.
Сложность в том когда будут и exe и msi! Попробую чего нибудь придумать!


Вся жизнь сплошной код! (RVRdp)
 
toizyДата: Понедельник, 07 Апреля 2008, 10:44 | Сообщение # 26
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (RVRdp)
мне нужно узнать какое расширение

ExtractFileExt


Жизнь оказалась не такой уж и забавной, как поначалу...
 
RushДата: Понедельник, 07 Апреля 2008, 13:34 | Сообщение # 27
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Quote (toizy)
ExtractFileExt

Ну это не в ММВ. smile
В ММВ - ExtractExt
RVRdp, если полностью, то
Code
b$=ExtractExt(Path$)

А узнать определенное к-во символов с конца можно так:
Code
txt$='Тут находится текст, из которого нужно получить, например, 3 символа справа'
** просто от длины текста отнимается именно столько символов, сколько нужно получить
len=LEN(txt$)-3
rightTxt$=StrDel(txt$,1,len)
 
toizyДата: Понедельник, 07 Апреля 2008, 16:57 | Сообщение # 28
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (Rush)
Ну это не в ММВ.

Ну у меня три синтаксиса перемешались smile Я думаю, в целом понятно.


Жизнь оказалась не такой уж и забавной, как поначалу...
 
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Не постоянный путь к файлу в строковой переменной (Как мне сделать так чтобы по кнопке запускался "setup.exe",)
  • Страница 1 из 1
  • 1
Поиск: