ReactOS 0.4.15-dev-7906-g1b85a5f
utils.c File Reference
#include "precomp.h"
#include "utils.h"
#include "stringutils.h"
Include dependency graph for utils.c:

Go to the source code of this file.

Macros

#define g_hHeap   GetProcessHeap()
 

Functions

BOOL MemFree (IN PVOID lpMem)
 
PVOID MemAlloc (IN DWORD dwFlags, IN SIZE_T dwBytes)
 
LPWSTR FormatDateTime (IN LPSYSTEMTIME pDateTime)
 
VOID FreeDateTime (IN LPWSTR lpszDateTime)
 
LPWSTR LoadResourceStringEx (IN HINSTANCE hInstance, IN UINT uID, OUT size_t *pSize OPTIONAL)
 
LPWSTR LoadConditionalResourceStringEx (IN HINSTANCE hInstance, IN BOOL bCondition, IN UINT uIDifTrue, IN UINT uIDifFalse, IN size_t *pSize OPTIONAL)
 
DWORD RunCommand (IN LPCWSTR lpszCommand, IN LPCWSTR lpszParameters, IN INT nShowCmd)
 
VOID ClipOrCenterRectToMonitor (LPRECT prc, UINT flags)
 
VOID ClipOrCenterWindowToMonitor (HWND hWnd, UINT flags)
 
BOOL IsWindowsOS (VOID)
 
BOOL IsPreVistaOSVersion (VOID)
 
LPWSTR GetExecutableVendor (IN LPCWSTR lpszFilename)
 

Macro Definition Documentation

◆ g_hHeap

#define g_hHeap   GetProcessHeap()

Definition at line 14 of file utils.c.

Function Documentation

◆ ClipOrCenterRectToMonitor()

VOID ClipOrCenterRectToMonitor ( LPRECT  prc,
UINT  flags 
)

Definition at line 173 of file utils.c.

174{
175 HMONITOR hMonitor;
177 RECT rc;
178 int w = prc->right - prc->left;
179 int h = prc->bottom - prc->top;
180
181 //
182 // Get the nearest monitor to the passed rect.
183 //
184 hMonitor = MonitorFromRect(prc, MONITOR_DEFAULTTONEAREST);
185
186 //
187 // Get the work area or entire monitor rect.
188 //
189 mi.cbSize = sizeof(mi);
190 GetMonitorInfo(hMonitor, &mi);
191
193 rc = mi.rcWork;
194 else
195 rc = mi.rcMonitor;
196
197 //
198 // Center or clip the passed rect to the monitor rect.
199 //
200 if (flags & MONITOR_CENTER)
201 {
202 prc->left = rc.left + (rc.right - rc.left - w) / 2;
203 prc->top = rc.top + (rc.bottom - rc.top - h) / 2;
204 prc->right = prc->left + w;
205 prc->bottom = prc->top + h;
206 }
207 else
208 {
209 prc->left = max(rc.left, min(rc.right-w, prc->left));
210 prc->top = max(rc.top, min(rc.bottom-h, prc->top));
211 prc->right = prc->left + w;
212 prc->bottom = prc->top + h;
213 }
214}
#define MONITOR_CENTER
Definition: utils.h:67
#define MONITOR_WORKAREA
Definition: utils.h:69
GLbitfield flags
Definition: glext.h:7161
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
#define min(a, b)
Definition: monoChain.cc:55
HMONITOR WINAPI MonitorFromRect(LPCRECT, DWORD)
_Out_ LPRECT prc
Definition: ntgdi.h:1658
RECT rcMonitor
Definition: winuser.h:3785
DWORD cbSize
Definition: winuser.h:3784
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define max(a, b)
Definition: svc.c:63
static MONITORINFO mi
Definition: win.c:7338
#define GetMonitorInfo
Definition: winuser.h:5791

Referenced by ClipOrCenterWindowToMonitor().

◆ ClipOrCenterWindowToMonitor()

VOID ClipOrCenterWindowToMonitor ( HWND  hWnd,
UINT  flags 
)

Definition at line 216 of file utils.c.

217{
218 RECT rc;
219 GetWindowRect(hWnd, &rc);
222}
HWND hWnd
Definition: settings.c:17
VOID ClipOrCenterRectToMonitor(LPRECT prc, UINT flags)
Definition: utils.c:173
#define NULL
Definition: types.h:112
#define SWP_NOACTIVATE
Definition: winuser.h:1242
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOSIZE
Definition: winuser.h:1245
#define SWP_NOZORDER
Definition: winuser.h:1247

Referenced by CreatePropSheet().

◆ FormatDateTime()

LPWSTR FormatDateTime ( IN LPSYSTEMTIME  pDateTime)

Definition at line 41 of file utils.c.

42{
43 LPWSTR lpszDateTime = NULL;
44 int iDateBufSize, iTimeBufSize;
45
46 if (pDateTime == NULL) return NULL;
47
49 /* Only for Windows 7 : DATE_AUTOLAYOUT | */ DATE_SHORTDATE,
50 pDateTime,
51 NULL,
52 NULL,
53 0);
55 0,
56 pDateTime,
57 NULL,
58 NULL,
59 0);
60
61 if ( (iDateBufSize > 0) && (iTimeBufSize > 0) )
62 {
63 lpszDateTime = (LPWSTR)MemAlloc(0, (iDateBufSize + iTimeBufSize) * sizeof(WCHAR));
64
66 /* Only for Windows 7 : DATE_AUTOLAYOUT | */ DATE_SHORTDATE,
67 pDateTime,
68 NULL,
69 lpszDateTime,
70 iDateBufSize);
71 if (iDateBufSize > 0) lpszDateTime[iDateBufSize-1] = L' ';
73 0,
74 pDateTime,
75 NULL,
76 lpszDateTime + iDateBufSize,
77 iTimeBufSize);
78 }
79
80 return lpszDateTime;
81}
PVOID MemAlloc(IN DWORD dwFlags, IN SIZE_T dwBytes)
Definition: utils.c:33
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1093
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
#define LOCALE_USER_DEFAULT
#define L(x)
Definition: ntvdm.h:50
#define DATE_SHORTDATE
Definition: winnls.h:196
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by AddService(), and CRecycleBin::GetDetailsOf().

◆ FreeDateTime()

VOID FreeDateTime ( IN LPWSTR  lpszDateTime)

Definition at line 84 of file utils.c.

85{
86 if (lpszDateTime)
87 MemFree(lpszDateTime);
88}
BOOL MemFree(IN PVOID lpMem)
Definition: utils.c:26

Referenced by AddService().

◆ GetExecutableVendor()

LPWSTR GetExecutableVendor ( IN LPCWSTR  lpszFilename)

Definition at line 288 of file utils.c.

289{
290 LPWSTR lpszVendor = NULL;
291 DWORD dwHandle = 0;
292 DWORD dwLen;
293
294 LPVOID lpData;
295
297 UINT BufLen = 0;
298 WORD wCodePage = 0, wLangID = 0;
299 LPWSTR lpszStrFileInfo = NULL;
300
301 LPWSTR lpszData = NULL;
302
303 if (lpszFilename == NULL) return NULL;
304
305 dwLen = GetFileVersionInfoSizeW(lpszFilename, &dwHandle);
306 if (dwLen == 0) return NULL;
307
308 lpData = MemAlloc(0, dwLen);
309 if (!lpData) return NULL;
310
311 GetFileVersionInfoW(lpszFilename, dwHandle, dwLen, lpData);
312
313 if (VerQueryValueW(lpData, L"\\VarFileInfo\\Translation", &pvData, &BufLen))
314 {
315 wCodePage = LOWORD(*(DWORD*)pvData);
316 wLangID = HIWORD(*(DWORD*)pvData);
317
318 lpszStrFileInfo = FormatString(L"StringFileInfo\\%04X%04X\\CompanyName",
319 wCodePage,
320 wLangID);
321 }
322
323 VerQueryValueW(lpData, lpszStrFileInfo, (LPVOID*)&lpszData, &BufLen);
324 if (lpszData)
325 {
326 lpszVendor = (LPWSTR)MemAlloc(0, BufLen * sizeof(WCHAR));
327 if (lpszVendor)
328 wcscpy(lpszVendor, lpszData);
329 }
330 else
331 {
332 lpszVendor = NULL;
333 }
334
335 MemFree(lpszStrFileInfo);
336 MemFree(lpData);
337
338 return lpszVendor;
339}
BOOL WINAPI GetFileVersionInfoW(LPCWSTR filename, DWORD handle, DWORD datasize, LPVOID data)
Definition: version.c:845
BOOL WINAPI VerQueryValueW(LPCVOID pBlock, LPCWSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
Definition: version.c:1049
DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR filename, LPDWORD handle)
Definition: version.c:611
#define BufLen
Definition: fatfs.h:167
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
DWORD FormatString(DWORD dwFlags, HINSTANCE hInstance, DWORD dwStringId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, va_list *Arguments)
Definition: fontview.c:34
unsigned int UINT
Definition: ndis.h:50
#define LOWORD(l)
Definition: pedump.c:82
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define HIWORD(l)
Definition: typedefs.h:247
_In_ ULONG _In_opt_ PVOID pvData
Definition: winddi.h:3749

Referenced by AddService().

◆ IsPreVistaOSVersion()

BOOL IsPreVistaOSVersion ( VOID  )

Definition at line 275 of file utils.c.

276{
277 OSVERSIONINFOW osvi = {0};
278 osvi.dwOSVersionInfoSize = sizeof(osvi);
279
280 if (!GetVersionExW(&osvi))
281 return FALSE;
282
283 /* Vista+-class OSes are NT >= 6 */
285}
#define FALSE
Definition: types.h:117
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
#define VER_PLATFORM_WIN32_NT
Definition: rtltypes.h:238
ULONG dwPlatformId
Definition: rtltypes.h:241
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:237
ULONG dwMajorVersion
Definition: rtltypes.h:238
OSVERSIONINFO osvi
Definition: ver.c:28

Referenced by Initialize().

◆ IsWindowsOS()

BOOL IsWindowsOS ( VOID  )

Definition at line 226 of file utils.c.

227{
228 BOOL bIsWindowsOS = FALSE;
229
230 OSVERSIONINFOW osvi = {0};
231 osvi.dwOSVersionInfoSize = sizeof(osvi);
232
233 if (!GetVersionExW(&osvi))
234 return FALSE;
235
237 return FALSE;
238
239 /* ReactOS reports as Windows NT 5.2 */
240
241 if ( (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion >= 2) ||
242 (osvi.dwMajorVersion > 5) )
243 {
244 HKEY hKey = NULL;
245
247 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
249 {
250 LONG ret;
251 DWORD dwType = 0, dwBufSize = 0;
252
253 ret = RegQueryValueExW(hKey, L"ProductName", NULL, &dwType, NULL, &dwBufSize);
254 if (ret == ERROR_SUCCESS && dwType == REG_SZ)
255 {
256 LPTSTR lpszProductName = (LPTSTR)MemAlloc(0, dwBufSize);
257 RegQueryValueExW(hKey, L"ProductName", NULL, &dwType, (LPBYTE)lpszProductName, &dwBufSize);
258
259 bIsWindowsOS = (FindSubStrI(lpszProductName, _T("Windows")) != NULL);
260
261 MemFree(lpszProductName);
262 }
263
265 }
266 }
267 else
268 {
269 bIsWindowsOS = TRUE;
270 }
271
272 return bIsWindowsOS;
273}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
unsigned int BOOL
Definition: ntddk_ex.h:94
FxAutoRegKey hKey
#define REG_SZ
Definition: layer.c:22
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
long LONG
Definition: pedump.c:60
LPTSTR FindSubStrI(LPCTSTR str, LPCTSTR strSearch)
Definition: stringutils.c:183
ULONG dwMinorVersion
Definition: rtltypes.h:239
unsigned char * LPBYTE
Definition: typedefs.h:53
#define _T(x)
Definition: vfdio.h:22
int ret
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
CHAR * LPTSTR
Definition: xmlstorage.h:192

Referenced by Initialize().

◆ LoadConditionalResourceStringEx()

LPWSTR LoadConditionalResourceStringEx ( IN HINSTANCE  hInstance,
IN BOOL  bCondition,
IN UINT  uIDifTrue,
IN UINT  uIDifFalse,
IN size_t *pSize  OPTIONAL 
)

Definition at line 120 of file utils.c.

125{
127 (bCondition ? uIDifTrue : uIDifFalse),
128 pSize);
129}
LPWSTR LoadResourceStringEx(IN HINSTANCE hInstance, IN UINT uID, OUT size_t *pSize OPTIONAL)
Definition: utils.c:91
HINSTANCE hInstance
Definition: charmap.c:19

◆ LoadResourceStringEx()

LPWSTR LoadResourceStringEx ( IN HINSTANCE  hInstance,
IN UINT  uID,
OUT size_t *pSize  OPTIONAL 
)

Definition at line 91 of file utils.c.

94{
95 LPWSTR lpszDestBuf = NULL, lpszResourceString = NULL;
96 size_t iStrSize = 0;
97
98 // When passing a zero-length buffer size, LoadString(...) returns a
99 // read-only pointer buffer to the program's resource string.
100 iStrSize = LoadStringW(hInstance, uID, (LPWSTR)&lpszResourceString, 0);
101
102 if ( lpszResourceString && ( (lpszDestBuf = (LPWSTR)MemAlloc(0, (iStrSize + 1) * sizeof(WCHAR))) != NULL ) )
103 {
104 wcsncpy(lpszDestBuf, lpszResourceString, iStrSize);
105 lpszDestBuf[iStrSize] = L'\0'; // NULL-terminate the string
106
107 if (pSize)
108 *pSize = iStrSize + 1;
109 }
110 else
111 {
112 if (pSize)
113 *pSize = 0;
114 }
115
116 return lpszDestBuf;
117}
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)

Referenced by LoadConditionalResourceStringEx().

◆ MemAlloc()

◆ MemFree()

◆ RunCommand()

DWORD RunCommand ( IN LPCWSTR  lpszCommand,
IN LPCWSTR  lpszParameters,
IN INT  nShowCmd 
)

Definition at line 132 of file utils.c.

135{
136 DWORD dwRes;
137
138 DWORD dwNumOfChars;
139 LPWSTR lpszExpandedCommand;
140
141 dwNumOfChars = ExpandEnvironmentStringsW(lpszCommand, NULL, 0);
142 lpszExpandedCommand = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
143 ExpandEnvironmentStringsW(lpszCommand, lpszExpandedCommand, dwNumOfChars);
144
146 NULL /* and not L"open" !! */,
147 lpszExpandedCommand,
148 lpszParameters,
149 NULL,
150 nShowCmd);
151 MemFree(lpszExpandedCommand);
152
153 return dwRes;
154}
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2402
#define DWORD_PTR
Definition: treelist.c:76

Referenced by GeneralPageWndProc(), and TOOL::Run().