ReactOS 0.4.15-dev-8096-ga0eec98
utility.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2003, 2004, 2005 Martin Fuchs
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19
20 //
21 // Explorer clone
22 //
23 // utility.cpp
24 //
25 // Martin Fuchs, 23.07.2003
26 //
27
28
29#include <precomp.h>
30
31//#include <shellapi.h>
32
33#include <time.h>
34#include <sstream>
35
36
37DWORD WINAPI Thread::ThreadProc(void* para)
38{
39 Thread* pThis = (Thread*) para;
40
41 int ret = pThis->Run();
42
43 pThis->_alive = false;
44
45 return ret;
46}
47
48
50{
51 RECT rt, prt;
52 GetWindowRect(hwnd, &rt);
53
55 HWND owner = 0;
56
57 for(HWND wh=hwnd; (wh=GetWindow(wh,GW_OWNER))!=0; )
59 {owner=wh; break;}
60
61 if (owner)
62 GetWindowRect(owner, &prt);
63 else
64 SystemParametersInfo(SPI_GETWORKAREA, 0, &prt, 0); //@@ GetDesktopWindow() wäre auch hilfreich.
65
66 SetWindowPos(hwnd, 0, (prt.left+prt.right+rt.left-rt.right)/2,
67 (prt.top+prt.bottom+rt.top-rt.bottom)/2, 0,0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER);
68
70}
71
73{
74 RECT rc;
75 GetWindowRect(hwnd, &rc);
76 int left=rc.left, top=rc.top;
77
78 int xmax = GetSystemMetrics(SM_CXSCREEN);
79 int ymax = GetSystemMetrics(SM_CYSCREEN);
80
81 if (rc.left < 0)
82 rc.left = 0;
83 else if (rc.right > xmax)
84 if ((rc.left-=rc.right-xmax) < 0)
85 rc.left = 0;
86
87 if (rc.top < 0)
88 rc.top = 0;
89 else if (rc.bottom > ymax)
90 if ((rc.top-=rc.bottom-ymax) < 0)
91 rc.top = 0;
92
93 if (rc.left!=left || rc.top!=top)
95}
96
97
98void display_error(HWND hwnd, DWORD error) //@@ CONTEXT mit ausgeben -> display_error(HWND hwnd, const Exception& e)
99{
100 PTSTR msg;
101
104 LOG(FmtString(TEXT("display_error(%#x): %s"), error, msg));
105
106 SetLastError(0);
107 MessageBox(hwnd, msg, TEXT("ROS Explorer"), MB_OK);
108
110 MessageBox(0, msg, TEXT("ROS Explorer"), MB_OK);
111 } else {
112 LOG(FmtString(TEXT("Unknown Error %#x"), error));
113
114 FmtString msg(TEXT("Unknown Error %#x"), error);
115
116 SetLastError(0);
117 MessageBox(hwnd, msg, TEXT("ROS Explorer"), MB_OK);
118
120 MessageBox(0, msg, TEXT("ROS Explorer"), MB_OK);
121 }
122
123 LocalFree(msg);
124}
125
126
127Context Context::s_main("-NO-CONTEXT-");
128Context* Context::s_current = &Context::s_main;
129
130String Context::toString() const
131{
132 String str = _ctx;
133
134 if (!_obj.empty())
135 str.appendf(TEXT("\nObject: %s"), (LPCTSTR)_obj);
136
137 return str;
138}
139
140String Context::getStackTrace() const
141{
143
144 str << "Context Trace:\n";
145
146 for(const Context*p=this; p && p!=&s_main; p=p->_last) {
147 str << "- " << p->_ctx;
148
149 if (!p->_obj.empty())
150 str << " obj=" << ANS(p->_obj);
151
152 str << '\n';
153 }
154
155 return str.str();
156}
157
158
160{
161#if defined(__STDC_WANT_SECURE_LIB__) && defined(_MS_VER)
162 SYSTEMTIME stime;
163 struct tm tm_;
164 struct tm* tm = &tm_;
165
166 if (gmtime_s(tm, t) != 0)
167 return FALSE;
168#else
169 struct tm* tm = gmtime(t);
170 SYSTEMTIME stime;
171
172 if (!tm)
173 return FALSE;
174#endif
175
176 stime.wYear = tm->tm_year+1900;
177 stime.wMonth = tm->tm_mon+1;
178 stime.wDayOfWeek = (WORD)-1;
179 stime.wDay = tm->tm_mday;
180 stime.wHour = tm->tm_hour;
181 stime.wMinute = tm->tm_min;
182 stime.wSecond = tm->tm_sec;
183 stime.wMilliseconds = 0;
184
185 return SystemTimeToFileTime(&stime, ftime);
186}
187
188
190{
191 CONTEXT("launch_file()");
192
193 HINSTANCE hinst = ShellExecute(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow);
194
195 if ((INT_PTR)hinst <= 32) {
197 return FALSE;
198 }
199
200 return TRUE;
201}
202
203#ifdef UNICODE
204BOOL launch_fileA(HWND hwnd, LPSTR cmd, UINT nCmdShow, LPCSTR parameters)
205{
206 HINSTANCE hinst = ShellExecuteA(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow);
207
208 if ((INT_PTR)hinst <= 32) {
210 return FALSE;
211 }
212
213 return TRUE;
214}
215#endif
216
217
218/* search for already running instance */
219
220static int g_foundPrevInstance = 0;
221
223{
224 TCHAR cls[128];
225
226 GetClassName(hwnd, cls, 128);
227
228 if (!lstrcmp(cls, (LPCTSTR)lparam)) {
230 return FALSE;
231 }
232
233 return TRUE;
234}
235
236/* search for window of given class name to allow only one running instance */
238{
240
242 return 1;
243
244 return 0;
245}
246
247
249{
251 BOOL osvie_val;
252 String str;
253
254 if (!(osvie_val = GetVersionEx((OSVERSIONINFO*)&osvi))) {
256
258 return TEXT("???");
259 }
260
261 switch(osvi.dwPlatformId) {
263#ifdef __REACTOS__ // This work around can be removed if ReactOS gets a unique version number.
264 str = TEXT("ReactOS");
265#else
266 if (osvi.dwMajorVersion <= 4)
267 str = TEXT("Microsoft Windows NT");
268 else if (osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
269 str = TEXT("Microsoft Windows 2000");
270 else if (osvi.dwMajorVersion==5 && osvi.dwMinorVersion==1)
271 str = TEXT("Microsoft Windows XP");
272#endif
273
274 if (osvie_val) {
275 if (osvi.wProductType == VER_NT_WORKSTATION) {
276 if (osvi.wSuiteMask & VER_SUITE_PERSONAL)
277 str += TEXT(" Personal");
278 else
279 str += TEXT(" Professional");
280 } else if (osvi.wProductType == VER_NT_SERVER) {
281 if (osvi.wSuiteMask & VER_SUITE_DATACENTER)
282 str += TEXT(" DataCenter Server");
283 else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
284 str += TEXT(" Advanced Server");
285 else
286 str += TEXT(" Server");
287 } else if (osvi.wProductType == VER_NT_DOMAIN_CONTROLLER) {
288 str += TEXT(" Domain Controller");
289 }
290 } else {
291 TCHAR type[80];
293 HKEY hkey;
294
295 if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), 0, KEY_QUERY_VALUE, &hkey)) {
296 RegQueryValueEx(hkey, TEXT("ProductType"), NULL, NULL, (LPBYTE)type, &dwBufLen);
297 RegCloseKey(hkey);
298
299 if (!_tcsicmp(TEXT("WINNT"), type))
300 str += TEXT(" Workstation");
301 else if (!_tcsicmp(TEXT("LANMANNT"), type))
302 str += TEXT(" Server");
303 else if (!_tcsicmp(TEXT("SERVERNT"), type))
304 str += TEXT(" Advanced Server");
305 }
306 }
307 break;
308
310 if (osvi.dwMajorVersion>4 ||
312 if (osvi.dwMinorVersion == 90)
313 str = TEXT("Microsoft Windows ME");
314 else
315 str = TEXT("Microsoft Windows 98");
316
317 if (osvi.szCSDVersion[1] == 'A')
318 str += TEXT(" SE");
319 } else {
320 str = TEXT("Microsoft Windows 95");
321
322 if (osvi.szCSDVersion[1]=='B' || osvi.szCSDVersion[1]=='C')
323 str += TEXT(" OSR2");
324 }
325 break;
326
328 str = TEXT("Microsoft Win32s");
329
330 default:
331 return TEXT("???");
332 }
333
334 String vstr;
335
336 if (osvi.dwMajorVersion <= 4)
337 vstr.printf(TEXT(" Version %d.%d %s Build %d"),
340 else
341 vstr.printf(TEXT(" %s (Build %d)"), osvi.szCSDVersion, osvi.dwBuildNumber&0xFFFF);
342
343 return str + vstr;
344}
345
346
348
349BOOL RunDLL(HWND hwnd, LPCTSTR dllname, LPCSTR procname, LPCTSTR cmdline, UINT nCmdShow)
350{
351 HMODULE hmod = LoadLibrary(dllname);
352 if (!hmod)
353 return FALSE;
354
355/*TODO
356 <Windows NT/2000>
357 It is possible to create a Unicode version of the function.
358 Rundll32 first tries to find a function named EntryPointW.
359 If it cannot find this function, it tries EntryPointA, then EntryPoint.
360 To create a DLL that supports ANSI on Windows 95/98/Me and Unicode otherwise,
361 export two functions: EntryPointW and EntryPoint.
362*/
364 if (!proc) {
366 return FALSE;
367 }
368
369 proc(hwnd, hmod, cmdline, nCmdShow);
370
372
373 return TRUE;
374}
375
376
377#ifdef UNICODE
378#define CONTROL_RUNDLL "Control_RunDLLW"
379#else
380#define CONTROL_RUNDLL "Control_RunDLLA"
381#endif
382
384{
385 TCHAR parameters[MAX_PATH];
386
387 _tcscpy(parameters, TEXT("shell32.dll,Control_RunDLL "));
388 _tcscat(parameters, applet);
389
390 return ((INT_PTR)ShellExecute(hwnd, TEXT("open"), TEXT("rundll32.exe"), parameters, NULL, SW_SHOWDEFAULT) > 32);
391}
392
393
395{
396 TCHAR path[MAX_PATH], hole_path[MAX_PATH];
397
398 _tcscpy(hole_path, path_in);
399
400 int drv_len = 0;
401 LPCTSTR d;
402
403 for(d=hole_path; *d && *d!='/' && *d!='\\'; ++d) {
404 ++drv_len;
405
406 if (*d == ':')
407 break;
408 }
409
410 LPTSTR dir = hole_path + drv_len;
411
412 int l;
413 LPTSTR p = hole_path + (l=_tcslen(hole_path));
414
415 while(--p>=hole_path && (*p=='/' || *p=='\\'))
416 *p = '\0';
417
418 WIN32_FIND_DATA w32fd;
419
420 HANDLE hFind = FindFirstFile(hole_path, &w32fd);
421
422 if (hFind == INVALID_HANDLE_VALUE) {
423 _tcsncpy(path, hole_path, drv_len);
424 int i = drv_len;
425
426 for(p=dir; *p=='/'||*p=='\\'; p++)
427 path[i++] = *p++;
428
429 for(; i<l; i++) {
430 memcpy(path, hole_path, i*sizeof(TCHAR));
431
432 for(; hole_path[i] && hole_path[i]!='/' && hole_path[i]!='\\'; i++)
433 path[i] = hole_path[i];
434
435 path[i] = '\0';
436
437 hFind = FindFirstFile(path, &w32fd);
438
439 if (hFind != INVALID_HANDLE_VALUE)
440 FindClose(hFind);
441 else {
442 LOG(FmtString(TEXT("CreateDirectory(\"%s\")"), path));
443
444 if (!CreateDirectory(path, 0))
445 return FALSE;
446 }
447 }
448 } else
449 FindClose(hFind);
450
451 return TRUE;
452}
453
454
456{
457 HKEY hkey;
458 DWORD ret;
459
460 if (!RegOpenKey(root, path, &hkey)) {
461 DWORD len = sizeof(ret);
462
463 if (RegQueryValueEx(hkey, valueName, 0, NULL, (LPBYTE)&ret, &len))
464 ret = def;
465
466 RegCloseKey(hkey);
467
468 return ret;
469 } else
470 return def;
471}
472
473
475{
476 HKEY hkey;
477 BOOL ret = FALSE;
478
479 if (!RegOpenKey(root, path, &hkey)) {
480 ret = RegSetValueEx(hkey, valueName, 0, REG_DWORD, (LPBYTE)&value, sizeof(value));
481
482 RegCloseKey(hkey);
483 }
484
485 return ret;
486}
487
488
490{
492
493 HANDLE hfind = FindFirstFile(path, &fd);
494
495 if (hfind != INVALID_HANDLE_VALUE) {
496 FindClose(hfind);
497
498 return TRUE;
499 } else
500 return FALSE;
501}
502
503
504bool SplitFileSysURL(LPCTSTR url, String& dir_out, String& fname_out)
505{
506 if (!_tcsnicmp(url, TEXT("file://"), 7)) {
507 url += 7;
508
509 // remove third slash in front of drive characters
510 if (*url == '/')
511 ++url;
512 }
513
514 if (exists_path(url)) {
516
517 // convert slashes to back slashes
519
521 fname_out.erase();
522 else {
524
525 _tsplitpath_s(path, drv, COUNTOF(drv), dir, COUNTOF(dir), fname, COUNTOF(fname), ext, COUNTOF(ext));
526 _stprintf(path, TEXT("%s%s"), drv, dir);
527
528 fname_out.printf(TEXT("%s%s"), fname, ext);
529 }
530
531 dir_out = path;
532
533 return true;
534 } else
535 return false;
536}
@ lparam
Definition: SystemMenu.c:31
Arabic default style
Definition: afstyles.h:94
unsigned int dir
Definition: maze.c:112
#define msg(x)
Definition: auth_time.c:54
#define RegCloseKey(hKey)
Definition: registry.h:49
r l[0]
Definition: byte_order.h:168
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define SetLastError(x)
Definition: compat.h:752
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
static const WCHAR *const ext[]
Definition: module.c:53
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
Definition: time.c:158
__kernel_time_t time_t
Definition: linux.h:252
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLdouble GLdouble t
Definition: gl.h:2047
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859
GLint left
Definition: glext.h:7726
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define _tcscat
Definition: tchar.h:622
#define _tcscpy
Definition: tchar.h:623
#define _tcsncpy
Definition: tchar.h:1410
#define _tsplitpath_s
Definition: tchar.h:687
#define TEXT(s)
Definition: k32.h:26
#define d
Definition: ke_i.h:81
#define error(str)
Definition: mkdosfs.c:1605
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
int find_window_class(LPCTSTR classname)
Definition: utility.cpp:237
BOOL RunDLL(HWND hwnd, LPCTSTR dllname, LPCSTR procname, LPCTSTR cmdline, UINT nCmdShow)
Definition: utility.cpp:349
void MoveVisible(HWND hwnd)
Definition: utility.cpp:72
bool SplitFileSysURL(LPCTSTR url, String &dir_out, String &fname_out)
Definition: utility.cpp:504
BOOL RecursiveCreateDirectory(LPCTSTR path_in)
Definition: utility.cpp:394
BOOL launch_cpanel(HWND hwnd, LPCTSTR applet)
Definition: utility.cpp:383
BOOL launch_file(HWND hwnd, LPCTSTR cmd, UINT nCmdShow, LPCTSTR parameters)
Definition: utility.cpp:189
void CenterWindow(HWND hwnd)
Definition: utility.cpp:49
static BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lparam)
Definition: utility.cpp:222
static int g_foundPrevInstance
Definition: utility.cpp:220
BOOL RegSetDWORDValue(HKEY root, LPCTSTR path, LPCTSTR valueName, DWORD value)
Definition: utility.cpp:474
DWORD RegGetDWORDValue(HKEY root, LPCTSTR path, LPCTSTR valueName, DWORD def)
Definition: utility.cpp:455
String get_windows_version_str()
Definition: utility.cpp:248
BOOL exists_path(LPCTSTR path)
Definition: utility.cpp:489
BOOL time_to_filetime(const time_t *t, FILETIME *ftime)
Definition: utility.cpp:159
void display_error(HWND hwnd, DWORD error)
Definition: utility.cpp:98
void(WINAPI * RUNDLLPROC)(HWND hwnd, HINSTANCE hinst, LPCTSTR cmdline, DWORD nCmdShow)
Definition: utility.cpp:347
#define _MAX_FNAME
Definition: utility.h:74
#define _stprintf
Definition: utility.h:124
#define _MAX_PATH
Definition: utility.h:77
#define _MAX_DIR
Definition: utility.h:75
#define _MAX_DRIVE
Definition: utility.h:73
#define LOG(txt)
Definition: utility.h:102
#define COUNTOF(x)
Definition: utility.h:93
#define _MAX_EXT
Definition: utility.h:76
static PEXPLICIT_ACCESSW *static HMODULE hmod
Definition: security.c:143
static HINSTANCE hinst
Definition: edit.c:551
static const WCHAR url[]
Definition: encode.c:1432
unsigned int UINT
Definition: ndis.h:50
#define VER_PLATFORM_WIN32_NT
Definition: rtltypes.h:238
#define VER_PLATFORM_WIN32_WINDOWS
Definition: rtltypes.h:237
#define VER_PLATFORM_WIN32s
Definition: rtltypes.h:236
struct _CONTEXT CONTEXT
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define VER_SUITE_ENTERPRISE
#define VER_SUITE_DATACENTER
#define VER_SUITE_PERSONAL
static HANDLE proc()
Definition: pdb.c:34
#define WS_MINIMIZE
Definition: pedump.c:622
#define WS_VISIBLE
Definition: pedump.c:620
WCHAR classname[128]
Definition: startup.c:15
const WCHAR * str
#define REG_DWORD
Definition: sdbapi.c:596
_CRTIMP struct tm *__cdecl gmtime(const time_t *_Time)
Definition: time.h:415
#define LANG_NEUTRAL
Definition: nls.h:22
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_DEFAULT
Definition: nls.h:168
static int fd
Definition: io.c:51
#define ShellExecute
Definition: shellapi.h:693
HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT iShowCmd)
Definition: shlexec.cpp:2321
TCHAR * cmdline
Definition: stretchblt.cpp:32
CHAR szCSDVersion[128]
Definition: rtltypes.h:242
ULONG dwPlatformId
Definition: rtltypes.h:241
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:237
ULONG dwMajorVersion
Definition: rtltypes.h:238
ULONG dwBuildNumber
Definition: rtltypes.h:240
ULONG dwMinorVersion
Definition: rtltypes.h:239
WORD wYear
Definition: winbase.h:905
WORD wMilliseconds
Definition: winbase.h:912
WORD wMonth
Definition: winbase.h:906
WORD wHour
Definition: winbase.h:909
WORD wSecond
Definition: winbase.h:911
WORD wMinute
Definition: winbase.h:910
WORD wDay
Definition: winbase.h:908
WORD wDayOfWeek
Definition: winbase.h:907
Definition: ftp_var.h:139
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
Definition: time.h:68
int tm_mon
Definition: time.h:73
int tm_year
Definition: time.h:74
int tm_hour
Definition: time.h:71
int tm_sec
Definition: time.h:69
int tm_mday
Definition: time.h:72
int tm_min
Definition: time.h:70
__CRT_INLINE void __cdecl ftime(struct timeb *_Tmb)
Definition: timeb.h:96
int32_t INT_PTR
Definition: typedefs.h:64
unsigned char * LPBYTE
Definition: typedefs.h:53
Definition: pdh_main.c:94
OSVERSIONINFO osvi
Definition: ver.c:28
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
#define FormatMessage
Definition: winbase.h:3795
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define LoadLibrary
Definition: winbase.h:3862
#define GetFileAttributes
Definition: winbase.h:3815
#define lstrcmp
Definition: winbase.h:3872
#define CreateDirectory
Definition: winbase.h:3746
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:419
#define GetVersionEx
Definition: winbase.h:3852
#define FindFirstFile
Definition: winbase.h:3782
#define GetFullPathName
Definition: winbase.h:3821
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_ DWORD _In_ DWORD dwBufLen
Definition: wincrypt.h:4246
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
#define WINAPI
Definition: msvc.h:6
#define GetWindowStyle(hwnd)
Definition: windowsx.h:315
#define ERROR_INVALID_WINDOW_HANDLE
Definition: winerror.h:881
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define RegOpenKeyEx
Definition: winreg.h:520
#define RegSetValueEx
Definition: winreg.h:533
#define RegQueryValueEx
Definition: winreg.h:524
#define RegOpenKey
Definition: winreg.h:519
#define GW_OWNER
Definition: winuser.h:766
#define SWP_NOACTIVATE
Definition: winuser.h:1242
#define SM_CYSCREEN
Definition: winuser.h:960
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 GetClassName
Definition: winuser.h:5783
#define SWP_NOSIZE
Definition: winuser.h:1245
#define SW_SHOWDEFAULT
Definition: winuser.h:780
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
#define MB_OK
Definition: winuser.h:790
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
#define MessageBox
Definition: winuser.h:5822
#define SM_CXSCREEN
Definition: winuser.h:959
#define SWP_NOZORDER
Definition: winuser.h:1247
#define SystemParametersInfo
Definition: winuser.h:5858
int WINAPI GetSystemMetrics(_In_ int)
#define VER_NT_WORKSTATION
OSVERSIONINFOEXA OSVERSIONINFOEX
Definition: rtltypes.h:290
#define VER_NT_SERVER
#define VER_NT_DOMAIN_CONTROLLER
OSVERSIONINFOA OSVERSIONINFO
Definition: rtltypes.h:293
char TCHAR
Definition: xmlstorage.h:189
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
CHAR * PTSTR
Definition: xmlstorage.h:191
#define _tcsnicmp
Definition: xmlstorage.h:207
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define _tcslen
Definition: xmlstorage.h:198
#define _tcsicmp
Definition: xmlstorage.h:205