Готовые решения

Обсуждение программ nnCron и nnCron LITE

Postby VoidVolker » Mon, 26 Mar 2007, 20:50

Вот, окончательная версия SEND-STRING - ускорил еще немного.
Code: Select all
\ Жмет нампад-цифру
: xnkdu DUP specKeyDN specKeyUP ;   ( x+96 -- )

\ Жмет нампад-цифру по ANSCII коду цифры по адресу addr
: ankdu  C@ 48 + xnkdu ;   ( addr -- )

\ Печатает одиночный символ
: SEND-SMB   { \ a -- }   ( хxx -- )
18 specKeyDN
96 xnkdu  N>S  SWAP TO a  0 DO  a I + ankdu  LOOP
18 specKeyUP
;

\ Печатает кавычки
: SND-QUOTE 18 specKeyDN 96 xnkdu 96 xnkdu 99 xnkdu 100 xnkdu  18 specKeyUP ;

\ Берет со стека строку символов и отправляет эти символы активному окну независимо от раскладки клавиатуры
\ Здесь используется одна не очень широко известная возможность винды:
\ зажав альт и набирая на нампаде код символа - активное окно получит этот символ,
\ как если бы на клавиатуре была нажата соответствующая кнопка :)
\ Является универсальным за счет использования локальных переменных, длина строки не ограничена
: SEND-STRING { a u -- }
u 0 DO  a I + C@ SEND-SMB  LOOP
;
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby VoidVolker » Wed, 28 Mar 2007, 20:55

Цикл для обработки каждой строки файла - аналог FOR-FILES:
Code: Select all
CREATE FEXIT-RBL 1 ALLOT
: RBL-EXIT -1 FEXIT-RBL C! ;

: (READ-BY-LINE) { xt \ Lf Lc -- }  ( a u xt -- )
    10240   \ максимальная длина строки (в символах)
    ALLOCATE THROW TO Lc  0 FEXIT-RBL С!
    R/O OPEN-FILE-SHARED THROW TO Lf
    BEGIN Lc 10238 Lf READ-LINE THROW
    FEXIT-RBL C@ IF 2DROP DROP 0 THEN
    WHILE
    Lc + 0 SWAP C!
    Lc ASCIIZ> xt EXECUTE
    REPEAT  DROP
    Lf CLOSE-FILE DROP
    Lf FREE DROP
;

: READ-BY-LINE \ compile: ( -- )
            \  execute: ( a u --)
    POSTPONE [NONAME
; IMMEDIATE

: ;READ-BY-LINE
    POSTPONE NONAME]
    POSTPONE (READ-BY-LINE)
; IMMEDIATE

: READ-BY-LINE: eval-string,  POSTPONE READ-BY-LINE ; IMMEDIATE

Прмер:
Code: Select all
READ-BY-LINE: "D:\test.txt"
 MsgBox
;READ-BY-LINE
Last edited by VoidVolker on Thu, 14 Jun 2007, 18:51, edited 2 times in total.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

USB Flash как "переносное рабочее место"

Postby iScape » Mon, 16 Apr 2007, 16:36

Набор "тасков" для улучшения некоторых аспектов работы с флешкой в режиме "переносного рабочего места" (для тех кто запускает IM, почту и хранит рабочие документы)
Ускоряет работу (заменой обращений к флешке на обращения к винчестеру); уменьшает кол-во операций записи/чтения для флешки; вероятно, продлевает жизнь девайсу. Тратит время на синхронизацию:) В некотором роде простенький бекап.
Поддерживаемые варианты использования:
1. Начало "сеанса" работы:
2. Завершение "сеанса" работы.
3. Выключение/перезагрузка рабочей станции.
4. Уведомление о работе с временными файлами для избежания редактирования неактивной копии.

Последовательность:
1. Начало "сеанса" работы:
Сбросить буфер флешки
Синхронизировать флешка -> HDD
Подвинуть флешку на запасной "путь"
Подставить папку на HDD вместо флешки (subst)
Запустить "менеджер" флешки
2. Завершение "сеанса" работы.
Остановить "менеджер" флешки
Сбросить буфер HDD
Убрать ссылку на HDD папку
Вернуть флешку на основную букву
Синхронизировать HDD -> флешка

Код в работе 3 дня, так что будьте осторожны.
Есть есс-но и недостатки, но для меня они приемлемы.

Code: Select all
# File/ver:         USBFlash.tab / v1.0.3
# Author:            Pavel Gorbanj
# Description:   nnCron tasks "kit" that simplifies USB stick usage as a "portable" workplace (IM, browser, documents, etc).
#                        Increases operation speed; reduces number r/w requests to USB drive and therefore ("hopefully") extends drive lifetime.
#   Use cases:      1. Start work session.
#                        2. End work session.
#                        3. Workstation reboot/shutdown.
#                        4. Notification about access to temporary data location to prevent possible edit of inactive copy of data.
# Usage:            Ctrl+Alt + M(ount)/U(nmount)/R(emount). Mount autoruns with WinLogon; Unmount with Logoff/Shutdown;

# Dependences:   nnBackup (www.nncron.ru), remount (www.uwe-sieber.de), RemoveDrive (www.uwe-sieber.de), sync (www.SysInternals.com)
# Notes:            For TODO/"Setup", pls, navigate to the end of the file.
#                        Fixes/enhancements/suggestions are Welcome.
# Warning!:         the code can't be considered as a fine tested therefore, pls, be carefull while using it for the first time (and after:)
#                        THE SCRIPT IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE IT AT YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS SOFTWARE.
# Created:         14.04.2007
# Modified:         <date> (<description>)

#( Variables_declaration
   : sOriginalFlashDriveLetter S" K:" ; \ Drive letter that the Flash is using (for certain hard-coded links)
   : sTemporaryFlashDriveLetter S" U:" ; \ Drive letter that will be used for temporary Flash mounting while working from main source
   : sFlashFilesAtHDDPath S" D:/K" ; \ Path to Flash files at HDD

   : snnBackUpPath S" C:/Program Files/nnBackup" ;
   : snnBackUpParams S" sync -delete-before -c -dx '*PortableFirefox/profile/Cache/' -s -e -v -log D:/USBFlashSync.log" ;
   : sFlashUtilsPath S" C:/Program Files/USBFlashUtils" ; \ remount.exe, removedrive.exe, etc

   : sFlashInitProgram S" K:/Program Files/PStart/PStart.exe" ; \ Path to PStart (handles start/stop of apps IM, reminders, etc)

   VARIABLE SEM_MOUNT_UNMOUNT_IS_RUNNING \ Semaphore for syncing Mount/Unmount activities

   \ Hints-specific constants
   0x000000 CONSTANT HINT_BG_COLOR
   0xFFFFFF CONSTANT HINT_FG_COLOR
   18 CONSTANT HINT_FONT_SIZE
   : HINT_FONT_NAME S" Arial" ;
)#

# Runs
#      1. Automatically when USB Flash is detected by OS
#      2. Manually by user request
#( USB_Flash_Mount
   WatchDriveInsert: "%sOriginalFlashDriveLetter%"
   WatchHotKey: "^@M" \ ctrl + alt + "M"

   Rule: QUERY: "Mount?"

   SingleInstance

   Action:
      SEM_MOUNT_UNMOUNT_IS_RUNNING GET

      \ Disable task that watches for changes of temporary locations. (bug) 2
      \ TODO
      \ USB_Flash_Handle_Requests_to_Flash_location_at_HDD CF-ACTIVE CLR-CRON-FLAG
      \ USB_Flash_Handle_Requests_to_Flash_Temporary_Drive CF-ACTIVE CLR-CRON-FLAG

      \ Configure hints
      \ HINT_BG_COLOR HINT_FG_COLOR HINT-COLOR
      \ S" %HINT_FONT_NAME%" HINT_FONT_SIZE HINT-FONT

      \ Flush buffers for removable drive
      S" Flush buffers StartIn: %sFlashUtilsPath%" CRON-LOG
      StartIn: "%sFlashUtilsPath%"
      S" sync.exe -r %sOriginalFlashDriveLetter%" CRON-LOG
      START-APPW: sync.exe -r %sOriginalFlashDriveLetter%

      \ Sync files from Flash to Local folder
      \ HINT: "Syncronizing from Flash to HDD..."
      BALLOON: "%CUR-TASK-NAME%" "Syncronizing from Flash to HDD..."
      S" nnBackup: %snnBackUpPath%" CRON-LOG
      StartIn: "%snnBackUpPath%"
      S" nnbackup.exe %snnBackUpParams% -i %sOriginalFlashDriveLetter% -o %sFlashFilesAtHDDPath%" CRON-LOG
      START-APPW: nnbackup.exe %snnBackUpParams% -i %sOriginalFlashDriveLetter% -o %sFlashFilesAtHDDPath%
      \ HINT-OFF

      \ "Shift" real USB drive to another drive letter U:
      \ HINT: "Shifting USB drive to reserved drive letter..."
      BALLOON: "%CUR-TASK-NAME%" "Shifting USB drive to reserved drive letter..."
      S" Remount StartIn: %sFlashUtilsPath%" CRON-LOG
      StartIn: "%sFlashUtilsPath%"
      S" remount.exe %sOriginalFlashDriveLetter% %sTemporaryFlashDriveLetter%" CRON-LOG
      START-APPW: remount.exe %sOriginalFlashDriveLetter% %sTemporaryFlashDriveLetter%
      \ HINT-OFF

      \ Map Local folder to K:
      \ HINT: "Mapping HDD location to regular USB drive letter..."
      BALLOON: "%CUR-TASK-NAME%" "Mapping HDD location to regular USB drive letter..."
      S" subst %sOriginalFlashDriveLetter% %sFlashFilesAtHDDPath%" CRON-LOG
      START-APPW: subst %sOriginalFlashDriveLetter% %sFlashFilesAtHDDPath%
      \ HINT-OFF

      \ Run PStart from K:
      \ HINT: "Initializing USB drive manager..."
      BALLOON: "%CUR-TASK-NAME%" "Initializing USB drive manager..."
      S" PStart StartIn: %sFlashInitProgram ONLYDIR%" CRON-LOG
      StartIn: "%sFlashInitProgram ONLYDIR%"
      S" PStart exe: %sFlashInitProgram ONLYNAME%" CRON-LOG
      START-APP: "%sFlashInitProgram ONLYNAME%"
      \ HINT-OFF

      \ Enable task that watches for changes of temporary locations. (bug) 2
      \ TODO
      \ USB_Flash_Handle_Requests_to_Flash_location_at_HDD @ CF-ACTIVE SET-CRON-FLAG
      \ USB_Flash_Handle_Requests_to_Flash_Temporary_Drive @ CF-ACTIVE SET-CRON-FLAG

      \ Establish periodical backups. (enh) 6
      \ TODO

      \ THINT: "Mount task is complete" 10
      BALLOON: "%CUR-TASK-NAME%" "Mount task is complete"

      SEM_MOUNT_UNMOUNT_IS_RUNNING RELEASE
)#

# Run (manually) if you want to remove USB Flash from the system
#( USB_Flash_Unmount
   WatchHotKey: "^@U" \ ctrl + alt + "U"

   Rule: FILE-EXIST: "%sTemporaryFlashDriveLetter%" FILE-EXIST: "%sOriginalFlashDriveLetter%" AND

   SingleInstance

   Action:
      QUERY: "Unmount?" NOT
      IF EXIT THEN

      SEM_MOUNT_UNMOUNT_IS_RUNNING GET

      \ Disable task that watches for changes of temporary locations. (bug) 2
      \ TODO
      \ USB_Flash_Handle_Requests_to_Flash_location_at_HDD CF-ACTIVE CLR-CRON-FLAG
      \ USB_Flash_Handle_Requests_to_Flash_Temporary_Drive CF-ACTIVE CLR-CRON-FLAG

      \ Configure hints
      \ HINT_BG_COLOR HINT_FG_COLOR HINT-COLOR
      \ S" %HINT_FONT_NAME%" HINT_FONT_SIZE HINT-FONT

      \ Stop PStart
      \ HINT: "Stopping USB drive manager..."
      BALLOON: "%CUR-TASK-NAME%" "Stopping USB drive manager..."
      KILL: "%sFlashInitProgram ONLYNAME%"
      \ HINT-OFF

      \ Flush buffers for D: drive
      S" Flush buffers StartIn: %sFlashUtilsPath%" CRON-LOG
      StartIn: "%sFlashUtilsPath%"
      S" sync.exe -r %sFlashFilesAtHDDPath%" CRON-LOG
      START-APPW: sync.exe -r %sFlashFilesAtHDDPath%

      \ UnMap Local folder from K:
      \ TODO
      \ HINT: "Unmapping HDD location..."
      BALLOON: "%CUR-TASK-NAME%" "Unmapping HDD location..."
      S" subst %sOriginalFlashDriveLetter% /D" CRON-LOG
      START-APPW: subst %sOriginalFlashDriveLetter% /D
      \ HINT-OFF

      \ Flush buffers for removable drive
      S" Flush buffers StartIn: %sFlashUtilsPath%" CRON-LOG
      StartIn: "%sFlashUtilsPath%"
      S" sync.exe -r %sTemporaryFlashDriveLetter%" CRON-LOG
      START-APPW: sync.exe -r %sTemporaryFlashDriveLetter%

      \ "Shift" real USB drive back to regular drive letter K:
      \ HINT: "Shifting USB drive back to it's regular drive letter..."
      BALLOON: "%CUR-TASK-NAME%" "Shifting USB drive back to it's regular drive letter..."
      StartIn: "%sFlashUtilsPath%"
      S" remount.exe %sTemporaryFlashDriveLetter% %sOriginalFlashDriveLetter%" CRON-LOG
      START-APPW: remount.exe %sTemporaryFlashDriveLetter% %sOriginalFlashDriveLetter%
      \ HINT-OFF

      \ Sync files from Local folder to Flash
      \ HINT: "Syncronizing from HDD to Flash..."
      BALLOON: "%CUR-TASK-NAME%" "Syncronizing from HDD to Flash..."
      StartIn: "%snnBackUpPath%"
      S" nnbackup.exe %snnBackUpParams% -i %sFlashFilesAtHDDPath% -o %sOriginalFlashDriveLetter%" CRON-LOG
      START-APPW: nnbackup.exe %snnBackUpParams% -i %sFlashFilesAtHDDPath% -o %sOriginalFlashDriveLetter%
      \ HINT-OFF

      \ Flush buffers for removable drive
      S" Flush buffers StartIn: %sFlashUtilsPath%" CRON-LOG
      StartIn: "%sFlashUtilsPath%"
      S" sync.exe -r %sFlashFilesAtHDDPath%" CRON-LOG
      START-APPW: sync.exe -r %sFlashFilesAtHDDPath%

      \ Perform unmount. (enh) 4
      \ TODO

      \ Cancel periodical backups. (enh) 6
      \ TODO

      \ Enable task that watches for changes of temporary locations. (bug) 2
      \ TODO
      \ USB_Flash_Handle_Requests_to_Flash_location_at_HDD @ CF-ACTIVE SET-CRON-FLAG
      \ USB_Flash_Handle_Requests_to_Flash_Temporary_Drive @ CF-ACTIVE SET-CRON-FLAG

      \ THINT: "Unmount task is complete" 10
      BALLOON: "%CUR-TASK-NAME%" "Unmount task is complete"

      SEM_MOUNT_UNMOUNT_IS_RUNNING RELEASE
)#

# Used after workstation restart if real USB Flash was not removed (still in U)
#( USB_Flash_Remount
   WatchHotKey: "^@R" \ alt + ctrl + "R"

   Rule: QUERY: "Remount?"

   SingleInstance

   Action:
      \ Configure hints
      \ HINT_BG_COLOR HINT_FG_COLOR HINT-COLOR
      \ S" %HINT_FONT_NAME%" HINT_FONT_SIZE HINT-FONT

      \ Map local folder to K:
      \ HINT: "Mapping HDD location to regular USB drive letter..."
      BALLOON: "%CUR-TASK-NAME%" "Mapping HDD location to regular USB drive letter..."
      S" subst %sOriginalFlashDriveLetter% %sFlashFilesAtHDDPath%" CRON-LOG
      START-APPW: subst %sOriginalFlashDriveLetter% %sFlashFilesAtHDDPath%
      \ HINT-OFF

      \ Run PStart from K:
      \ HINT: "Initializing USB drive manager..."
      BALLOON: "%CUR-TASK-NAME%" "Initializing USB drive manager..."
      S" PStart StartIn: %sFlashInitProgram ONLYDIR%" CRON-LOG
      StartIn: "%sFlashInitProgram ONLYDIR%"
      S" PStart exe: %sFlashInitProgram ONLYNAME%" CRON-LOG
      START-APP: "%sFlashInitProgram ONLYNAME%"
      \ HINT-OFF

      \ Establish periodical backups. (enh) 6
      \ TODO

      \ THINT: "Remount task is complete" 10
      BALLOON: "%CUR-TASK-NAME%" "Remount task is complete"
)#

# Used after workstation restart if USB Flash was not Unmounted before restart (still in U)
#( USB_Flash_WinLogon_Handler
   NoActive \ Bug 8
   WatchLogon: "*"

   \ Check if there is a need for remount (U: exists and K: does not exists) and ask user for working mode
   Rule: FILE-EXIST: "%sTemporaryFlashDriveLetter%" FILE-EXIST: "%sOriginalFlashDriveLetter%" NOT AND

   Action:
      USB_Flash_Remount LAUNCH
)#

# Propose user to Unmount prior to shut down/restart
#( USB_Flash_Handle_Workstation_Shutdown
   NoActive \ Bug 8
   WatchQueryShutdown

   Action:
      INTERCEPT-SHUTDOWN
      USB_Flash_Unmount RUN
      CONTINUE-SHUTDOWN
)#

# Notify user about modification that happened at "wrong" location (U: instead of K:)
#( USB_Flash_Handle_Requests_to_Flash_Temporary_Drive
   WatchDir: %sTemporaryFlashDriveLetter% WatchSubtree

   SingleInstance

   Action:
      2 BalloonIcon !
      BALLOON: "Warning from %CUR-TASK-NAME%" "%sTemporaryFlashDriveLetter% is being modified by some process. Pls, ensure it is not damaging synced folders."
      S" USB_Flash_Handle_Requests_to_Flash_Temporary_Drive empty statement" CRON-LOG
)#

# Notify user about modification that happened at "wrong" location (D:/K instead of K:)
#( USB_Flash_Handle_Requests_to_Flash_location_at_HDD
   WatchDir: %sFlashFilesAtHDDPath% WatchSubtree

   \ If flash was not remounted to U and smb tries to access Flash files at HDD
   Rule: FILE-EXIST: "%sTemporaryFlashDriveLetter%" NOT

   SingleInstance

   Action:
      2 BalloonIcon !
      BALLOON: "Warning from %CUR-TASK-NAME%" "%sFlashFilesAtHDDPath% is being modified by some process. Pls, ensure it is not damaging synced folders."
      S" USB_Flash_Handle_Requests_to_Flash_Temporary_Drive empty statement" CRON-LOG
)#

# TODO:
#      (bug, 2A) 8. FILE-EXIST: "K:" returns FALSE for mounted D:/K so it fails USB_Flash_WinLogon_Handler and may fail USB_Flash_Unmount
#      (bug, 2A) 1. "subst K: /d" is not working while Unmounting (sometimes works, sometimes not).
#      (bug, 2A) 2. enable/disable USB_Flash_Handle_Requests_to_Flash_location_at_HDD etc when Mounting/Unmounting.
#      (bug, 2A) 3. decide how to avoid "conflict" between USB_Flash_Handle_Requests_to_Flash_location_at_HDD etc and virus scanners.
#      (bug, 2B) 4. sometimes hints remain open despite of HINT-OFF; THINT doesn't help either.
#      (bug, 3) 5. disable Mount start as a result of Unmount task execution.
#      (bug, 3) 6. garbage hint files are left in the nnCron home dir after USB_Flash_Handle_Workstation_Shutdown with Unmount (looks like it is a result of # last bug id: bug 4).
#      (bug, 3) 7. configure nnBackup to ignore FireFox cache while syncing.
#      (enh, 2A) 1. add buffers "flush" before sync/mount/unmount operations.
#      (enh, 2A) 2. provide/log extended information about files modified at wrong location (USB_Flash_Handle_Requests_to_Flash_location_at_HDD, etc).
#      (enh, 2A) 3. review possible "exceptions" that can happen (unexpected reboots) and their handling.
#      (enh, 2A) 4. perform physical Flash unmount using RemoveDrive.
#      (enh, 2A) 5. review possible use cases.
#      (enh, 3) 6. consider if periodical backup is needed for different working modes.
#      (enh, 3) 7. implement different modes of everyday usage (FromFlash, noMount, FromHDD).
#      (impr, 2B) 1. debugging code.
# last bug id: 7
# last enh id: 7
# last impr id: 1
#
# Setup:
#      1. Backup your USB Flash :)
#      2. Ensure that you have all the necessary utils for running the script.
#      3. Configure variables (Variables_declaration) according to your environment.
#      4. Configure hotkeys.
#      5. Customize if you don't use PStart, etc.
#      6. Disable all the "dangerous" code like nnbackup.exe etc and check log output first.
#      7. Register in nnCron.
#      8. Enable "dangerous" code.
iScape
 
Posts: 3
Joined: Mon, 16 Apr 2007, 16:21

Postby AlikasS » Mon, 07 May 2007, 06:09

запись/воспроизведение простеньких скриптов для мыши
(отслеживание и запись в файл координат мыши и нажатий на левую и правую кнопки мыши).
запись скрипта останавливается по клавише Ctrl,
воспроизведение останавливается по окончании записи или досрочно по Ctrl.
Code: Select all
<%
: N>S2 ( число -- в строку с пробелом в конце ) N>S S"  " S+ ;

USER bufff0
USER fileff0
USER-VALUE lm1
USER-VALUE pm1

: scriptsave { ms a u -- }
S" " a u   FWRITE
0 TO lm1
0 TO pm1
BEGIN
   \ запись координат мыши
   MOUSE-POS >R N>S2 R> N>S2 S+
   \ анализ нажатия клавиши мыши левой, правой
   VK_LBUTTON KEY-PRESSED?
   IF
   lm1 CASE
      0 OF -1 TO lm1 ENDOF
      -1 OF 1 TO lm1 ENDOF
      DUP OF ENDOF
   ENDCASE
   ELSE
   lm1 CASE
      ABS 1 OF 2 TO lm1 ENDOF
      2 OF 0 TO lm1 ENDOF
      0 OF ENDOF
   ENDCASE
   THEN
   lm1 N>S2 S+
   
   VK_RBUTTON KEY-PRESSED?
   IF
   pm1 CASE
      0 OF -1 TO pm1 ENDOF
      -1 OF 1 TO pm1 ENDOF
      DUP OF ENDOF
   ENDCASE
   ELSE
   pm1 CASE
      ABS 1 OF 2 TO pm1 ENDOF
      2 OF 0 TO pm1 ENDOF
      0 OF ENDOF
   ENDCASE
   THEN   
   pm1 N>S2 S+
   
   \ на стеке строка с значениями "x1 y1 lm1 pm1 "
   crlf S+ a u FAPPEND
   ms PAUSE
\ для остановки по нажатию на ctrl
VK_CONTROL KEY-PRESSED?  UNTIL
THINT: "запись скрипта остановлена" 5
;

: scriptexecute { ms a u -- }
a u EXIST? NOT IF THINT: "скрипт не найден" 5 EXIT THEN
258 ALLOCATE THROW bufff0 !
a u R/O OPEN-FILE-SHARED IF DROP EXIT THEN fileff0 !
  BEGIN bufff0 @ 250 fileff0 @ READ-LINE THROW WHILE \ на стеке количество прочитанных символов
     bufff0 @ SWAP
     <TIB
   \ отработка перемещений мыши
   get-number get-number MOUSE-MOVE
   \ отработка нажатий клавиш мыши, левой и правой
   get-number
   CASE
      -1 OF MOUSE-LBDN ENDOF
      2 OF MOUSE-LBUP ENDOF
      DUP OF ENDOF
   ENDCASE

   get-number
   CASE
      -1 OF MOUSE-RBDN ENDOF
      2 OF MOUSE-RBUP ENDOF
      DUP OF ENDOF
   ENDCASE
      TIB>
      ms PAUSE

\ аварийная остановка
VK_CONTROL KEY-PRESSED?
IF
fileff0 @ CLOSE-FILE DROP
bufff0 @ FREE DROP
THINT: "воспроизведение скрипта остановлено" 5
EXIT
THEN

   REPEAT
DROP
fileff0 @ CLOSE-FILE DROP
bufff0 @ FREE DROP
;
%>

#( записать-скрипт
NoActive
NoLog
Action:
100
WIN-INPUT-TEXT: "запись скрипта" "введите название скрипта" "script.scrp" 60 0=
IF
scriptsave
ELSE
DROP
THEN
\ или просто
\ 100 S"script.scrp" scriptsave \ ( мс опроса координат мыши и клавиш мыши, путь скрипта -- )
)#

#( воспроизвести-скрипт
NoActive
NoLog
Action:
100
WIN-INPUT-TEXT: "исполненине скрипта" "введите название скрипта" "script.scrp" 60 0=
IF
scriptexecute
ELSE
DROP
THEN
\ или просто
\ 100 S"script.scrp" scriptexecute \ ( мс опроса координат мыши и клавиш мыши, путь скрипта -- )
)#
Last edited by AlikasS on Thu, 10 May 2007, 03:07, edited 1 time in total.
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Postby VoidVolker » Wed, 09 May 2007, 02:26

Вот, сделал почти с нуля скрипт шпиён-диверсант :) Записывает в файл все нажатия кнопок и движения курсора, а потом может это все воспроизвести, по умолчанию точность 10 миллисекунд.
Code: Select all
#( Запись!
\  NoActive
WatchHotKey: "@r"
NoLog SingleInstance
: N>SBL  N>S S"  " S+ ;
: N>SBL+  N>SBL S+ ;

\ Кейлоггинг
VARIABLE start-time
CREATE LogKeyDN 255 ALLOT
: LogKeyDN! LogKeyDN + C! ; ( x code -- )
: LogKeyDN@ LogKeyDN + C@ ; ( code -- )

: log-code
>R
GetTickCount start-time @ - N>SBL
R> N>SBL+ crlf S+
S" script.log" FAPPEND
;

: LOG-ANYKEY-PRESSED
255 1 DO  I KEY-PRESSED?
   IF   \ Лог нажатия кнопки
      I LogKeyDN@ 0=
      IF   \ в прошлый проход эта кнопка была не нажата?
         I log-code -1 I LogKeyDN!
      THEN
   ELSE   \ Лог отпускания
      I LogKeyDN@
      IF   \ нажималась ли эта кнопка?
         I NEGATE log-code
         0 I LogKeyDN!
      THEN
   THEN
LOOP
;

\ ху-логгинг
: log-moving  >R >R
GetTickCount start-time @ - N>SBL
0 N>SBL+
R> N>SBL+ R> N>SBL+ crlf S+
S" script.log" FAPPEND
;
VARIABLE x-pos
VARIABLE y-pos
: LOG-MMoving
MOUSE-POS x-pos @ y-pos @ D<> IF MOUSE-POS 2DUP log-moving y-pos ! x-pos ! THEN
;

: Шпионить
BEGIN
10 PAUSE
LOG-ANYKEY-PRESSED
LOG-MMoving
VK_CONTROL KEY-PRESSED?
UNTIL
-17 log-code
-162 log-code
;
Action:
300 300 BEEP S" script.log" FDELETE \ Опционально :)
LogKeyDN 255 ERASE x-pos 0! y-pos 0!
Шпионить
GetTickCount start-time !
300 300 BEEP
)#

<%
: FOR-FLINES   { xt \ Lf Lc -- }   ( a u xt -- )
    R/O OPEN-FILE-SHARED THROW TO Lf
    258 ALLOCATE THROW TO Lc
    BEGIN Lc 1+ 255 Lf READ-LINE THROW WHILE
    Lc C!
    Lc xt EXECUTE
    REPEAT
    DROP
    Lf CLOSE-FILE DROP
;

: KeyDN
CASE
   1 OF MOUSE-LBDN ENDOF
   2 OF MOUSE-RBDN ENDOF
   DUP DUP OF specKeyDN ENDOF
ENDCASE
;

: KeyUP
CASE
   1 OF MOUSE-LBUP ENDOF
   2 OF MOUSE-RBUP ENDOF
   DUP DUP OF specKeyUP ENDOF
ENDCASE
;

: Диверсия { \ x -- }
COUNT <TIB
get-number
GetTickCount start-time @ - - DUP 0< IF DROP 0 THEN PAUSE
get-number TO x
 x IF
   x 0> IF x KeyDN THEN
   x 0< IF x NEGATE KeyUP THEN
    ELSE
        get-number get-number MOUSE-MOVE
    THEN
TIB>
;
%>
#( Воспроизведение@
\  NoActive
WatchHotKey: "@p"
NoLog SingleInstance
Action:
300 300 BEEP
GetTickCount start-time !
S" script.log" ['] Диверсия FOR-FLINES
300 300 BEEP
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby VoidVolker » Thu, 14 Jun 2007, 00:17

Ап!
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby SeMa » Thu, 14 Jun 2007, 17:45

VoidVolker wrote:Ап!

Краткость - сестра таланта. И оригинальное решение! :D
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Postby VoidVolker » Thu, 14 Jun 2007, 18:48

Ап!

Говорю там вверху цикл READ-BY-LINE запостил. Хех, так еще и не правильно - русское эс было вместо англицкого цэ.
И оригинальное решение!

Это ты про READ-BY-LINE? Ничего оригинального - наглый плагиат из исходников ннКРона из слова FOR-FILES: - я только поменял название слова и что оно делает, даже комментарии автора остались, еще кусок кода из справки. :lol:
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby vovabess » Thu, 17 Apr 2008, 09:02

почемуто крон ругается когда запускаешь скрипт .. типо тут ошибка "255 1 DO I KEY-PRESSED?" :roll:
vovabess
 
Posts: 2
Joined: Tue, 15 Apr 2008, 09:23

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby Dark_Jones » Wed, 04 Jun 2008, 22:41

Скриптик отслеживает:
- автозагружаемые программы и заносит их в "белый"/"чёрный" списки и оставляет/удаляет их;
- сервисы и изменяет (при необходимости) их режим запуска (Auto, Manual, Disable) (не люблю лишние сервисы в памяти);
- ярлыки на рабочем столе и при появлении нового предлагает удалить/оставить его (не люблю лишние ярлыки);
- группы в меню "Пуск" и сортирует их в группы по признаку "мультимедийные", "интернет", "игры" и т.д.

Добавить это в кронтаб:
Code: Select all
<%
S" C:\Program Files\nnCron\AutoBlk.txt" CREATENOTEXISTFILE \ "чёрный" список автозагрузки
S" C:\Program Files\nnCron\AutoWht.txt" CREATENOTEXISTFILE \ "белый" список автозагрузки
S" C:\Program Files\nnCron\AutoSrvC.txt" CREATENOTEXISTFILE \ список отслеживаемых и восстанавливаемых сервисов
S" C:\Program Files\nnCron\DskI.txt" CREATENOTEXISTFILE \ список оставляемых на рабочем столе ярлыков
S" C:\Program Files\nnCron\SMG.txt" CREATENOTEXISTFILE \ список игровых программ в меню "Пуск"
S" C:\Program Files\nnCron\SMI.txt" CREATENOTEXISTFILE \ список игнорируемых программ в меню "Пуск"
S" C:\Program Files\nnCron\SMInt.txt" CREATENOTEXISTFILE \ список интернетных программ в меню "Пуск"
S" C:\Program Files\nnCron\SMU.txt" CREATENOTEXISTFILE \ список утилит в меню "Пуск"
S" C:\Program Files\nnCron\SMW.txt" CREATENOTEXISTFILE \ список рабочих программ в меню "Пуск"
S" C:\Program Files\nnCron\SMM.txt" CREATENOTEXISTFILE \ список мультимедийных программ в меню "Пуск"
S" C:\Program Files\nnCron\SMK.txt" CREATENOTEXISTFILE \ список убиваемых программ в меню "Пуск"
%>

#( AutoLoadCheck
AsLoggedUser
LoadProfile
SingleInstance
WatchHotKey: "^(@a)"
VARIABLE srv_descr
CREATE key_name 258 ALLOT
CREATE srv_name 130 ALLOT
CREATE srv_start 32 ALLOT
Action:
S" Проверка начата:" CRON-LOG
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example1.reg "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example2.reg "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example3.reg "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example9.reg "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example4.reg "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example5.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example6.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example7.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example0.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices"
StartIn: "C:\Windows" SWHide NormalPriority
START-APPW: regedit.exe /ea c:\example8.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce"
S" c:\example1.reg" FILE S" c:\example2.reg" FILE S+ S" c:\example3.reg" FILE S+ S" c:\example9.reg" FILE S+ S" c:\example4.reg" FILE S+ S" c:\example5.reg" FILE S+ S" c:\example6.reg" FILE S+ S" c:\example7.reg" FILE S+ S" c:\example0.reg" FILE S+ S" c:\example8.reg" FILE S+ S" {" S+ FOLDER-STARTUP S+ S" }" S+ crlf S+ S" c:\autorun.reg" FWRITE
FILE-DELETE: "c:\example?.reg"
FOR-FILES: "%FOLDER-STARTUP%\*.*"
          QUOTE FOUND-FILENAME S+ QUOTE S+ crlf S+ S" c:\autorun.reg" FAPPEND
;FOR-FILES
FILE-EXIST: "%FOLDER-COMMON-PROGRAMS%\Автозагрузка\*.*"
IF
  FILE-APPEND: "c:\autorun.reg" "{%FOLDER-COMMON-PROGRAMS%\Автозагрузка}%crlf%"
  FOR-FILES: "%FOLDER-COMMON-PROGRAMS%\Автозагрузка\*.*"
          QUOTE FOUND-FILENAME S+ QUOTE S+ crlf S+ S" c:\autorun.reg" FAPPEND
  ;FOR-FILES
ELSE
  FILE-EXIST: "%FOLDER-COMMON-PROGRAMS%\Startup\*.*"
  IF
    FILE-APPEND: "c:\autorun.reg" "{%FOLDER-COMMON-PROGRAMS%\Startup}%crlf%"
    FOR-FILES: "%FOLDER-COMMON-PROGRAMS%\Startup\*.*"
             QUOTE FOUND-FILENAME S+ QUOTE S+ crlf S+ S" c:\autorun.reg" FAPPEND
    ;FOR-FILES
    FILE-APPEND: "c:\autorun.reg" "{%FOLDER-WINDOWS%\system32\GroupPolicy\Machine\Scripts\Startup}%crlf%"
    FOR-FILES: "%FOLDER-WINDOWS%\system32\GroupPolicy\Machine\Scripts\Startup\*.*"
             QUOTE FOUND-FILENAME S+ QUOTE S+ crlf S+ S" c:\autorun.reg" FAPPEND
    ;FOR-FILES
    FILE-APPEND: "c:\autorun.reg" "{%FOLDER-WINDOWS%\system32\GroupPolicy\User\Scripts\Startup}%crlf%"
    FOR-FILES: "%FOLDER-WINDOWS%\system32\GroupPolicy\User\Scripts\Startup\*.*"
             QUOTE FOUND-FILENAME S+ QUOTE S+ crlf S+ S" c:\autorun.reg" FAPPEND
    ;FOR-FILES 
  THEN
THEN
S" c:\autorun.reg" READ-BY-LINE
     2DUP 2DUP DROP 1 S" [" COMPARE 0= 0 2SWAP DROP 1 S" {" COMPARE 0= NIP OR
     IF
       2DUP key_name PLACE
     THEN
     2DUP DROP 1 QUOTE COMPARE
     IF
       2DROP
     ELSE
       2DUP S" C:\Program Files\nnCron\AutoWht.txt" 0 FINDSTRING
       IF
         S" В белом списке: " key_name COUNT S+ 2SWAP S+ S"  - пропущена." S+ CRON-LOG
       ELSE
         2DUP S" C:\Program Files\nnCron\AutoBlk.txt" 0 FINDSTRING
         IF
           2DUP key_name COUNT DELETEKEY
           S" В чёрном списке: " key_name COUNT S+ 2SWAP S+ S"  - удалена!" S+ CRON-LOG
         ELSE
           2DUP key_name COUNT QuerySAWB
           CASE
               1 OF 2DUP key_name COUNT DELETEKEY
                    S" Автозагрузка " key_name COUNT S+ 2SWAP S+ S"  - удалена при запросе!" S+ CRON-LOG
                 ENDOF
               2 OF 2DUP crlf S+ S" C:\Program Files\nnCron\AutoWht.txt" FAPPEND
                    S" Автозагрузка " key_name COUNT S+ 2SWAP S+ S"  - оставлена и внесена в белый список." S+ CRON-LOG
                 ENDOF
               3 OF 2DUP 2DUP key_name COUNT DELETEKEY
                    crlf S+ S" C:\Program Files\nnCron\AutoBlk.txt" FAPPEND
                    S" Автозагрузка " key_name COUNT S+ 2SWAP S+ S"  - удалена при запросе и внесена в чёрный список!" S+ CRON-LOG
                 ENDOF
               4 OF
                   key_name COUNT DROP 1 S" {" COMPARE
                   IF
                     S" C:\Off_key.reg" CREATENOTEXISTREG
                     2DUP key_name COUNT 1 - S" -]" S+ crlf S+ 2SWAP S+ crlf S+ S" C:\Off_key.reg" FAPPEND
                     S" C:\Del_key.reg" CREATENOTEXISTREG
                     2DUP key_name COUNT crlf S+ 2SWAP 2DUP S" =" StringGet NIP S+ S" -" S+ crlf S+ S" C:\Del_key.reg" FAPPEND
                     S" Объект: " 2SWAP S+ S" - временно не активен. Перенесён в " S+ key_name COUNT 1 - S+ S" -]" S+ CRON-LOG
                   ELSE
                     FILE-EXIST: "%key_name COUNT 1 /STRING 1 -%-\" NOT
                     IF
                       DIR-CREATE: "%key_name COUNT 1 /STRING 1 -%-\"
                     THEN
                     2DUP key_name COUNT 1 /STRING 1 - S" \" S+ 2SWAP 1 /STRING 1 - S+ key_name COUNT 1 /STRING 1 - S" -\" S+ FMOVE
                     S" Объект: " 2SWAP 1 /STRING 1 - S+ S"  - временно не активен. Перенесён в " S+ key_name COUNT 1 /STRING 1 - S+ S" -" S+ CRON-LOG
                   THEN
                 ENDOF
               DUP OF S" Автозагрузка " key_name COUNT S+ 2SWAP S+ S"  - оставлена." S+ CRON-LOG
                   ENDOF
           ENDCASE   
         THEN
       THEN
     THEN
;READ-BY-LINE
FILE-DELETE: "C:\autorun.reg"
S" C:\Del_key.reg" APPLYREG
S" C:\Off_key.reg" APPLYREG
\ Отслеживаем сервисы
WinNT?
IF
  StartIn: "C:\Windows" SWHide NormalPriority
  START-APPW: regedit.exe /ea c:\Services.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services"
  srv_descr OFF
  S" None" srv_start PLACE
  S" None" srv_name PLACE
  S" c:\Services.reg" READ-BY-LINE
       2DUP S" /\[*\]/" RE-MATCH
       IF
         srv_start COUNT S" None" ICOMPARE srv_name COUNT S" None" ICOMPARE AND srv_descr @ AND
         IF
           key_name COUNT  S" C:\Program Files\nnCron\AutoSrvC.txt" -1 FINDSTRING
           IF
             2DUP srv_start COUNT ICOMPARE
             IF
               S" C:\Chg_srv.reg" CREATENOTEXISTREG
               2DUP S" Режим запуска сервиса " srv_name COUNT S+ S"  был восстановлен c " S+ srv_start COUNT S+ S"  на " S+ 2SWAP S+ S" . Ключ " S+ key_name COUNT S+ CRON-LOG
               DROP C@
               CASE
                   65 OF S" 2" S" net START " srv_name COUNT S+ START-APP ENDOF
                   68 OF S" 4" S" net STOP " srv_name COUNT S+ START-APP ENDOF
                   77 OF S" 3" ENDOF
                   DUP OF S" Что-то непонятное в AutoSrvC.txt" CRON-LOG S" " ENDOF
               ENDCASE
               key_name COUNT crlf S+ QUOTE S+ S" Start" S+ QUOTE S+ S" =dword:0000000" S+ 2SWAP S+ crlf S+ crlf S+ S" C:\Chg_srv.reg" FAPPEND
             ELSE
               2DROP
             THEN
           ELSE
             3 S" Обнаружен новый сервис!" DROP S" Ключ: " key_name COUNT S+ crlf S+ S" Название: " S+ srv_name COUNT S+ crlf S+ S" Режим запуска: " S+ srv_start COUNT S+ crlf S+ S" Выберите режим запуска:" S+ crlf S+ crlf S+ S" Yes - вручную" S+ crlf S+ S" No - автоматически" S+ crlf S+ S" Cancel - отключить" S+ crlf S+ DROP 0 MessageBoxA
             CASE
                 6 OF FILE-APPEND: "C:\Program Files\nnCron\AutoSrvC.txt" "%key_name COUNT%%crlf%Manual%crlf%"
                      S" Сервис %srv_name COUNT% %key_name COUNT% будет запускаться вручную." CRON-LOG
                   ENDOF
                 7 OF FILE-APPEND: "C:\Program Files\nnCron\AutoSrvC.txt" "%key_name COUNT%%crlf%Auto%crlf%"
                      S" Сервис %srv_name COUNT% %key_name COUNT% будет запускаться автоматически." CRON-LOG
                   ENDOF
                 DUP OF FILE-APPEND: "C:\Program Files\nnCron\AutoSrvC.txt" "%key_name COUNT%%crlf%Disable%crlf%"
                      S" Сервис %srv_name COUNT% %key_name COUNT% отключён." CRON-LOG
                   ENDOF
             ENDCASE
           THEN
         THEN
         srv_descr OFF
         S" None" srv_start PLACE
         S" None" srv_name PLACE
         2DUP key_name PLACE
       THEN
       2DUP S" /\x22DisplayName\x22=\x22/" RE-MATCH
       IF
         14 /STRING srv_name PLACE
       ELSE
         2DUP S" /\x22Start\x22=dword:0000000[2-4]/" RE-MATCH
         IF
           21 /STRING S>NUM
           CASE
                2 OF S" Auto" srv_start PLACE ENDOF
                3 OF S" Manual" srv_start PLACE ENDOF
                4 OF S" Disable" srv_start PLACE ENDOF
           ENDCASE
         ELSE
           2DUP S" /\x22Description\x22=\x22/" RE-MATCH >R S" /\x22Type\x22=dword:00000\d10/" RE-MATCH R> OR
           IF
             srv_descr ON
           THEN
         THEN
       THEN
  ;READ-BY-LINE
  S" C:\Chg_srv.reg" APPLYREG
  FILE-DELETE: "c:\Services.reg"
THEN
\ Удаляем ненужные ярлыки с рабочих столов
FOLDER-COMMON-DESKTOP S" \*.*" S+ DSKCLN
FOLDER-DESKTOP S" \*.*" S+ DSKCLN
\ Сортируем меню "Пуск"
FOLDER-PROGRAMS FIND_SHORT
FOLDER-COMMON-PROGRAMS FIND_SHORT
S" Проверка завершена." CRON-LOG
)#


Сохранить это в файл My_QAL.spf и положить в папку PLUGINS:
Code: Select all
CLASS: MyWndQAWB <SUPER FrameWindow
   Static OBJ stS1
   :init a v 3 3 pos 30 10 size S" Место:" text ;
   Static OBJ stS2
   :init a v 3 10 pos 107 30 size ;
   Static OBJ stS3
   :init a v 3 25 pos 30 10 size S" Объект:" text ;
   Static OBJ stS4
   :init a v 3 32 pos 107 30 size ;
   Static OBJ stS5
   :init a v 3 55 pos 30 10 size S" Вы можете:" text ;
   Button OBJ bt1
   :init a v 17 65 pos 30 10 size S" Оставить" text ;
   Button OBJ bt2
   :init a v 62 65 pos 30 10 size S" Удалить" text ;
   Button OBJ bt3
   :init a v 5 80 pos 100 10 size S" Оставить и занести в Белый список" text ;
   Button OBJ bt4
   :init a v 5 92 pos 100 10 size S" Удалить и занести в Чёрный список" text ;
   Button OBJ bt5
   :init a v 17 107 pos 75 10 size S" Временно отключить" text ;

M: bt1Click
0 ModalResult!
;

M: bt2Click
1 ModalResult!
;

M: bt3Click
2 ModalResult!
;

M: bt4Click
3 ModalResult!
;

M: bt5Click
4 ModalResult!
;

M: Create
Create
AutoCreate
33 CUTSTRING stS2 SetText
33 CUTSTRING stS4 SetText
['] bt1Click bt1 OnClick !
['] bt2Click bt2 OnClick !
['] bt3Click bt3 OnClick !
['] bt4Click bt4 OnClick !
['] bt5Click bt5 OnClick !
;
;CLASS

: QuerySAWB { \ w -- }
MyWndQAWB NEW TO w
0 w ->CLASS MyWndQAWB Create
S" Обнаружена новая автозагрузка!" w ->CLASS MyWndQAWB SetText
113 133 w ->CLASS MyWndQAWB Center
w ->CLASS MyWndQAWB ShowModal
w DELETE
?DUP NOT
IF
  0
THEN
;


Сохранить это в файл My_QSM.spf и положить в папку PLUGINS:
Code: Select all
INCLUDE "plugins/other/wincon.f"
CLASS: MyWndQSM <SUPER FrameWindow
   var a1
   var u1
   Static OBJ stS1
   :init a v 3 3 pos 120 10 size S" Обнаружена группа ярлыков в меню Пуск!" text ;
   Static OBJ stS2
   :init a v 3 10 pos 120 10 size ;
   Static OBJ stS3
   :init a v 3 22 pos 120 10 size S" Вы хотите:" text ;
   Button OBJ bt1
   :init a v 20 30 pos 30 10 size S" Оставить" text ;
   Button OBJ bt2
   :init a v 65 30 pos 30 10 size S" Удалить" text ;
   Static OBJ stS4
   :init a v 3 45 pos 120 10 size S" или переместить в группу:" text ;
   Button OBJ bt3
   :init a v 13 55 pos 40 10 size S" Игры" text ;
   Button OBJ bt4
   :init a v 63 55 pos 40 10 size S" Интернет" text ;
   Button OBJ bt5
   :init a v 13 70 pos 40 10 size S" М/Медия" text ;
   Button OBJ bt6
   :init a v 63 70 pos 40 10 size S" Утилиты" text ;
   Button OBJ bt7
   :init a v 37 85 pos 40 10 size S" Рабочие" text ;

M: bt1Click
S" c:\Program Files\nnCron\SMI.txt" u1 ! a1 ! 0 ModalResult!
;

M: bt2Click
S" c:\Program Files\nnCron\SMK.txt" u1 ! a1 ! 0 ModalResult!
;

M: bt3Click
S" c:\Program Files\nnCron\SMG.txt" u1 ! a1 ! 0 ModalResult!
;

M: bt4Click
S" c:\Program Files\nnCron\SMInt.txt" u1 ! a1 ! 0 ModalResult!
;

M: bt5Click
S" c:\Program Files\nnCron\SMM.txt" u1 ! a1 ! 0 ModalResult!
;

M: bt6Click
S" c:\Program Files\nnCron\SMU.txt" u1 ! a1 ! 0 ModalResult!
;

M: bt7Click
S" c:\Program Files\nnCron\SMW.txt" u1 ! a1 ! 0 ModalResult!
;

M: Create
Create
AutoCreate
stS2 SetText
['] bt1Click bt1 OnClick !
['] bt2Click bt2 OnClick !
['] bt3Click bt3 OnClick !
['] bt4Click bt4 OnClick !
['] bt5Click bt5 OnClick !
['] bt6Click bt6 OnClick !
['] bt7Click bt7 OnClick !
;
;CLASS

: QuerySM { \ w -- }
S" Группа " 2SWAP S+
MyWndQSM NEW TO w
0 w ->CLASS MyWndQSM Create
S" Внимание!" w ->CLASS MyWndQSM SetText
120 110 w ->CLASS MyWndQSM Center
w ->CLASS MyWndQSM ShowModal
DROP w ->CLASS MyWndQSM a1 @ w ->CLASS MyWndQSM u1 @
w DELETE
?DUP NOT
IF
  DROP S" c:\Program Files\nnCron\SMI.txt"
THEN
;

Как пользоваться INCLUDE "plugins/other/wincon.f" и где скачать библиотеку wincon.dll смотрим здесь http://www.nncron.ru/forums/viewtopic.php?f=5&t=6828.

Сохранить это в файл My_Words.spf и положить в папку PLUGINS:
Code: Select all
\ Мои слова
CREATE temp_string 255 ALLOT

: StringGet { a1 u1 a2 u2 } ( a1 u1 a2 u2 -- pos )
\ возвращает позицию, с которой начинается строка a2 u2 в строке a1 u1
a1 u1 a2 u2 ISEARCH IF DROP a1 - 1+ ELSE 2DROP 0 THEN ;

: ONLYFILENAME ( a1 u1 -- a2 u2 )
\ возвращает имя файла из FULLNAME
BEGIN
     2DUP S" \" StringGet ?DUP
WHILE
     /STRING
REPEAT ;

: ONLYFILENAMEREG ( a1 u1 -- a2 u2 )
\ возвращает имя ключа реестра
BEGIN
     2DUP S" \\" StringGet ?DUP
WHILE
     /STRING
REPEAT
1 /STRING 2DUP S" .exe" StringGet ?DUP
IF
  3 + NIP
THEN ;

: ONLYFIRSTDIR ( a1 u1 -- a2 u2 )
\ возвращает название первой директории в FULLNAME
2DUP 2>R 2DUP S" \" StringGet DUP
IF
 1 -
THEN
NIP DUP
IF
  RDROP RDROP
ELSE
  2DROP 2R>
THEN ;

: ONLYLASTDIR ( a1 u1 -- a2 u2 )
\ возвращает название последней директории в FULLNAME
2DUP 2>R 2DUP 2DUP ONLYFILENAME StringGet 1 - DUP
IF
 1 -
THEN
NIP ONLYFILENAME DUP
IF
  RDROP RDROP
ELSE
  2DROP 2R>
THEN ;

: PATHONLYDIR ( a1 u1 -- a2 u2 )
\ возвращает только путь (без имени файла) из FULLNAME
2DUP 2DUP ONLYFILENAME StringGet NIP 1 - ;

\ ------------ построчное чтение файлов ---------------
: (?READ-BY-LINE) { xt \ Lf Lc fEND -- }  ( a u xt -- )
-1 TO fEND
1024 ALLOCATE THROW TO Lc
R/O OPEN-FILE-SHARED THROW TO Lf
BEGIN
     Lc 1022 Lf READ-LINE THROW fEND AND
WHILE
     Lc + 0 SWAP C!
     Lc ASCIIZ> xt EXECUTE TO fEND
REPEAT
DROP Lf CLOSE-FILE DROP Lf FREE DROP Lc FREE DROP ;

: (READ-BY-LINE) { xt \ Lf Lc fEND -- }  ( a u xt -- )
1024 ALLOCATE THROW TO Lc
R/O OPEN-FILE-SHARED THROW TO Lf
BEGIN
     Lc 1022 Lf READ-LINE THROW
WHILE
     Lc + 0 SWAP C!
     Lc ASCIIZ> xt EXECUTE
REPEAT
DROP Lf CLOSE-FILE DROP Lf FREE DROP Lc FREE DROP ;

: READ-BY-LINE
    POSTPONE [NONAME
; IMMEDIATE

: ;READ-BY-LINE
    POSTPONE NONAME]
    POSTPONE (READ-BY-LINE)
; IMMEDIATE

: ;?READ-BY-LINE  ( ? -- )  \ 0 (FALSE) - выход из цикла, все остальные значения считаются правдой и цикл продолжится
    POSTPONE NONAME]
    POSTPONE (?READ-BY-LINE)
; IMMEDIATE

: READ-BY-LINE: eval-string,  POSTPONE READ-BY-LINE ; IMMEDIATE
\ ------------ построчное чтение файлов ---------------

: FINDSTRING { a1 u1 a2 u2 flag1 \ fl_l str_fl_l -- a3 u3 flag2 }
\ читает построчно файл a2 u2 и ищет в нём строку a1 u1
\ если flag1 TRUE, то возвращает TRUE если строка найдена и прочитанную следующую строку a3 u3
\ если flag1 FALSE, то возвращает только TRUE если строка найдена
1024 ALLOCATE THROW TO str_fl_l
a2 u2 R/O OPEN-FILE-SHARED THROW TO fl_l
BEGIN     
     str_fl_l 1022 fl_l READ-LINE THROW
WHILE     
     str_fl_l + 0 SWAP C!
     str_fl_l ASCIIZ> a1 u1 ICOMPARE 0=
     IF
       flag1
       IF
         str_fl_l 1022 fl_l READ-LINE THROW
         IF
           str_fl_l + 0 SWAP C!
           str_fl_l ASCIIZ>
         ELSE
           DROP S" None"
         THEN
       THEN
       fl_l CLOSE-FILE DROP fl_l FREE DROP -1
       EXIT
     THEN
REPEAT
DROP fl_l CLOSE-FILE DROP fl_l FREE DROP 0 ;

: CREATENOTEXISTFILE ( a1 u1 )
\ создаёт файл, если его нет (слово, возможно, лишнее - сделал из опасения,
\ что FCREATE затрёт файл если он есть)
2DUP EXIST?
IF
  2DROP
ELSE
  FCREATE
THEN ;

: CREATENOTEXISTREG ( a1 u1 )
\ создаёт файл "*.reg", если его нет
2DUP EXIST?
IF
  2DROP
ELSE
  S" REGEDIT4" crlf 2DUP S+ S+ 2SWAP FWRITE
THEN ;

: APPLYREG ( a1 u1 )
\ экспортировать настройки из "*.reg" в реестр
2DUP EXIST?
IF
  2DUP
  S" regedit.exe /S " 2SWAP S+ START-APPW
  FDELETE
ELSE
  2DROP
THEN ;

: DELETEKEY { a1 u1 a2 u2 }
\ удаляет ключ в реестре или файл в папке автозапуска
a2 1 S" {" COMPARE
IF
  S" C:\Del_key.reg" CREATENOTEXISTREG
  a2 u2 crlf S+ a1 u1 2DUP S" =" StringGet NIP S+ S" -" S+ crlf S+ S" C:\Del_key.reg" FAPPEND
  a1 u1 ONLYFILENAMEREG 2DUP PROC-EXIST?
  IF
    2DUP PROC-CLOSE
    S"  - прибит" S+ CRON-LOG
    TRAY-REFRESH
  ELSE
    2DROP
  THEN
ELSE
  a2 1 + u2 2 - S" \" S+ a1 1 + u1 2 - S+ FDELETE
THEN ;

: DSKCLN ( a u )
\ удаляет по запросу новые ярлыки на рабочем столе и в панеле быстрого запуска
RECURSIVE
FOR-FILES
         IS-DIR? NOT
         IF
           S" C:\Program Files\nnCron\DskI.txt" FILE S" /" FOUND-FILENAME S+ S" /i" S+ RE-MATCH NOT
           IF
             3 S" Обнаружен новый ярлык!" DROP S" Ярлык: " FOUND-FILENAME S+ crlf 2DUP S+ S+ S" Удалить?" S+ crlf 2DUP S+ S+ S" Yes - удалить" S+ crlf S+ S" No - добавить в игнор-лист и не удалять" S+ crlf S+ S" Cancel - не удалять и не добавлять." S+ crlf S+ DROP 0 MessageBoxA
             CASE
                 6 OF
                     FOUND-FULLPATH FDELETE
                   ENDOF
                 7 OF
                     FOUND-FILENAME crlf S+ S" C:\Program Files\nnCron\DskI.txt" FAPPEND
                   ENDOF
                 DUP OF ENDOF
             ENDCASE
           THEN
         THEN
;FOR-FILES ;

: DIREMPTYKILL ( a u )
\ удаляет пустые директории в папке a u и её подпапках
RECURSIVE
FOR-FILES
         IS-DIR?
         IF
           RECURSIVE FOUND-FULLPATH DIR-SIZE D0=
           IF
             FOUND-FULLPATH DIR-DELETE
           THEN
         THEN
;FOR-FILES ;

: FINDSTRINGDIR ( a u -- a u ? )
2DUP S" c:\Program Files\nnCron\SMG.txt" 0 FINDSTRING
IF
  2DROP S" Game\"
ELSE
  2DUP S" c:\Program Files\nnCron\SMInt.txt" 0 FINDSTRING
  IF
    2DROP S" Internet\"
  ELSE
    2DUP S" c:\Program Files\nnCron\SMM.txt" 0 FINDSTRING
    IF
      2DROP S" Multimedia\"
    ELSE
      2DUP S" c:\Program Files\nnCron\SMU.txt" 0 FINDSTRING
      IF
        2DROP S" Utility\"
      ELSE
        2DUP S" c:\Program Files\nnCron\SMW.txt" 0 FINDSTRING
        IF
          2DROP S" Work\"
        ELSE
          S" c:\Program Files\nnCron\SMK.txt" 0 FINDSTRING
          IF
            FOUND-RELPATH ONLYLASTDIR S" /\.lnk/i" RE-MATCH
            IF
              FOUND-FULLPATH FDELETE
            ELSE
              FOUND-FULLPATH PATHONLYDIR DIR-DELETE
            THEN
            0
          ELSE
            -1
          THEN
          EXIT
        THEN
      THEN
    THEN
  THEN
THEN
FOUND-RELPATH ONLYLASTDIR S" /\.lnk/i" RE-MATCH
IF
  FOUND-FULLPATH PATHONLYDIR 2SWAP S+ 2DUP DIR-CREATE FOUND-FULLPATH 2SWAP FMOVE
ELSE
  FOUND-FULLPATH 2DUP FOUND-RELPATH ONLYFIRSTDIR StringGet 1 - NIP 2SWAP S+ FOUND-FULLPATH ONLYLASTDIR S+ S" \" S+ temp_string PLACE
  RECURSIVE
  FOUND-FULLPATH PATHONLYDIR S" *.*" S+ FOR-FILES
                 IS-DIR?
                 IF
                   temp_string COUNT FOUND-FILENAME S+ S" \" S+ DIR-CREATE
                 ELSE
                   FOUND-FULLPATH temp_string COUNT FOUND-RELPATH S+ PATHONLYDIR 2DUP DIR-CREATE FMOVE
                 THEN                 
  ;FOR-FILES
THEN
0 ;

: FIND_SHORT ( a u )
\ ищет ярлыки в папке a u и сортирует их по группам
\ сделал для "причёсывания" меню Пуск
2DUP
RECURSIVE
S" \*.lnk" S+ FOR-FILES
           FOUND-RELPATH ONLYFIRSTDIR S" /(^Game$)|(^Multimedia$)|(^Internet$)|(^Utility$)|(^Work$)|(Accessories)|(^Games$)|(Startup)|(Administrative Tools)|(Стандартные)|(Игры)|(Автозагрузка)|(Администрирование)/i" RE-MATCH NOT
           IF
             FOUND-RELPATH ONLYLASTDIR 2DUP S" c:\Program Files\nnCron\SMI.txt" 0 FINDSTRING NOT
             IF
               2DUP FINDSTRINGDIR
               IF
                 2DUP 2DUP crlf S+ 2SWAP 2DUP FOUND-RELPATH ONLYFIRSTDIR COMPARE
                 IF
                   FOUND-RELPATH ONLYFIRSTDIR S" .." S+ 2SWAP S+
                 THEN                 
                 QuerySM FAPPEND
                 FINDSTRINGDIR DROP
               ELSE
                 2DROP
               THEN
             ELSE
               2DROP
             THEN
           THEN
;FOR-FILES
S" \*.*" S+ DIREMPTYKILL ;

: CUTSTRING { a u n \ a1 u1 }
\ вставляет переводы строк, если длина строки больше n символов
BEGIN
    u n >
WHILE
    a1 u1 a n crlf S+ S+ TO u1 TO a1
    a u n /STRING TO u TO a
REPEAT
a1 u1 a u S+
;


Подключать в nncron.ini в такой последовательности:
Code: Select all
INCLUDE "plugins\My_QSM.spf"
INCLUDE "plugins\My_Words.spf"
INCLUDE "plugins\My_QAL.spf"


У меня этот скрипт запускается после завершения программ-установщиков (отслеживает отдельный скрипт), при запуске системы и вручную по хоткею.
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby phantom » Sat, 21 Jun 2008, 21:51

Скрипт для автоматического резервирования информации с флешки.
Поможет при утере или порче носителя.

Code: Select all
#( fleshka_backup
: VOL-EXIST? ( a u -- letter/0)
     [CHAR] Z 1+ [CHAR] C
     DO I GET-VOL-NAME 2OVER COMPARE 0=
           IF 2DROP I UNLOOP EXIT THEN
     LOOP
     2DROP 0
;
fVAR insert_flash
CREATE flash_drive 2 ALLOT
Action:
\ проверка диска с меткой FLESHKA
S" FLESHKA" VOL-EXIST? ?DUP
IF
SP@  1 flash_drive PLACE
DROP
   RE-MATCH: "%insert_flash%" "/off/ix"
   IF
      THINT: "Диск FLESHKA Подключен к %QUOTE%%flash_drive COUNT%:\%QUOTE% %crlf% Делаю резервное копирование" 7
      S" on" TO insert_flash
      SWHide
      StartIn: "%ProgramFiles%\nnBackup"
                START-APPW: %comspec% /c nnBackup.exe sync -i "%flash_drive COUNT%:\" -o "E:\Backup\fleshka_sync" -ad -da -s -v -x *.avi,*.mp3,*.ogg,*.flac,*.mpg,*.wma,*.wmv
      THINT: "Резервирование завершено" 7
      EXIT
   THEN
ELSE
   RE-MATCH: "%insert_flash%" "/on/ix"
   IF
      THINT: "Флешка отключена %crlf% Смотри не потеряй :)" 7
      S" off" TO insert_flash
      EXIT
   THEN
THEN
)#
phantom
 
Posts: 7
Joined: Wed, 05 Mar 2008, 22:41

Re:

Postby ascerdfg1 » Sat, 17 Oct 2009, 15:37

VoidVolker wrote:Фот еще одна маленькая фишка:
Code: Select all
\ Регистрация в реестре нового расширения - .FEX
\ Теперь при клике на файле .FEX будет выполнятся содержимое этого файла от имени текущего залогиненого пользователя, файл должен содержать слово main ( : main ... ..полезный код.. ... ; )
: Reg.FEX
S" HKEY_CLASSES_ROOT\.fex\@"  S" ForthEXecute" REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\@"  S" Forth script EXecute" REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\DefaultIcon\@"  S" shell32.dll,217" REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\shell\open\command\@" QUOTE ModuleDirName S+ S" nncron.exe" S+ QUOTE S+ S"  -wp -runfile " S+ QUOTE S+ S" %1" S+ QUOTE S+ REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\shell\edit\command\@" QUOTE
Editor @ ASCIIZ>      \ Путь к редактору, по умолчанию - значение  Editor: "filename"  файла nncron.ini
S+ QUOTE S+ S"  " S+ QUOTE S+ S" %1" S+ QUOTE S+ REG-SZ
;
: DelReg.FEX
S" HKEY_CLASSES_ROOT\.fex" REG-DELETE-KEY
S" HKEY_CLASSES_ROOT\ForthEXecute" REG-DELETE-KEY
;

: RUNF ( a u -- )      \ Запускает файл на исполнение, файл должен содержать слово main ( : main ... ..полезный код.. ... ; )
S" nncron.exe -wp -runfile " 2SWAP S+ START-APP   \  -wp Не подгружать плагины при запуске, что значительно сокращает время старта
;

Какая возможная польза? Ну например работа одной задачи в несколько потоков. Или вот например можно вынести из кронтабов задачи запускаемые пользователем - всяко проще чем скакать по здоровому меню, да и ннкрону легче станет. Да кстати, после вставки в кронтаб или консоль не забудьте выполнить слово Reg.FEX
а зачем файлик nncron.out выскакивает в папке из которой стартую *.fex?
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Re:

Postby Ilya » Sat, 17 Oct 2009, 16:17

ascerdfg1 wrote:
VoidVolker wrote:Фот еще одна маленькая фишка:

а зачем файлик nncron.out выскакивает в папке из которой стартую *.fex?


Очень полезный файлик! :D
Лог-файл!
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: Re:

Postby ascerdfg1 » Sat, 17 Oct 2009, 18:52

Ilya wrote:Очень полезный файлик! :D
Лог-файл!
а почему он тогда нулевого размера и исчезает после выполнения задачи?
И ещё, киньте плиз примеры, где *.fex работает. Мне он видится ограниченным по возможностям.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Re:

Postby Ilya » Sat, 17 Oct 2009, 19:19

ascerdfg1 wrote:
Ilya wrote:Очень полезный файлик! :D
Лог-файл!
а почему он тогда нулевого размера и исчезает после выполнения задачи?
И ещё, киньте плиз примеры, где *.fex работает. Мне он видится ограниченным по возможностям.

Всё логично: крон по завершении убивает данный файл+он не пустой (вроде как мин. 195 байт).
Всё остальное - к автору скипта!
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest

cron