; FILEWEDG ; ; Programma per Proteus ; ; (C) 2005 Simone Zanella Productions ; ; Introduce in emulazione di tastiera i dati presenti in un file. ; Questo programma può essere installato come script associato al servizio Proteus. ; ; I parametri si trovano all'inizio del programma e sono: ; - POLLDELAY = intervallo per la verifica di presenza del file ; - KILLFILE = flag che indica se cancellare il file dopo averlo trasmesso; se 0, ; il file non viene rimosso, ma non viene più ritrasmesso finché non cambia la data/ora/dimensione; ; - PATHNAME = file da inviare ; - POSTFIX = terminatore ; ; In dettaglio, il programma esegue le seguenti operazioni: ; - verifica se c'è il file da scaricare; ; - se lo trova, lo invia in emulazione di tastiera; ; - se è richiesta la cancellazione, rimuove il file, oppure verifica la data/ora/dimensione ; e torna ad inviare il file solo quando uno di questi dati cambia. ; ; Il codice commentato più sotto permette anche in alternativa di: ; - selezionare una specifica finestra (applicativo Ultra-Edit) ed inviare il dato verbatim, seguito da Invio; ; - lanciare il blocco note (se non aperto), introdurre il dato verbatim (seguito da Invio) e tornare alla finestra ; iniziale. #!proteus -z -j !include "win32.prt" CONST POLLDELAY = 3000 CONST KILLFILE = 0 CONST PATHNAME = "C:\\DATA.TXT" CONST POSTFIX = "{ENTER}" LASTSIZE = "" LASTDATE = "" LASTTIME = "" WHILE 1 IF KILLFILE H = FOPEN(PATHNAME, 4) ELSE ; Verifico data/ora del file e lo invio solo se cambiate HD = DIROPEN(PATHNAME, 1) IF NEQ(HD, -1) IF OR(STRNEQ(LASTSIZE, DIRLAST(HD, 2)), \ STRNEQ(LASTDATE, DIRLAST(HD, 3)), \ STRNEQ(LASTTIME, DIRLAST(HD, 4))) H = FOPEN(PATHNAME, 4) IF NEQ(H, -1) DIRCLOSE(HD) HD = DIROPEN(PATHNAME, 1) LASTSIZE = DIRLAST(HD, 2) LASTDATE = DIRLAST(HD, 3) LASTTIME = DIRLAST(HD, 4) FI ELSE H = -1 FI DIRCLOSE(HD) ELSE H = -1 FI FI ; Se non è un servizio e l'utente ha premuto ESC, esce !ifndef SERVICE IF KBDHIT() IF EQ(GETCH(), 27) BREAK FI FI !endif IF NEQ(H, -1) WHILE NOT(FEOF(H)) Dato1 = FREADLN(H) ; >>> Codice di esempio commentato (funzionamento alternativo) <<< ; ; Seleziona una specifica finestra (che sappiamo essere sicuramente esistente) prima di ; inviare il dato in emulazione di tastiera, senza ulteriori elaborazioni, tranne l'aggiunta del postfisso. ; ; IF STRLEN(Dato1) ; W32SETFOCUS(W32FINDWINDOW("*ULTRAEDIT-32*")) ; W32SENDKEYS(KTrans(Dato1) POSTFIX) ; FI ; CONTINUE ; >>> Codice di esempio commentato (funzionamento alternativo) <<< ; ; Seleziona la finestra del Blocco note; se non esiste, lancia il programma, attende 2 secondi, quindi ; introduce il dato in emulazione di tastiera, senza ulteriori elaborazioni. ; Il fuoco (= finestra in primo piano) al termine torna all'applicazione precedentemente in evidenza. ; ; IF STRLEN(Dato1) ; Hold = W32GETFOCUS() ; ; HW = W32FINDWINDOW("*Blocco note*") ; IF EQ(HW, 0) ; W32SHELL("NOTEPAD.EXE") ; SLEEP(2) ; HW = W32FINDWINDOW("*Blocco note*") ; FI ; IF NEQ(HW, 0) ; W32SETFOCUS(HW) ; W32SENDKEYS(KTrans(Dato1) POSTFIX) ; ELSE ; CONSOLELN "Impossibile aprire blocco note!" ; FI ; W32SETFOCUS(Hold) ; FI ; CONTINUE W32SENDKEYS(KTrans(Dato1) POSTFIX) LOOP FCLOSE(H) IF KILLFILE FREMOVE(PATHNAME) FI FI LOOP ABORT 0 FUNCTION KTrans(s) ; Mappatura dei caratteri speciali: caratteri che non si trovano ; sulla tastiera potrebbero richiedere l'introduzione della sequenza ; con ALT + numero l = STRLEN(s) r = "" FOR x = 1 TO l c = SUBSTR(s, x, 1) SWITCH c STREQ ON "~" r = r "{ALT DOWN}{NUMPAD1}{NUMPAD2}{NUMPAD6}{ALT UP}" ON "{" r = r "{ALT DOWN}{NUMPAD1}{NUMPAD2}{NUMPAD3}{ALT UP}" ON "}" r = r "{ALT DOWN}{NUMPAD1}{NUMPAD2}{NUMPAD5}{ALT UP}" ON "+", "^", "%", "(", ")", "[", "]" r = r "{" c "}" OTHER r = r c OFF NEXT RETURN r