Předmět Autor Datum
API funkce SetSystemTime(), ale na to si potrebujes pozadat system o opravneni SE_SYSTEMTIME_NAME po…
Jan Fiala 26.04.2006 10:00
Jan Fiala
Potřebuju do databáze zapsat přesný časový údaj, tudíž přesně před zápisem potřebuji nastavit na lok…
HonzaX 26.04.2006 10:03
HonzaX
... příkazem NET TIME toho dosáhnu zcela spolehlivě, ale problikává tam neustále to CDM okno.
HonzaX 26.04.2006 10:04
HonzaX
Nevim, jak pracujes s databazi, ale podobne udaje se obvykle zapisuji na SQL serverech na serverove…
Jan Fiala 26.04.2006 11:53
Jan Fiala
Hmmm, a šel by uvést příklad volání těchto funkcí, případně jestli fungují i ve Win 9x? Díky.
HonzaX 29.04.2006 07:33
HonzaX
Vyřešeno, už to funguje jak má.
HonzaX 29.04.2006 08:06
HonzaX
Bylo by slusne napsat, jak jsi to nakonec vyresil - pomuze to ostatnim, kteri budou resit podobnou v…
Jan Fiala 29.04.2006 08:27
Jan Fiala
Dělám to ve Visual FoxPro, takže kód je zapsán takto: m.cPRG='net.exe' m.cPAR='time \\server /set /…
HonzaX 29.04.2006 08:58
HonzaX
Pokud je potřeba, aby externí program provedl uričtou funkci, může být nutné pozastavit provádění da…
HonzaX 29.04.2006 10:00
HonzaX
Pokud ma program na dokonceni procesu cekat, slouzi k tomu API CreateProcess() spolu s funkci WaitFo… poslední
Jan Fiala 29.04.2006 11:12
Jan Fiala

Nevim, jak pracujes s databazi, ale podobne udaje se obvykle zapisuji na SQL serverech na serverove strane, napr. v ulozene procedure, trigger, default hodnota v tabulce atd.

Taky nevim, jakym zpusobem cas nastavujes. Pokud to delas ze sve aplikace, neni prece problem spustit NET TIME tak, aby se okno vubec nezobrazilo - parametr SW_HIDE v API ShellExecute(), podobne ve WinExec()

Bylo by slusne napsat, jak jsi to nakonec vyresil - pomuze to ostatnim, kteri budou resit podobnou vec.

Jinak volani napr.:

ShellExecute(0, 'Open', 'net.exe', 'TIME \\SERVER /SET /YES', nil, SW_HIDE);

Predpokladem je, ze existuje v systemove promenne path do systemoveho adresare (aby byl nalezen NET.EXE). Pokud tam predavas promenne, je treba je pretypovat na PChar, v Delpúhi je to PChar(promenna)

Dělám to ve Visual FoxPro, takže kód je zapsán takto:

m.cPRG='net.exe'
m.cPAR='time \\server /set /yes'
DECLARE INTEGER ShellExecute IN SHELL32.DLL ;
Integer nWinHandle,;
String cOperation,;
String cFileName,;
String cParameters,;
String cDirectory,;
Integer nShowWindow
IF ShellExecute(0,'open',m.cPRG,m.cPAR,'',0)<=32
CLEAR DLLS
RETURN .f.
ELSE
CLEAR DLLS
RETURN .t.
ENDIF

Jenom by mě ještě zajímalo, jestli kromě příkazu NET existuje ještě jiné řešení.

Pokud je potřeba, aby externí program provedl uričtou funkci, může být nutné pozastavit provádění dalšího kódu, až se ext. program ukončí. To pomocí ShellExec nejde. Řešení je pak Windows Script:

#define SW_HIDE 0
#define SW_NORMAL 1
#define SW_MINIMIZED 2
#define SW_MAXIMIZED 3

#define WAIT .T.
#define NOWAIT .F.

oWSShell=CREATEOBJECT('WScript.Shell')
oWSShe ll.Run('net.exe time \\server /set /yes',SW_HIDE,WAIT)

Pokud ma program na dokonceni procesu cekat, slouzi k tomu API CreateProcess() spolu s funkci WaitForSingleObject()
Je to obdoba skriptu, ktery popisujes. Pouziti WSH v programu by bylo trochu skravani se za uchem, protoze bys musel spustit z programu WSH a v nem spustis ten program.

Jinak resit se to da klidne i pomoci WinExec(), protoze to vraci handle procesu, ktery pak muzes pouzit ve WaitForSingleObject() a cekat na dokonceni.

Zpět do poradny Odpovědět na původní otázku Nahoru