Newsgroup: it.comp.lang.delphi
Titolo: shellexecute

Lancio un programma di installazione e devo attendere che finisca.
Come posso fare?
Uso ShellExecute
Ma dopo il programma mi scorre, come faccio a mettere l'attesa?
--
Chrys-bj
www.digilander.iol.it/chrysbj

 Come posso fare?
WaitForSingleObject
--
- Carlo -
c.b...@libero.it

Purtroppo uso la versione 1.0 del Delphi e questo comando non esiste, c'è
un'altra possibilità?
Ciao e Grazie
--
Chrys-bj
www.digilander.iol.it/chrysbj

 un'altra possibilità?
Non si tratta di un comando interno a Delphi, ma è una API di Windows ...
tuttavia c'è il rischio di non compatibilità per via delle applicazioni
Win32 ...
Altre strade non ne conosco (se non per vie poco raccomandabili) ... Tra le
altre cose c'era una rivista che distribuiva gratuitamente Delphi 2 ...
--
The WaitForSingleObject function returns when one of the following occurs:
· The specified object is in the signaled state.
· The time-out interval elapses.
DWORD WaitForSingleObject(
    HANDLE hHandle, // handle of object to wait for
    DWORD dwMilliseconds  // time-out interval in milliseconds
   );
Parameters
hHandle
Identifies the object. For a list of the object types whose handles can be
specified, see the following Remarks section.
Windows NT: The handle must have SYNCHRONIZE access. For more information,
see Access Masks and Access Rights.
dwMilliseconds
Specifies the time-out interval, in milliseconds. The function returns if
the interval elapses, even if the object's state is nonsignaled. If
dwMilliseconds is zero, the function tests the object's state and returns
immediately. If dwMilliseconds is INFINITE, the function's time-out interval
never elapses.
Return Values
If the function succeeds, the return value indicates the event that caused
the function to return.
If the function fails, the return value is WAIT_FAILED. To get extended
error information, call GetLastError.
The return value on success is one of the following values:
Value Meaning
WAIT_ABANDONED The specified object is a mutex object that was not released
by the thread that owned the mutex object before the owning thread
terminated. Ownership of the mutex object is granted to the calling thread,
and the mutex is set to nonsignaled.
WAIT_OBJECT_0 The state of the specified object is signaled.
WAIT_TIMEOUT The time-out interval elapsed, and the object's state is
nonsignaled.
Remarks
The WaitForSingleObject function checks the current state of the specified
object. If the object's state is nonsignaled, the calling thread enters an
efficient wait state. The thread consumes very little processor time while
waiting for the object state to become signaled or the time-out interval to
elapse.
Before returning, a wait function modifies the state of some types of
synchronization objects. Modification occurs only for the object or objects
whose signaled state caused the function to return. For example, the count
of a semaphore object is decreased by one.
The WaitForSingleObject function can wait for the following objects:
Object Description
Change notification The FindFirstChangeNotification function returns the
handle. A change notification object's state is signaled when a specified
type of change occurs within a specified directory or directory tree.
Console input The handle is returned by the CreateFile function when the
CONIN$ value is specified, or by the GetStdHandle function. The object's
state is signaled when there is unread input in the console's input buffer,
and it is nonsignaled when the input buffer is empty.
Event The CreateEvent or OpenEvent function returns the handle. An event
object's state is set explicitly to signaled by the SetEvent or PulseEvent
function. A manual-reset event object's state must be reset explicitly to
nonsignaled by the ResetEvent function. For an auto-reset event object, the
wait function resets the object's state to nonsignaled before returning.
Event objects are also used in overlapped operations, in which the state is
set by the system.
Mutex The CreateMutex or OpenMutex function returns the handle. A mutex
object's state is signaled when it is not owned by any thread. The wait
function requests ownership of the mutex for the calling thread, changing
the mutex's state to nonsignaled when ownership is granted.
Process The CreateProcess or OpenProcess function returns the handle. A
process object's state is signaled when the process terminates.
Semaphore The CreateSemaphore or OpenSemaphore function returns the handle.
A semaphore object maintains a count between zero and some maximum value.
Its state is signaled when its count is greater than zero and nonsignaled
when its count is zero. If the current state is signaled, the wait function
decreases the count by one.
Thread The CreateProcess, CreateThread, or CreateRemoteThread function
returns the handle. A thread object's state is signaled when the thread
terminates.
Timer The CreateWaitableTimer or OpenWaitableTimer function returns the
handle. Activate the timer by calling the SetWaitableTimer function. The
state of an active timer is signaled when it reaches its due time. You can
deactivate the timer by calling the CancelWaitableTimer function. The state
of an active timer is signaled when it reaches its due time. You can
deactivate the timer by calling the CancelWaitableTimer function.
In some circumstances, you can specify a handle of a file, named pipe, or
communications device as a synchronization object in lpHandles. However,
their use for this purpose is discouraged.
You have to be careful when using the wait functions and DDE. If a thread
creates any windows, it must process messages. DDE sends messages to all
windows in the system. If you have a thread that uses a wait function with
no time-out interval, the system will deadlock. Therefore, if you have a
thread that creates windows, use MsgWaitForMultipleObjects or
MsgWaitForMultipleObjectsEx, rather than WaitForSingleObject.
--
Saluti.


 un'altra possibilità?
Prova cosi' e' un pochino "artigianale" ma dovrebbe funzionare anche su  D1,
se non ricordo male,
e' da un po' che non la uso ;)
Se la funzione ti ritorna un 32 tutto OK
Function WinExecAndWait(Path : Pchar; Visibility : word) : word;
var InstanceID : THandle;
    Msg : TMsg;
begin
  InstanceID := WinExec(Path,Visibility);
  if InstanceID <32 then {se meno di 32 errore}
   WinExecAndWait := InstanceID
  else
  begin
    Repeat
      While PeekMessage(Msg,0,0,0,PM_REMOVE) do
      begin
        if Msg.Message = WM_QUIT then
          halt(Msg.wParam);
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
    until GetModuleUsage(InstanceID) = 0;
    WinExecAndWait := 32;
  end;
end;
Saluti Arturo

   InstanceID := WinExec(Path,Visibility);
L'utilizzo di WinExec è ormai ultra_sconsigliato, la funzione è tuttora
presente solo per compatibilità con le vecchie versioni di Windows ...
dovrebbe essere sostituita con ShellExecute o CreateProcess.
Saluti


 dovrebbe essere sostituita con ShellExecute o CreateProcess.
Infatti io la usavo ai tempi di D1 o D2 non ricordo, ma Chrys-bj ha detto
che usa D1, così ho pensato di postare la funzione che usavo ai tempi.
Tutto qui.
Mi scuso e mi cospargo di cenere ect ect...se ho dato un consiglio errato
Saluti Arturo