[ luner @ 12.09.2002. 18:08 ] @
Pošto nisam baš vičan programiranju za Windows platforme treba mi pomoć oko ovakvog programčića. Evo šta mi je potrebno:

Da ima programčić koji ima svoj log fajl i da uradi sledeću stvar:

Kada se pokrene taj program on treba da:
u svoj log fajl upiše trenutno vreme;
pokrene neki drugi program;
kada se pokrenuti eksterni program završi, pvaj programčić treba da u log fajl upiše trenutno vreme;

Poželjno je da pri upisu vremena u log fajl upiše i kratke stringove (recimo "početak" i "kraj").

Za ovo nisu potrebne nikakve grafike (čak je poželjno da taj programčić bude potpuno nevidljiv).

Ja sam ovako nešto pokušao da izvedem pomoću .bat fajla:

program_za_upis_pocetnog_vremena.exe >> log.fajl
eksterni_program.exe
program_za_upis_krajnjeg_vremena.exe >> log.fajl

dva navedena programa za upis vremena su jednostavni pascal programi koji samo ospisuju string tipa "start:XX:XX:XX" i "stop:XX:XX:XX".

Medjutim, ovo ne radi. Posto je ovo bat fajl koji je linkovan sa desktop-a win98 kada se pokrene on upise start:vreme, pokrene eksterni program i odmah (ne čeka da eksterni program završi sa radom) upiše i stop:vreme. Najčešće se ova dva vremena poklapaju ili odstupaju maksimalno za sekundu.

Šta je uzrok ovome i kako to rešiti?

Eventualno (ukoliko neko ima vremena) bio bih zahvalan da mi neko napiše programčić koji bi se sastojao od:
izvršnog fajla - (koji bi u log fajl upisivao stringove start:vreme, pokretao eksterni program i kad eksterni program završi sa radom upisao stop:vreme u log fajl)

log fajla - (fajl u koji se upisuju start:vreme i stop:vreme stringovi)

konfiguracionog fajla - (fajl u kome bi se nalazila putanja do eksternog programa)

(program bi trebao da bude nevidljiv - recimo pisan u pakalu ili tako nečemu)

Pozdrav i hvala unapred!
[ StratOS @ 10.10.2003. 09:58 ] @
Citat:
luner:
čak je poželjno da taj programčić bude potpuno nevidljiv
Pozdrav i hvala unapred!


Potpuno=NOP

Hm, nisam te tocno razumeo sto program treba da radi (trackuje programe koje sam startujes i logira application start i end ?)

Mogao bi da napravim to u VB-u
a sto se tiche bat fajla u Win9x/NT OS-ima

(Za XP, no mislim da je slicno za win9x)
COMMAND [[drive:]path] [device] [/E:nnnnn] [/P] [/C string] [/MSG]

[drive:]path Specifies the directory containing COMMAND.COM file.
device Specifies the device to use for command input and output.
/E:nnnnn Sets the initial environment size to nnnnn bytes.
/P Makes the new command interpreter permanent (can't exit).
/C string Carries out the command specified by string, and then stops.

/MSG Specifies that all error messages be stored in memory. You
need to specify /P with this switch.
[ ddz @ 10.10.2003. 11:32 ] @
Ako hoćeš da sačekaš da se program zatvori, možeš u bat fajlu da otlucaš:

Code:
program_za_upis_pocetnog_vremena.exe >> log.fajl
start /w eksterni_program.exe
program_za_upis_krajnjeg_vremena.exe >> log.fajl


Ali time ne rešavaš problem nevidljivosti programa. Za tako nešto ćeš ipak morati da koristiš VB ili Delphi
[ StratOS @ 13.10.2003. 09:31 ] @
Citat:
ddz:
Ako hoćeš da sačekaš da se program zatvori, možeš u bat fajlu da otlucaš:
Ali time ne rešavaš problem nevidljivosti programa. Za tako nešto ćeš ipak morati da koristiš VB ili Delphi


Da za win9x sisteme kod Ctrl-Alt-Del-a to se mozhe, no ako rabis neki eksterni program viewer vidi se sta je upaljeno i sta ne, no kod NT i XP sistema za stealth program treba malo vishe programskog razumjevanja i mogucheg injeciranja eksternog programa i patchiranja PE header file-a ...

Ja ti mogu napraviti VB proggy sa elementima nevidivosti na win9x sistemina, koji ce da startuje neki exe fajl i kad se taj program starta/zavrsi napisati to u log fileu.
Program ce imati INI fajl za put do eksternog programa i logove.

glede bat komandi na win9x mashinama:
C:\WINDOWS\Namizje>start /?
Zažene program za Windows ali MS-DOS.

START [stikala] program [arg...]
START [stikala] dokument.pri

/m[inimized] Program zažene minimirano (v ozadju).
/max[imized] Program zažene maksimirano (v ospredju).
/r[estored] Program zažene v obnovljenem oknu (v ospredju). [privzeto]
/w[ait] Ukazno vrstico za DOS prikaže šele, ko se program konča.

C:\WINDOWS\Namizje>command /?
Zažene dodatno kopijo ukaznega procesorja.

COMMAND [[pogon:]pot] [naprava] [/E:nnnnn] [/L:nnnn] [/U:nnn] [/P] [/MSG]
[/LOW] [/Y [/[C|K] ukaz]]
[pogon:]pot Imenik, v katerem je COMMAND.COM.
naprava Naprava za vnos ukazov in izpis rezultatov.
/E:nnnnn Nastavi začetno velikost okolja na nnnnn bajtov.
(nnnnn je število med 256 in 32.768).
/L:nnnn Določa dolžino notranjih medpomnilnikov (zahteva stikalo /P).
(nnnn je število med 128 in 1024).
/U:nnn Določa dolžino vhodnega medpomnilnika (zahteva stikalo /P).
(nnn je število med 128 in 255).
/P Novi ukazni procesor postane trajen (izstop ni mogoč).
/MSG V pomnilnik shrani vsa sporočila o napakah (zahteva stikalo /P).
/LOW Prisili ukazni procesor, da svoje trajne podatke hrani v
spodnjem pomnilniku.
/Y Korakoma izvede paketno datoteko, navedeno s stikalom /C oz. /K.
/C ukaz Ko se ukaz izvede, se COMMAND.COM konča.
/K ukaz Ko se ukaz izvede, se COMMAND.COM ne konča.


Ako si zainteresiran, javi mi !

poz. StratOS
[ StratOS @ 15.10.2003. 08:49 ] @
Evo, malo na brzo sam napravio taj exe fajl.
Profiler.exe je VB6 program, za kojeg trebate registriranu COMDLG32.OCX (MSComDlg.CommonDialog)
http://zemssoft.netfirms.com/download/comdlg32.exe
Trebate i VB6sp5 runtime komponente (ako jih vec nemate instalirane).
http://download.microsoft.com/...5/WIN98Me/EN-US/vbrun60sp5.exe (0,99 MB)

Sam program ima mogucnost command:
'Profiler.exe install'
'Profiler.exe uninstall'
'Profiler.exe open'

u MS-DOS-u mozete da INSTALIRATE 'Profiler.exe install'
On kopira sam fajl na vash //windows// dir
sa 'uninstall' deinstalirate program i izbrisete dodatke u win.ini-u i registu
sa 'open' pregledate koliko puta i kad je program pokrenut (fajl Filelog.log u vasim //windows dir-u)

Program je testiran na win98, rabi i win9x stealth process (Stealthan za Ctrl-Alt-Del !)
Kako radi na NT/2000/XP/Me nisam testirao ... molio bi za mali test.

mali bug ??? barem kod mene ???:
nemam pojma, a znam da se programi u win.ini-u sekciji [windows] run i load separiraju sa ';', al ne znam zasto to ne radi kod startupa (Ni pravilno case-sensitive formatiranje ne radi ) Zasto ?
... Pa sam dao i u registar kljuc HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run pod string value 'LoadCurrentProfile' put do tog fajla !

Kako logirati tocno odredzen program :
program (Profiler.exe) kod instalacije radi samo u //windows dir-u !!
u MS-dosu u //windowsdiru// odkucajte Profiler.exe open
ili u Run-u otkucajte //windowsdir//Profiler.exe open
Default kot toga je program calc.exe, kliknite na textboxt sa programom, kojim ga zelite da izmenite, program treba biti Executable (*.exe ili *.com) u donjem textbox-u vidite i kad je program startan i kad se je program Zavrsio.
Program koji startuje i gleda kad ce biti zavrsen se nalazi u registru na HKEY_USERS\.DEFAULT\Software\VB and VBA Program Settings\Profiler by StratOS\Shell

Hm, kad sam to napravio htio sam da se malo bolje zabavim i sa zastitom !
Mozda cu i to napraviti ako budem imao vremena.

U jedan direktorij napraviti backup fajl, promenuti default u Explorer shellu kako tretira zagonske fajlove
Read 'default value' na HKEY_CLASSES_ROOT\.exe i KEY_CLASSES_ROOT\.com
Procitati i imeniti HKEY_CLASSES_ROOT\\'default value'\\shell\open\command
primjer HKEY_CLASSES_ROOT\comfile\shell\open\command i promjenuti default vrjednost sa
"%1" %* na recimo 'c:\windows\backup.exe %1" %*'

Znaci svaki put kad startujemo neki zagonski program prije se nam startuje nas backup program, koji ce odraditi svoje i kasnije startati taj zeljeni program ..
... ajde dosta toga
[ StratOS @ 15.10.2003. 08:56 ] @
Sad kad sam ga malo testirao, vidio sam da ima josh jedan bug :
Kod izbora programa, treba promjeniti File string value u HKEY_USERS\.DEFAULT\Software\VB and VBA Program Settings\Profiler by StratOS\Shell

... ne radi mi se vishe ...
[ leka @ 15.10.2003. 09:49 ] @
Koristite WinAPI funkciju spawnlp() (ili neku drugu iz te "porodice"), i za mod stavite P_WAIT. Na ovaj nacin ce vam program startovati novi proces (drugi program) i CEKATI da se isti zavrsi. Veoma prosto jel'da? Naravno, isto se moze sa 5x komplikovanijom CreateProcess() funkcijom... spawnlp() mnogo laksa, zato sam je ovde predlozio.