#endif
#endif //WX_PRECOMP
-// In some mingws there is a missing extern "C" int the winsock header,
-// so we put it here just to be safe. Note that this must appear _before_
-// #include "wx/msw/private.h" which itself includes <windows.h>, as this
-// one in turn includes <winsock.h> unless we define WIN32_LEAN_AND_MEAN.
-//
-#if defined(__WIN32__) && !defined(__TWIN32__) && !defined(__WXMICROWIN__) && ! (defined(__GNUWIN32__) && !defined(__MINGW32__))
-extern "C" {
- #include <winsock.h> // we use socket functions in wxGetFullHostName()
-}
-#endif
-
#include "wx/msw/private.h" // includes <windows.h>
+#ifdef __GNUWIN32_OLD__
+ // apparently we need to include winsock.h to get WSADATA and other stuff
+ // used in wxGetFullHostName() with the old mingw32 versions
+ #include <winsock.h>
+#endif
+
#include "wx/timer.h"
#if !defined(__GNUWIN32__) && !defined(__WXWINE__) && !defined(__SALFORDC__) && !defined(__WXMICROWIN__)
{
#if defined(__WIN32__) && !defined(__TWIN32__) && !defined(__WXMICROWIN__) && ! (defined(__GNUWIN32__) && !defined(__MINGW32__))
// TODO should use GetComputerNameEx() when available
+
+ // the idea is that if someone had set wxUSE_SOCKETS to 0 the code
+ // shouldn't use winsock.dll (a.k.a. ws2_32.dll) at all so only use this
+ // code if we link with it anyhow
+#if wxUSE_SOCKETS
WSADATA wsa;
if ( WSAStartup(MAKEWORD(1, 1), &wsa) == 0 )
{
if ( pHostEnt )
{
// Windows will use DNS internally now
- pHostEnt = gethostbyaddr(pHostEnt->h_addr, 4, PF_INET);
+ pHostEnt = gethostbyaddr(pHostEnt->h_addr, 4, AF_INET);
}
if ( pHostEnt )
WSACleanup();
- if ( !!host )
+ if ( !host.empty() )
{
wxStrncpy(buf, host, maxSize);
return TRUE;
}
}
+#endif // wxUSE_SOCKETS
+
#endif // Win32
return wxGetHostName(buf, maxSize);
return 0;
}
}
-#else // Win15
+#else // Win16
wxFAIL_MSG( _T("not implemented") );
#endif // Win32/Win16
{
wxChar *shell = wxGetenv(wxT("COMSPEC"));
if ( !shell )
- shell = wxT("\\COMMAND.COM");
+ shell = (wxChar*) wxT("\\COMMAND.COM");
wxString cmd;
if ( !command )
return wxExecute(cmd, TRUE /* sync */) != 0;
}
+// Shutdown or reboot the PC
+bool wxShutdown(wxShutdownFlags wFlags)
+{
+#ifdef __WIN32__
+ bool bOK = TRUE;
+
+ if ( wxGetOsVersion(NULL, NULL) == wxWINDOWS_NT ) // if is NT or 2K
+ {
+ // Get a token for this process.
+ HANDLE hToken;
+ bOK = ::OpenProcessToken(GetCurrentProcess(),
+ TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
+ &hToken) != 0;
+#ifndef __WXWINE__
+ if ( bOK )
+ {
+ TOKEN_PRIVILEGES tkp;
+
+ // Get the LUID for the shutdown privilege.
+ ::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
+ &tkp.Privileges[0].Luid);
+
+ tkp.PrivilegeCount = 1; // one privilege to set
+ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+
+ // Get the shutdown privilege for this process.
+ ::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
+ (PTOKEN_PRIVILEGES)NULL, 0);
+
+ // Cannot test the return value of AdjustTokenPrivileges.
+ bOK = ::GetLastError() == ERROR_SUCCESS;
+ }
+#endif
+ }
+
+ if ( bOK )
+ {
+ UINT flags = EWX_SHUTDOWN | EWX_FORCE;
+ switch ( wFlags )
+ {
+ case wxSHUTDOWN_POWEROFF:
+ flags |= EWX_POWEROFF;
+ break;
+
+ case wxSHUTDOWN_REBOOT:
+ flags |= EWX_REBOOT;
+ break;
+
+ default:
+ wxFAIL_MSG( _T("unknown wxShutdown() flag") );
+ return FALSE;
+ }
+
+ bOK = ::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE | EWX_REBOOT, 0) != 0;
+ }
+
+ return bOK;
+#else // Win16
+ return FALSE;
+#endif // Win32/16
+}
+
// ----------------------------------------------------------------------------
// misc
// ----------------------------------------------------------------------------
#endif
}
+unsigned long wxGetProcessId()
+{
+#ifdef __WIN32__
+ return ::GetCurrentProcessId();
+#else
+ return 0;
+#endif
+}
+
// Emit a beeeeeep
void wxBell()
{
static wxChar buffer[512];
if (!wxTheApp->GetWantDebugOutput())
- return ;
+ return;
va_start(ap, fmt);
- wvsprintf(buffer,fmt,ap) ;
- OutputDebugString((LPCTSTR)buffer) ;
+ wvsprintf(buffer,fmt,ap);
+ OutputDebugString((LPCTSTR)buffer);
va_end(ap);
}
if ( !name )
return -1;
- wxFontEncoding enc = wxTheFontMapper->CharsetToEncoding(name, FALSE);
+ wxFontEncoding enc = wxFontMapper::Get()->CharsetToEncoding(name, FALSE);
if ( enc == wxFONTENCODING_SYSTEM )
return -1;