1 ///////////////////////////////////////////////////////////////////////////////
2 // MuldeR's Utilities for Qt
3 // Copyright (C) 2004-2017 LoRd_MuldeR <MuldeR2@GMX.de>
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License, or (at your option) any later version.
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 // http://www.gnu.org/licenses/lgpl-2.1.txt
20 //////////////////////////////////////////////////////////////////////////////////
24 * @brief This file contains function that wrap OS-specific functionality in a platform-independent way
30 #include <MUtils/Global.h>
41 ///////////////////////////////////////////////////////////////////////////////
44 * \brief Global MUtils namespace
49 * \brief MUtils OS-specific functions namespace
54 * \brief OS version information namespace
59 * \brief This enumeration specifies the type of the underlaying operating system
63 OS_UNKNOWN
= 0, ///< Unknown operating system
64 OS_WINDOWS
= 1 ///< Microsoft(R) Windows
69 * \brief This struct contains version information about the underlaying operating system. See `_os_version_t` for details!
71 typedef struct _os_version_t
73 unsigned int type
; ///< The type of the underlaying operating system, as `os_type_t`
74 unsigned int versionMajor
; ///< The *major* version of the underlaying operating system
75 unsigned int versionMinor
; ///< The *minor* version of the underlaying operating system
76 unsigned int versionBuild
; ///< The *build* number of the underlaying operating system
79 MUTILS_API
bool operator== (const _os_version_t
&rhs
) const;
80 MUTILS_API
bool operator!= (const _os_version_t
&rhs
) const;
81 MUTILS_API
bool operator> (const _os_version_t
&rhs
) const;
82 MUTILS_API
bool operator>= (const _os_version_t
&rhs
) const;
83 MUTILS_API
bool operator< (const _os_version_t
&rhs
) const;
84 MUTILS_API
bool operator<= (const _os_version_t
&rhs
) const;
88 //Known Windows NT versions
89 MUTILS_API
extern const os_version_t WINDOWS_WIN2K
; ///< \brief Operating system version constant \details Microsoft(R) Windows 2000
90 MUTILS_API
extern const os_version_t WINDOWS_WINXP
; ///< \brief Operating system version constant \details Microsoft(R) Windows XP
91 MUTILS_API
extern const os_version_t WINDOWS_XPX64
; ///< \brief Operating system version constant \details Microsoft(R) Windows XP x64-edition
92 MUTILS_API
extern const os_version_t WINDOWS_VISTA
; ///< \brief Operating system version constant \details Microsoft(R) Windows Vista
93 MUTILS_API
extern const os_version_t WINDOWS_WIN70
; ///< \brief Operating system version constant \details Microsoft(R) Windows 7
94 MUTILS_API
extern const os_version_t WINDOWS_WIN80
; ///< \brief Operating system version constant \details Microsoft(R) Windows 8
95 MUTILS_API
extern const os_version_t WINDOWS_WIN81
; ///< \brief Operating system version constant \details Microsoft(R) Windows 8.1
96 MUTILS_API
extern const os_version_t WINDOWS_WN100
; ///< \brief Operating system version constant \details Microsoft(R) Windows 10
99 MUTILS_API
extern const os_version_t UNKNOWN_OPSYS
; ///< \brief Operating system version constant \details Unknown operating system version
103 * \brief This enumeration specifies "known" folder identifiers
107 FOLDER_LOCALAPPDATA
= 0, ///< Local application data (non-roaming)
108 FOLDER_PROGRAMFILES
= 2, ///< Program files
109 FOLDER_SYSTEMFOLDER
= 3, ///< System directory
110 FOLDER_SYSTROOT_DIR
= 4 ///< System "root" directory
115 * \brief This enumeration specifies network connection types
119 NETWORK_TYPE_ERR
= 0, ///< Network connection is unknown
120 NETWORK_TYPE_NON
= 1, ///< Computer is **not** connected to a network
121 NETWORK_TYPE_YES
= 2 ///< Computer *is* connected to a network
126 MUTILS_API
void system_message_nfo(const wchar_t *const title
, const wchar_t *const text
);
127 MUTILS_API
void system_message_wrn(const wchar_t *const title
, const wchar_t *const text
);
128 MUTILS_API
void system_message_err(const wchar_t *const title
, const wchar_t *const text
);
131 typedef QMap
<QString
,QString
> ArgumentMap
;
132 MUTILS_API
const QStringList
crack_command_line(const QString
&command_line
= QString());
133 MUTILS_API
const ArgumentMap
&arguments(void);
136 typedef bool (*progress_callback_t
)(const double &progress
, void *const userData
);
137 MUTILS_API
bool copy_file(const QString
&sourcePath
, const QString
&outputPath
, const bool &overwrite
= true, const progress_callback_t callback
= NULL
, void *const userData
= NULL
);
140 MUTILS_API
bool get_file_version(const QString fileName
, quint16
*const major
= NULL
, quint16
*const minor
= NULL
, quint16
*const patch
= NULL
, quint16
*const build
= NULL
);
143 MUTILS_API
const Version::os_version_t
&os_version(void);
144 MUTILS_API
const char *os_friendly_name(const MUtils::OS::Version::os_version_t
&os_version
);
145 MUTILS_API
const bool &running_on_wine(void);
148 MUTILS_API
const QString
&known_folder(known_folder_t folder_id
);
150 //Current Date & Time
151 MUTILS_API QDate
current_date(void);
152 MUTILS_API quint64
current_file_time(void);
154 //Check for process elevation
155 MUTILS_API
bool is_elevated(bool *bIsUacEnabled
= NULL
);
156 MUTILS_API
bool user_is_admin(void);
159 * \brief Check the network status
161 * Checks whether the computer is *currently* connected to a network. Note that an existing network connection does **not** necessarily imply actual Internet access!
163 * \return The function returns the current network status as a `OS::network_type_t` value.
165 MUTILS_API
int network_status(void);
168 MUTILS_API
bool handle_os_message(const void *const message
, long *result
);
171 * \brief Suspend calling thread
173 * This function suspends the calling thread. The thread will give up its current time-slice and enter "sleeping" state. The thread will remain in "sleeping" for the specified duration. After the specified duration has elapsed, the thread will be resumed.
175 * Note that it depends on the operating system's scheduling decisions, when the thread will actually be allowed to execute again! While the thread is still in "sleeping" state, it can **not** be selected for execution by the operating system's scheduler. Once the thread is *no* longer in "sleeping" state, i.e. the specified period has elapsed, the thread *can* be selected for execution by the operating system's scheduler again - but this does **not** need to happen *immediately*! The scheduler decides which thread is allowed to execute next, taking into consideration thread priorities.
177 * \param duration The amount of time that the thread will be suspended, in milliseconds. A value of **0** means that the thread will *not* actually enter "sleeping" state, but it will still give up its current time-slice!
179 MUTILS_API
void sleep_ms(const size_t &duration
);
181 //Is executable/library file?
182 MUTILS_API
bool is_executable_file(const QString
&path
);
183 MUTILS_API
bool is_library_file(const QString
&path
);
185 //Shutdown & Hibernation
186 MUTILS_API
bool is_hibernation_supported(void);
187 MUTILS_API
bool shutdown_computer(const QString
&message
, const unsigned long timeout
, const bool forceShutdown
, const bool hibernate
);
190 MUTILS_API
bool free_diskspace(const QString
&path
, quint64
&freeSpace
);
193 MUTILS_API
bool shell_open(const QWidget
*parent
, const QString
&url
, const bool explore
= false);
194 MUTILS_API
bool shell_open(const QWidget
*parent
, const QString
&url
, const QString
¶meters
, const QString
&directory
, const bool explore
= false);
197 MUTILS_API
bool open_media_file(const QString
&mediaFilePath
);
200 MUTILS_API
bool change_process_priority(const int priority
);
201 MUTILS_API
bool change_process_priority(const QProcess
*proc
, const int priority
);
204 MUTILS_API quint32
process_id(void);
205 MUTILS_API quint32
process_id(const QProcess
*const proc
);
208 MUTILS_API quint32
thread_id(void);
209 MUTILS_API quint32
thread_id(const QProcess
*const proc
);
211 //Suspend or resume processv
212 MUTILS_API
bool suspend_process(const QProcess
*proc
, const bool suspend
);
214 //System timer resolution
215 MUTILS_API
bool setup_timer_resolution(const quint32
&interval
= 1);
216 MUTILS_API
bool reset_timer_resolution(const quint32
&interval
= 1);
219 MUTILS_API
bool set_file_time(const QFile
&file
, const QDateTime
&created
= QDateTime(), const QDateTime
&modified
= QDateTime(), const QDateTime
&accessed
= QDateTime());
220 MUTILS_API
bool set_file_time(const QString
&path
, const QDateTime
&created
= QDateTime(), const QDateTime
&modified
= QDateTime(), const QDateTime
&accessed
= QDateTime());
223 MUTILS_API
bool check_key_state_esc(void);
226 MUTILS_API
void shell_change_notification(void);
228 //Get file path from descriptor
229 MUTILS_API QString
get_file_path(const int &fd
);
232 MUTILS_API
bool wow64fsredir_disable(void *oldValue
);
233 MUTILS_API
bool wow64fsredir_revert (void *oldValue
);
235 //Environment variables
236 MUTILS_API QString
get_envvar(const QString
&name
);
237 MUTILS_API
bool set_envvar(const QString
&name
, const QString
&value
);
239 //Check if debugger is present
240 MUTILS_API
void check_debugger(void);
243 MUTILS_API
void fatal_exit(const wchar_t* const errorMessage
);
247 ///////////////////////////////////////////////////////////////////////////////