Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

CreatoR:

$iMsgBoxAnswer = 7While $iMsgBoxAnswer == 7$var = FileSelectFolder("Select the directory...", "")$var = StringReplace($var, "|", @CRLF)$iMsgBoxAnswer = MsgBox(292," ","You chose "& $var & @CRLF&@CRLF &"Are you sure?")WendFileWrite ( "file.tmp", $var )
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Оказывается ты и AutoIt знаешь! :)

Дело вот в чём:

В твоём примере, если я нажму в окне на 'ОК', то появится вопрос - уверен ли в своём выборе, и если да, то результат вписывается в файл. И также если я нажму на 'Отмена', появится тот же вопрос (тоже окно), и также если отвечаю положительно, то в файл вписывается результат (т.е ничего не вписывается, но файл создаётся). А мне нужно, чтобы при нажатии на 'Отмена', появлялся вопрос, при котором положительный ответ ('ДА'), завершит работу скрипта. Но, при нажатии на 'ОК', в файл будет вписан результат! (или также чтобы появлялся вопрос, но другой, который спрашивает уверен ли я в своём выборе, и если ДА, то в файл впишется результат, а если нет, то окно для выбора каталога обратно появится.

И ещё, как сделать запрос, на существование пути (каталога) в компьютере?

Я пробовал так, но как я понимаю это только для файлов:

;Находим путь к файлу по переменной (вроде того)$search = FileFindFirstFile("$var");Проверка результата поискаIf $search = -1 Then;Действие в случае если результат ошибочны (т.е если файл не был найден)MsgBox(0, "Ошибка", "Файлы/папки не обнаружены")ExitEndIf

Тут в коде, присутствует $var, и для этого параметра, значение равняется выбору пользователем каталога в диалоговом окне (т.е перед всем этим, должен стоять код из твоего примера - кстати, тут, также желателно поставить возврат на начало файла, в случае если файл (т.е каталог) не был найден - ну, если например юзер, выберет не каталог или диск, а, допустим панель управления).

Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

doif FileExists("file.tmp") then FileDelete("file.tmp")$var = FileSelectFolder("Select the directory...", "")if $var == "" then $var="nothing"$iMsgBoxAnswer = MsgBox(292," ","You chose " & $var & @CRLF&@CRLF &"Are you sure?")if $var <> "nothing" then FileWrite ( "file.tmp", $var )until $iMsgBoxAnswer==6
И ещё, как сделать запрос, на существование пути (каталога) в компьютере?
Точно так же, как в скрипте вверху проверяется существование файла, файл это или каталог, для функции FileExists не имеет значения.

Если ты хочешь ввести проверку на то, что выбранная папка является каталогом, то скрипт будет выглядеть так:

doif FileExists("file.tmp") then FileDelete("file.tmp")$var = FileSelectFolder("Select the directory...", "")if not FileExists($var) then $var="no directory"$iMsgBoxAnswer = MsgBox(292," ","You chose " & $var & @CRLF&@CRLF &"Are you sure?")if $var <> "no directory" then FileWrite ( "file.tmp", $var )until $iMsgBoxAnswer==6 
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Огромное тебе Спасибо!

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

doDim $iMsgBoxAnswerif FileExists("c.tmp") then FileDelete("c.tmp")$var = FileSelectFolder("Выбирите каталог...", "")If @error Then $iMsgBoxAnswer = MsgBox(292, "Вопрос...", "Вы уверенны?")If $iMsgBoxAnswer = 6 Then ExitIf Not FileExists($var) Then MsgBox(48,"Warning","Вы Выбрали " & $var & @CRLF&@CRLF & "В этото место невозможно сохранить архив!" & @CRLF&@CRLF & "попробуйте ещё раз...")If FileExists($var) Then $iMsgBoxAnswer = MsgBox(292," ","Вы Выбрали " & $var & @CRLF&@CRLF &"Вы уверенны?")If $iMsgBoxAnswer = 6 Then FileWrite ( "c.tmp", $var )until $iMsgBoxAnswer==6

Но, когда я нажимаю в окне выбора каталога, на кнопку 'Отмена', и в окне которое появляется, нажимаю 'Нет' (Т.е если я передумал, и хочю обратно окно выбора каталога), то появляется сначало окно которое сообщает, что я выбрал (ничего), и что нужно попробовать ещё раз (и затем выводит окно для выбора каталога). Вот было бы неплохо, если бы это окно (которое сообщает что я выбрал (ничего), и что нужно попробовать ещё раз), не выводилось бы после нажатия на 'Нет'.

Извени за назойливость, но у меня есть ещё одна маленькая просьба :) :

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

Вот состав обоих скриптов:

FileDelete("ask.tmp")

$AC_SOURCH = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_SOURCH")

Do

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

$iMsgBoxAnswer = MsgBox(262435,"Варианты....","Было 'обнаруженно', что существует каталог..." & $AC_SOURCH & @CRLF&@CRLF & "Если хотите, "Нажмите 'Да' (Будет сделанно копирование)" & @CRLF&@CRLF & "Если не хотите, Нажмите 'Нет' (Будет вывод окна в котором вы сможете указать свой путь)" & @CRLF&@CRLF & "Для отмены нажмите 'Отмена'")

If $iMsgBoxAnswer = 2 Then Exit

If $iMsgBoxAnswer = 6 Then FileWrite ( "ask.tmp", "y" )

Exit

Until $iMsgBoxAnswer = 7

do

Dim $iMsgBoxAnswer

if FileExists("c.tmp") then FileDelete("c.tmp")

$var = FileSelectFolder("Выбирите каталог в который будет помещена резервная копия ваших личных настроек...", "")

If @error Then $iMsgBoxAnswer = MsgBox(292, "Вопрос...", "Вы уверенны что хотите отменить 'Архивирование Личных Настроек' Opera AC?")

If $iMsgBoxAnswer = 6 Then Exit

If Not FileExists($var) Then MsgBox(48,"Warning","Вы Выбрали " & $var & @CRLF&@CRLF & "В этото место невозможно сохранить архив!" & @CRLF&@CRLF & "попробуйте ещё раз...")

If FileExists($var) Then $iMsgBoxAnswer = MsgBox(292," ","Вы Выбрали " & $var & @CRLF&@CRLF &"Вы уверенны?")

If $iMsgBoxAnswer = 6 Then FileWrite ( "c.tmp", $var )

until $iMsgBoxAnswer==6

Тут, где выделенно зелёным цветом, это тот скрипт, который должен вызватся в том случае, если небыл найден путь по переменной.

Там где выделенно красным цветом, я немогу сделать проверку переменной (это только если присутствует в скрипте второй скрипт - тот который выделен в зелёный цвет).

А вообще, основная просьба, заключается вот в чём:

-Нужно сделать проверку двух переменных (%OPERA_SOURCH% и %OPERA_BACKUP%), и если хотябы одна найдена, то будет вывод сообщения ($iMsgBoxAnswer = MsgBox(262435,"Варианты....), но, в этом сообщении, указывается значение переменной, и нужно чтобы оно было показанно в соответствии с той переменной, для которой выводится это сообщение. Также предпочтение останавливается на переменной %OPERA_SOURCH%, т.е если найдены две переменные, то первый раз выводится сообщение для первой, а если в этом сообщении юзер нажмёт 'Отмена', то будет выведенно второе сообщение, где будет указана вторая переменная (%OPERA_BACKUP%).

Ну а если переменные не были найденый, то пусть скрипт продолжает действия со второго куска (там где он обозначен зелёным цветом).

P.S:

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

Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

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

-Нужно сделать проверку двух переменных (%OPERA_SOURCH% и %OPERA_BACKUP%)

$var1 = EnvGet("OPERA_SOURCH")

$var2 = EnvGet("OPERA_BACKUP")

и если хотябы одна найдена, то будет вывод сообщения ($iMsgBoxAnswer = MsgBox(262435,"Варианты....)....), но, в этом сообщении, указывается значение переменной, и нужно чтобы оно было показанно в соответствии с той переменной, для которой выводится это сообщение. Также предпочтение останавливается на переменной %OPERA_SOURCH%, т.е если найдены две переменные, то первый раз выводится сообщение для первой, а если в этом сообщении юзер нажмёт 'Отмена', то будет выведенно второе сообщение, где будет указана вторая переменная (%OPERA_BACKUP%).

Перефразирую:

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

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

$var=0

if $var1<>"" then $var=MsgBox(1, "OPERA_SOURCH is: ", $var1)

if $var2<>"" and ($var1=="" or $var==2) then MsgBox(1, "OPERA_BACKUP is: ", $var2)

Ужасную константу 262435 я не использую из-за непонятности, полагаю, что не только мне, но и MsgBox'у. Эта константа, определяющая вид и поведение MsgBox, берется как сумма трех чисел, самое большое из которых может быть 8192, а остальные значительно меньше. Скорее всего, MsgBox просто отрежет от константы излишки.

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

EnvSet("OPERA_SOURCH","AAA")EnvSet("OPERA_BACKUP","BBB")$var1 = EnvGet("OPERA_SOURCH")$var2 = EnvGet("OPERA_BACKUP")$var=0if $var1<>"" then $var=MsgBox(1, "OPERA_SOURCH is: ", $var1)if $var2<>"" and ($var1=="" or $var==2) then MsgBox(1, "OPERA_BACKUP is: ", $var2)

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

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Проблемы программирования - это в первую очередь проблемы ясного выражения своих мыслей

Да, ты абсолютно прав :) . У меня главная проблема, связанна именно с выражением своих мыслей (с правильным выражением). - Но думаю если бы у меня было по-больше знании (в программировании), то наверное эта проблема исчезла бы.

Поэтому постараюсь объяснять на примерах, а не на словах (на сколько это возможно :bye1: ).

Ужасную константу 262435 я не использую из-за непонятности, полагаю, что не только мне, но и MsgBox'у.

Я согласен что она ужасная, но дело в том, что мне именно она нужна, так как мне нужно 3 кнопки (если есть другая, менее ужасная, и заменяющая эту, то буду рад узнать её :) ).

$var1 = EnvGet("OPERA_SOURCH")

$var2 = EnvGet("OPERA_BACKUP")

Тут мне немного непонятно. У меня в системе, переменная OPERA_BACKUP существовала, но после того как я её удалил (для теста), скрипт всё ровно выдавал мне её значение. Т.е для него она как бы до сих пор существует.

А вообще, команда RegRead, замечательно справляется с нужной задачей (правда нужно указать путь к ветке в реестре).

Вобщем с переменными, я почти разобрался. Я прикрепил к посту архив (Test.zip), а в нём два файла - 1 скрипт, и 1 екзэшник.

Исходник екзэшника, есть в самом скрипте (в конце, там где коментарии ;Script # 2), но мне не удаётся почему-то исполнить его (исходный код) из скрипта.

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

Во-первых, если первая переменная отсутствует (т.е путь на основе её значения), то вторая не проверяется.

Во-вторых, Если обе отсутствуют, то по идее, должен исполнятся второй скрипт (тот который после коментариев ;Script # 2), но этого не происходит, и скрипт как будто виснет в системе, т.е иконку в трее видно, но ничего не происходит.

А екзешник, запускается самим скриптом (если юзер, в окне которое выводится если переменные были найдены, нажмёт 'Нет'), но мне нужно чтобы был не запуск екзешника, а переход по скрипту, в то место где указанный коменты ;Script # 2. -Я в самом скрипте, поставил коментарии там где нужно делать поправки - присмотрись к этим коментам плз (если не трудно).

В этом экзешнике, также есть не большой баг - если его (екзэшник :) ) запустить, и нажать в появившемся окне 'Отмена', то будет выведенно окно, где спрашивается, уверен ли юзер что нужно отменить, и, если нажать 'Нет', то выводится окно, которое должно выводится если нажать на 'ОК', и лишь затем появляется первоначальное окно где делается выбор каталога. Вот как бы убрать вывод этого окна, и чтобы сразу был возврат в первоначальное окно? :) (также в скрипте есть коменты и на эту проблему - в куске скрипта под коментами ;Script # 2).

P.S:

Наверное опять намудрил тут так, что завтра и сам не пойму что написал :)

Test.zip

Test.zip

Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

Насчет кнопок: если хочешь, чтобы было три кнопки, надо использовать константу 3. А если ты хочешь, чтобы в окне была иконка со знаком вопроса, то добавляется 32, итого получается 35. Именно до 35 MsgBox и укорачивает твою константу, все остальные цифры с левой стороны в твоей константе для него китайская грамота и отбрасываются.

Кстати, эти странные числа: 32 (это 2 в пятой степени) или упоминавшееся мной раньше 8192 (это 2 в тринадцатой степени) - это такие числа, которые в двоичном представлении дают 1 в каком-то разряде, MsgBox проверяет не собственно число, а наличие единиц в определенных разрядах двоичного представления числа. А в твоей константе некоторые единицы стоят в таких разрядах, которые MsgBox вообще не проверяет.

С чтением несуществующей больше переменной окружения - тут дело в том, что кроме исходного окружения для быстроты доступа для окружения делается его копия в оперативной памяти, с нее может делаться для временных изменений еще одна (а то и несколько) копия, и куда именно вносятся изменения и какая из копий читается, часто неясно. Для таких случаев в AutoIt есть функция EnvUpdate ( ) - обновить копию окружения, но она из-за наличия нескольких копий не всегда срабатывает для нужной копии. Все это так называемые "недокументированные особенности", с которыми приходится разбираться "методом проб и ошибок".

Раз у тебя работает функция обращения к реестру, то это уже не актуально и можно на этом больше не задерживаться.

Во-первых...
Я же привел в посте выше образец, в котором все вроде бы происходит так, как тебе хочется. Заметь, что он написан переводом с русского на скриптовый.
Во-вторых...
У меня Opera не установлена, так что скрипт, также не обнаружив переменных окружения, ничего выводить не стал, и первый же цикл DO ... UNTIL стал бесконечным, так как все выходы из него основываются на результатах нажатия кнопок в MsgBox, который при отсутствии переменных вообще не выводится. Видимо, подобное происходит и у тебя. Далее смотри снова мой ответ на "Во-первых...".

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

Могу посоветовать только начать с очень простого алгоритма и постепенно его усложнять, приближаясь постепенно к тому, что хочется, но не переходя к очередному усложнению, пока предыдущая программа не будет работать безукоризненно. И еще одно полезное правило относительно этих усложнений: старайся никогда не вносить в программу сразу несколько изменений. Нет хуже, чем написать сразу нечто сложное, не работающее по восемнадцати причинам, и их постепенно вылавливать. Такие программы писать - одно удовольствие, но отладка их - для программистов преисподней, осужденных на вечные муки. Больше того, тут можно держать пари, что все ошибки так никогда и не будут выловлены.

Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Я же привел в посте выше образец, в котором все вроде бы происходит так, как тебе хочется. Заметь, что он написан переводом с русского на скриптовый.

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

Но всё-же мне удалось создать то, что мне и нужно было! И я даже поправил все баги и ошибки во втором скрипте.

Так что если интересно что я там натворил :) , то я прикрепил готовый скрипт, и также прикладываю специально заготовленные 2 батника, один создаёт нужные переменные (со значениями c:\ и d:\), а другой удаляет (после первого удаления я поставил паузу, чтобы можно было проверить скрипт) -Батники, это для проверки функциональности скрипта!

У меня есть также один вопрос:

*При запуске диалога для выбора файла, возвращается значение в переменную $var (что-то в этом роде):

$var = FileOpenDialog("Выбирите архив...", "", "Zip (*.zip)")

Но когда я пытаюсь записать результат в файл:

FileWrite("c.tmp", $var)

То файл (c.tmp) сохраняется в том каталоге, где и был выбран архив.

Следовательно вопрос: Как мне осуществить сохранение файла (c.tmp), в текущем каталоге? т.е в том каталоге где и находится сам скрипт. Но чтобы ненужно было указывать полный путь, так как запускаться скрипт будет постоянно с разных мест.

P.S:

Я дожен сказать, что все твои советы, и все наводки, привели меня к решению многих проблем, и не только связанных именно с программированием. Так что на этом, тебе огромное ;)

Backup_Final.zip

EnvCreate_Delete.zip

Backup_Final.zip

EnvCreate_Delete.zip

Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

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

$var=0

if $var1<>"" then $var=MsgBox(1, "OPERA_SOURCH is: ", $var1)

if $var2<>"" and ($var1=="" or $var==2) then MsgBox(1, "OPERA_BACKUP is: ", $var2)

в ответ на твое замечание

если первая переменная отсутствует (т.е путь на основе её значения), то вторая не проверяется.
А насчет отображения устаревших значений измененных переменных, твое замечание относится к командам

$var1 = EnvGet("OPERA_SOURCH")

$var2 = EnvGet("OPERA_BACKUP")

У меня в тестовом примере они правильно читают значения переменных, но я и устанавливаю значение этих переменных в этом же примере, У тебя это может быть иначе, смотря когда и чем устанавливаются эти переменные. Я же сказал: эти команды могут не замечать изменение переменных из-за существования разных копий окружения, иногда это исправляется командой EnvUpdate ( ), но раз ты уже с успехом обошел эту проблему чтением значения переменной из реестра командой RegRead, то это уже неактуально.

Как мне осуществить сохранение файла (c.tmp), в текущем каталоге? т.е в том каталоге где и находится сам скрипт.
Каталог, где находится сам скрипт, выдается макросом (используется так же, как и переменная) @ScriptDir. Добавить туда \ и имя файла для использования в команде FileWrite для тебя, наверно, не составит труда.
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Добавить туда \ и имя файла для использования в команде FileWrite для тебя, наверно, не составит труда.

Нет, не составило :D :

FileWrite(@ScriptDir&"\c.tmp", $var)

P.S:

Большое спасибо! Всё что нужно, было Достигнуто! :D

Ссылка на комментарий
Поделиться на другие сайты

Буду благодарен если кто-то мне поможет осуществить следующую задачю (по VBS):

В приведённом мной ниже коде, нужно внести изминения так, чтобы зажимались две клавишы (Ctrl+Shift), и чтобы они оставались зажатыми до тех пор, пока определённый процесс в системе, не будет завершён, или пока сам процесс скрипта не будет принудительно завершён внешней программой. И если возможно, то чтобы после завершения того самого процесса, скрипт не закрывался, а как бы уходил в спячку - Tипа: Sleep(Until ProcessExists("process.exe")), и просыпался при появлении того же процесса, из-за которого он и ушёл в спячку!

-Процесс: Opera.exe

Вот состав скрипта, который на данный момент, имитирует зажатие клавиши ENTER, но зажатие происходит так, как будто бы я на секунду, сам нажал бы на клавишу ENTER:

DIM WshSet Wsh = WScript.CreateObject("WScript.Shell")Wsh.SendKeys "{Enter}"'quitSet Wsh = nothingWScript.Quit

P.S:

И ещё маленьки вопрос по AutoIt :blink: :

* Нужно каким то образом, распознать передаваемый ключь (рефферер) внешней программой, в скрипт. Т.е, программа (а точнее браузер Опера), посредствам контекстного меню, запускает закомпилированнй скрипт, и при этом, передаёт ему ключь. Это происходит примерно таким образом:

Item, "Script" = Execute program, "Script.exe", "%A"

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

Ссылка на комментарий
Поделиться на другие сайты

Нужно каким то образом, распознать передаваемый ключь (рефферер) внешней программой, в скрипт.

На этот вопрос нашёл решение:

Select; В случае если передан ключь 1, то чуть ниже этой команды (до следующей такой-же) будет что-то делаться!Case $CmdLine[1] = 1....; В случае если передан ключь 2, то чуть ниже этой команды (до следующей такой-же) будет что-то делаться!Case $CmdLine[1] = 2....и т.дEndSelect

---------------------

Вместо этой задачи, появилась другая :sm(100): :

Нужно сделать скрипт vbs, после запуска которого, в файл (*.bmp) будет записанно содержимое буффера обмена (картинка).

А если это трудновато сделать, то тогда хотябы сделать следующее:

Запустить программу, затем подождать пару (6-7) секунд, и нажать Ctrl+V

У меня получилось всё, кроме задержкий:

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run ("""%windir%\system32\mspaint.exe """ )

'Тут должна быть задержка на 6-7 секунд

DIM Wsh

Set Wsh = WScript.CreateObject("WScript.Shell")

Wsh.SendKeys "^{v}"

'quit

Set Wsh = nothing

WScript.Quit

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

Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

Замени строку с красным шрифтом на

WScript.Sleep (4000)

Для проверки работы, перед запуском возьми в буфер обмена, например, вид экрана нажатием Print Screen.

Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Спасибо!

2 ALL

Нужно сделать скрипт vbs, по запуску которого, из буффера обмена, будут считываться данные (текст), и затем записываться в текстовый файл (допустим, в Session.txt), но чтобы при повторном запуске этого скрипта, данные из буффера дополняли существующий текстовый файл, а не перезаписывали прежние существующие в нём данные.

---------------

И ещё, есть небольшой вопрос - Как имитировать нажатие клавиш Shift и Alt (не вместе, а по отдельности)? вот например, имитация нажатия клавиши Ctrl, делается так: Wsh.SendKeys "^", клавишы Enter, так: Wsh.SendKeys "{Enter}", а вот хотелось бы узнать как для Shift и для Alt :blushing:

Заранее благадарю!

Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

  • 5 недель спустя...
как для Shift и для Alt

Нашёл ответ - Для Shift - + (плюс) для Alt - ! (восклицательный знак).

------------------

Есть такая задача:

в принципе не важно на каком языке (хотя желательно на AutoIt, или на vbs), нужно проверять существует ли файл по ссылке. Т.е в общем-то, нужно проверять не является ли битая ссылка.

P.S:

Можно даже через код JavaScript, Но чтобы если ссылка битая, выводился алерт с вопросом, и если ответить да, то чтобы происходил переход на определёный сайт, а если нет, то чтобы ничего не происходило. Ну а если ссылка не битая, то чтобы просто был алерт с одной кнопкой ОК.

Буду благодарен если сможет кто нибудь помочь, очень нужно.

Ссылка на комментарий
Поделиться на другие сайты

  • 5 недель спустя...

Помогите, пожалуйста, очень надо!

Короче, вот:

"В шашечном эндшпиле остались белая дамка и две черные шашки, позиции которых известны. Ход белых. Сможет ли дамка срубить одну или сразу обе шашки?"

Необходимо решить, только с применением условных операторов - без циклов, массивов и т.д.

Ссылка на комментарий
Поделиться на другие сайты

У меня три харда на 1.6 тб. Почти все забиты фильмами. Возникает потребность их каталогизировать. Для этого юзаю ТС. Файлы на панель/ сохранить в файл.

Только список авишек получается вместе с дорогой к ним. Можно сделать так, чтобы в списке сохранялись только сами фильмы?

Ссылка на комментарий
Поделиться на другие сайты

rick1:

Можно сделать так, чтобы в списке сохранялись только сами фильмы?

Если речь идёт о Total comander, то навярнека есть для этого либо настройки, либо дополнительные плагины.

Я могу предложить альтернативный вариант:

Создаёшь батник (файл с расширением *.bat), и пишешь в нём всего одну строчку:

for /f "delims=" %%a in (list.txt) do echo %%~na >> cleanlist.txt

Там где (list.txt), нужно подставить имя файлаи (и путь к нему по необходимости) содержащего список фильмов с путями, а имя файла после символов >>, это тот файл в который будет помещаться новый список, но уже с очищеными от путей именами фильмов (если файл не существует, он будет создан).

Если нужно чтобы в новый список попали имена без расширении файлов (*.avi - к примеру), то строчка должна быть такой:

for /f "delims=" %%a in (list.txt) do echo %%~nxa >> cleanlist.txt
Ссылка на комментарий
Поделиться на другие сайты

Здрасьте всем.

Помогите,пожалуйста, решить одну задачку на Си (MVC 6).

Нужно сделать редактор MP3-тэгов. Т.е. считать инфу из mp3 в структуру, добавить возможность изменять данные в структуре и потом сохранить результат. Вот сохранить-то изменения не могу(не знаю как).

Кусок кода приведу здесь, но если кто-нибудь свой метод предложит, то милости прошу.

#include<stdio.h>#include <stdlib.h>struct Mp3_Tag{char Id[3];char Title[30];char Artist[30];char Album[30];char Year[4];char Comment[30];char Genre[1];} Tags;void output(struct Mp3_Tag x) {printf("Id......: %s\n", x.Id);printf("Title....:%s\n", x.Title);printf("Artist...:%s\n", x.Artist);printf("Album....:%s\n", x.Album);printf("Year.....:%s\n", x.Year);printf("Comment..:%s\n", x.Comment);printf("Genre....:%s\n", x.Genre);}int main(void){ char a;FILE *fp;fp = fopen ("01 Little Wing.mp3","rb");if(!fp){	printf("File is not found\n");	return 0;}fseek(fp, -(sizeof(Tags)), SEEK_END);fread(&Tags, sizeof(Tags), 1, fp);fclose(fp);output(Tags);printf("Do you want to change information?");scanf("%s", &a); switch(a){case 'y':case 'Y':	printf("New information:\n");	fseek(fp, -(sizeof(Tags)), SEEK_END);	fwrite(&Tags, sizeof(Tags), 1, fp);	scanf("%s", Tags.Id);	scanf("%s", Tags.Title);	scanf("%s", Tags.Artist);	scanf("%s", Tags.Album);	scanf("%s", Tags.Year);	scanf("%s", Tags.Comment);	scanf("%s", Tags.Genre);	fclose(fp);	output(Tags);	break;case 'n':case 'N':	printf("No changes\n");	break;default:	printf("Wrong input. The program will be closed\n");}return EXIT_SUCCESS;}

Спасибо и успехов.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Народ, помогите плиз! Очень надо прогу сдать, а я в паскале плохо шарю(

Задача такая: Вводится файл целых чисел, требуется отсортировать числа в файле по возрастанию.

Сам алгоритм сортировки можно не писать, тут я справлюсь, а вот с файлами выручайте.

Ссылка на комментарий
Поделиться на другие сайты

vjik:

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

varF:file of Integer; i,j,k,t: Integer;a:array[1..1000] of Integer;beginAssign(F,'MyFile'); Reset(F);k:=0;while not Eof(F) dobegininc(k);Read(F,a[k]);{WriteLn(a[k]);}end;for i:=1 to k dofor j:=1 to k-i doif a[j]>a[j+1] then begin  t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end; Rewrite(F);for i:=1 to k doWrite(F,a[i]);close (F);end.

Принято, что целые числа находятся в файле MyFile в двоичном (машинном) формате. Программа читает содержимое файла в массив в оперативной памяти, сортирует его и перезаписывает отсортированный массив обратно в файл.

Чтобы проверить, что было в файле, можно раскомментировать оператор WriteLn(a[k])

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

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

Для испытания программы надо создать какой-то тестовый файл с целыми числами в двоичном формате. Это можно сделать, например, такой программкой:

var F:file of Integer; k:Integer;beginAssign(F,'MyFile'); Rewrite(F); repeatReadLn (k); if k<>0 then Write(F,k); until k=0; close (F);end.

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

Ссылка на комментарий
Поделиться на другие сайты

Люди выручайте! Нужно сделать две програмы на Паскале

1. Засыпать экран снегом: сверху экрана падают снежинки и останавливаются на тех, что уже лежат пушистым ковром и так до самого верха.

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

Ссылка на комментарий
Поделиться на другие сайты

ts@ndr:

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

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

Скорость падения снежинок изменяется аргументом процедуры Delay.

Clock.zip

Snow.zip

Clock.zip

Snow.zip

Ссылка на комментарий
Поделиться на другие сайты

Тролль

Супер :cool: !!! Это как раз то что мне нужно! Процентов 90% (если даже не больше) уже готово :) а остальное подправить не составит труда.

ОГРОМНОЕ СПАСИБО!

Изменено пользователем ts@ndr
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...