Newsgroup: it.comp.lang.c++
Titolo: Logoff in win98

Ciao a tutti scrivo perché ho una applicazione scritta da me che
sotto NT va bene  ma sotto 98 non riesce piú a fare il logoff...
per il logoff chiamo la funzione exitwindowex(ewx_logoff|ewx_force , 0)
tutto quello che succede é che il sistema mi fa vedere la mascherina di
logoff
ma tutti i programmi aperti rimangono aperti (dietro la mascherina)........
Qualcun'altro ha questa strana esperienza extrasensoriale ???
Ciao
Roberto "Loba" Corti
Amministratore di rete
rco...@NOSPPAMONItinet.ch

...

Premetto che non ho Win98 :-)
Hai provato ad aggiungere anche EWX_SHUTDOWN ?
Oppure (dal winuser.h del BC++ 5.02)
#if(WINVER >= 0x0400)
#define EW_RESTARTWINDOWS    0x0042L
#define EW_REBOOTSYSTEM      0x0043L
#define EW_EXITANDEXECAPP    0x0044L
#define ENDSESSION_LOGOFF    0x80000000
#endif /* WINVER >= 0x0400 */
Ciao
Nazzareno

#endif /* WINVER >= 0x0400 */
Ciao,
ostrega se ho provato ma non ho trovato una soluzione.....
ho anche iniziato ora a cercare sul MSDN di luglio ma finora non
ho trovato niente.
Grazie comunque


 Qualcun'altro ha questa strana esperienza extrasensoriale ???
Potrebbe essere che prima di usare ExitWindowsEx tu abbia usato la funzione
InitiateSystemShutdown, definita nel file Winreg.h dell'SDK32, mentre
l'help in linea la definisce come solo per WinNT, pero' la sua funzione
esiste anche in Win95, e precisamente e' una funzione esportata dal file
ADVAPI32.DLL. Inoltre vi posto una nota del Knowledge Base che parla circa
l'uso contemporaneo dei flag EWX_LOGOFF e EWX_FORCE e che ha a che fare con
Win95, ma puo' darsi che vada anche in Win98:
PSS ID Number: Q149690
SYMPTOMS
========
When an application calls ExitWindowsEx with EWX_LOGOFF in Windows 95, the
application itself does not exit. Additionally, the use of the EWX_FORCE
flag in conjunction with EWX_LOGOFF will cause undefined behavior.
CAUSE
=====
It is the application's responsibility to terminate itself. However,
limitations of the implementation of ExitWindowsEx in Windows 95 require
that the application execute the ExitWindowsEx call and terminate itself in
a particular way.
RESOLUTION
==========
Code similar to the following will correctly perform a logoff in Windows
95:
   case IDM_LOGOFF:
      {
      DWORD    dw;
      HANDLE   hThread;
      g_hwndParent = hWnd;
      hThread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)ShutdownThread, (LPVOID) 0, 0, &dw);
      if(hThread)
         CloseHandle(hThread);
      }
      break;
/**************************************************************************
   ShutdownThread()
**************************************************************************/
BOOL WINAPI ShutdownThread(DWORD dwCmd)
{
BOOL  f;
f = ExitWindowsEx(EWX_LOGOFF, 0);
//if the shutdown worked, terminate the calling app
if (f)
   {
   if (g_hwndParent)
       {
       //shutdown the calling app ASAP, don't destroy the window
       PostMessage(g_hwndParent, WM_QUIT, 0, 0);
       }
   }
return f;
}
Scusate se il post e' un po' lungo.
Bye.
-- 
Jo Parrello - OWL/C++ Programmer (
jopa...@tin.it
)
http://space.tin.it/computer/giparrel

............
Grazie per la dritta, appena provo ti faró sapere...
Ciao
--



Dal mio file di Help, invece, sembra che ExitWindowsEx() ritorna appena
possibile e prosegue, poi, in modo asincrono.
Pero' questo non posso confermarlo, non l'ho provata in una applicazione,
solo come nell'esempio postato in un'altro thread.
Se provi a compilarlo (l'altro esempio) con win32 console e poi a lanciarlo fa la stessa
cosa?
Ciao
Nazzareno