git-svn-id: svn://ultimatepp.org/upp/trunk@1037 f0d560ea-af0d-0410-9eb7-867de7ffcac7

This commit is contained in:
koldo 2009-04-02 22:24:40 +00:00
parent e6c002b1fa
commit 62414aacf6

View file

@ -0,0 +1,255 @@
#include <Core/Core.h>
#include <SysInfo/SysInfo.h>
using namespace Upp;
bool end = false;
void TestGetchar()
{
if (end)
getchar();
}
void Puts(String s)
{
puts(s);
String file = AppendFileName(GetDesktopFolder(), "log");
SaveFile(file, LoadFile(file) + "\n" + s);
}
void Test()
{
Puts("SysInfo functions demo");
Puts("\nSpecial folders");
Puts(Format("Desktop: %s", GetDesktopFolder()));
Puts(Format("Programs: %s", GetProgramsFolder()));
Puts(Format("Application Data: %s", GetAppDataFolder()));
Puts(Format("Music: %s", GetMusicFolder()));
Puts(Format("Pictures: %s", GetPicturesFolder()));
Puts(Format("Video: %s", GetVideoFolder()));
Puts(Format("Personal: %s", GetPersonalFolder()));
Puts(Format("Templates: %s", GetTemplatesFolder()));
Puts(Format("Download: %s", GetDownloadFolder()));
// Puts(Format("Root: %s", GetRootFolder()));
Puts(Format("Temp: %s", GetTempFolder()));
Puts(Format("Os: %s", GetOsFolder()));
Puts(Format("System: %s", GetSystemFolder()));
Puts("\nSystem info:");
String manufacturer, productName, version;
Date releaseDate;
int numberOfProcessors;
GetSystemInfo(manufacturer, productName, version, numberOfProcessors);
Puts(Format("System manufacturer '%s', product name '%s',\n version '%s', number of processors: %d", manufacturer, productName, version, numberOfProcessors));
Puts(Format("Real CPU Speed: %.3f GHz", GetCpuSpeed()/1000.));
Puts("Battery info");
bool present;
//int designCapacity,lastFullCapacity;
//String batVendor, type, model, serial;
if (!GetBatteryInfo(present/*, designCapacity, lastFullCapacity, batVendor, type, model, serial*/))
Puts("There is no battery");
else {
//Puts(Format("Vendor: %s, Type: %s, Model: %s, Serial: %s", batVendor, type, model, serial));
//Puts(Format("Design capacity: %d mAh, Last full capacity: %d mAh", designCapacity, lastFullCapacity));
if (!present)
Puts("Battery not installed");
else {
bool discharging;
int percentage, remainingMin;
GetBatteryStatus(discharging, percentage, remainingMin);
Puts(Format("Working with battery: %s, Percentage: %d%%, Remaining: %d min", discharging ? "yes": "no", percentage, remainingMin));
}
}
String biosVersion;
Date biosReleaseDate;
GetBiosInfo(biosVersion, biosReleaseDate);
Puts(Format("Bios version '%s',\n release date '%s'", biosVersion, AsString(biosReleaseDate)));
String vendor, identifier, architecture;
int speed;
for (int i = 0; i < numberOfProcessors; ++i) {
GetProcessorInfo(i, vendor, identifier, architecture, speed);
Puts(Format("Processor #%d: Vendor '%s',\n identifier '%s',\n architecture '%s', speed %d MHz", i, vendor, identifier, architecture, speed));
}
Puts("\nPress enter to continue..."); TestGetchar();
Puts("\nMemory info:");
int memoryLoad;
uint64 totalPhys, freePhys, totalPageFile, freePageFile, totalVirtual, freeVirtual;
if (!GetMemoryInfo(memoryLoad, totalPhys, freePhys, totalPageFile, freePageFile, totalVirtual, freeVirtual))
Puts("Impossible to get memory information");
else {
Puts(Format("Percent of memory in use: %d%c", memoryLoad, '%'));
Puts(Format("Total physical memory: %s bytes (%s)", Format64(totalPhys), BytesToKMGT(totalPhys)));
Puts(Format("Free physical memory: %s bytes (%s)", Format64(freePhys), BytesToKMGT(freePhys)));
Puts(Format("Total paging file: %s bytes (%s)", Format64(totalPageFile), BytesToKMGT(totalPageFile)));
Puts(Format("Free paging file: %s bytes (%s)", Format64(freePageFile), BytesToKMGT(freePageFile)));
Puts(Format("Total virtual memory: %s bytes (%s)", Format64(totalVirtual), BytesToKMGT(totalVirtual)));
Puts(Format("Free virtual memory: %s bytes (%s)", Format64(freeVirtual), BytesToKMGT(freeVirtual)));
}
Puts("\nOs info:");
String kernel, kerVersion, kerArchitecture, distro, distVersion, desktop, deskVersion;
if (!GetOsInfo(kernel, kerVersion, kerArchitecture, distro, distVersion, desktop, deskVersion))
Puts("Error getting Os info");
else {
Puts(Format("Kernel: %s, version: %s,\n architecture: %s", kernel, kerVersion, kerArchitecture));
Puts(Format("Distro: %s, version: %s", distro, distVersion, desktop, deskVersion));
Puts(Format("Desktop: %s, version: %s", desktop, deskVersion));
}
String compiler, date;
int compilerVersion;
GetCompilerInfo(compiler, compilerVersion, date);
Puts(Format("\nProgram compiled with %s version %d. Compilation date: %s", compiler, compilerVersion, date));
Puts("\nDefault exes info:");
const char *ext[] = {".html", ".doc", ".png", ".pdf", ".txt", ".xyz", ""};
for (int i = 0; *ext[i] != 0; ++i)
Puts(Format("Default program for '%s' is '%s'", ext[i], GetExtExecutable(ext[i])));
Puts("\nPress enter to continue..."); TestGetchar();
Puts("\nDrives list:");
Array<String> drives;
drives = GetDriveList();
for (int i = 0; i < drives.GetCount(); ++i) {
Puts(Format("Drive path:'%s'", drives[i]));
String type, volume, fileSystem;
//uint64 serial;
int maxName;
bool mounted = GetDriveInformation(drives[i], type, volume, /*serial,*/ maxName, fileSystem);
if (mounted) {
Puts(Format(" Type: '%s', Volume: '%s', "/*Serial: %0n,*/"\n MaxName: %d, File System: %s", type, volume, /*serial, */maxName, fileSystem));
uint64 freeBytesUser, totalBytesUser, totalFreeBytes;
if(!GetDriveSpace(drives[i], freeBytesUser, totalBytesUser, totalFreeBytes))
Puts(" Mounted but no access to drive");
else {
Puts(Format(" Free Bytes User: %s (%s)", Format64(freeBytesUser), BytesToKMGT(freeBytesUser)));
Puts(Format(" Total Bytes User: %s (%s), Total Free Bytes: %s (%s)", Format64(totalBytesUser), BytesToKMGT(totalBytesUser), Format64(totalFreeBytes), BytesToKMGT(totalFreeBytes)));
}
} else
Puts (" Not mounted");
}
Puts("\nOther Info:");
int id = GetProcessId();
Puts(Format("Process Id: %d", id));
Puts(Format("Process name: '%s'", GetProcessName(id)));
Puts(Format("Process file name: '%s'", GetProcessFileName(id)));
int priority = GetProcessPriority(id);
Puts(Format("Process priority is: %s", priority >= 0? AsString(priority): "Not accesible"));
Puts(Format("Now changed to high priority: %s", SetProcessPriority(id, 8)? "Yes": "No"));
priority = GetProcessPriority(id);
Puts(Format("Process priority is: %s", priority >= 0? AsString(priority): "Not accesible"));
#if defined(PLATFORM_WIN32)
Window_SaveCapture(0, "c:\\Desktop.bmp");
Puts ("Screenshot saved in c:\\Desktop.bmp");
#endif
Puts("\nLaunch file 'test.txt':");
String fileTest = AppendFileName(GetTempFolder(), "test.txt");
String strTest = "\nIf modify 'test.txt' it will ask you to save or not the file" \
"\nIf you answer Yes or No the program will be terminated" \
"\nIf you answer Cancel or wait more than 2 seconds the program will be killed";
SaveFile(fileTest, "This is a test" + strTest);
Puts(strTest);
LaunchFile(fileTest);
{
TimeStop t;
long windowId;
while(-1 == (windowId = GetWindowIdFromCaption("test.txt", false))) {
if (t.Elapsed() > 10000)
break;
}
if (windowId != -1) {
Sleep(1000);
long left, top, right, bottom;
Window_GetRect(windowId, left, top, right, bottom);
Puts(Format("Editor window is located in %d, %d, %d, %d", (int)left, (int)top, (int)right, (int)bottom));
#if defined(PLATFORM_WIN32)
long x, y;
Mouse_GetPos(x, y);
Puts(Format("Mouse pos is %d, %d", (int)x, (int)y));
Mouse_SetPos(200, 200, windowId);
Mouse_LeftClick();
Keyb_SendKeys("{HOME}This text is added by Keyb_SendKeys.\n");
Keyb_SendKeys("And the window resized and moved by Window_SetRect.\n", 0, 0);
Keyb_SendKeys("And a window capture in c:\\Windowgrab.bmp.\n", 0, 0);
Keyb_SendKeys("Some chars just for test: \\/:;,.ºª^[]{}´?¿~#@!¡\n", 0, 0);
Window_SetRect(windowId, 10, 10, 800, 400);
Window_SaveCapture(windowId, "c:\\Windowgrab.bmp");
#endif
}
}
Puts("\nPress enter to terminate 'test.txt'"); TestGetchar();
int processId;
TimeStop t;
while(-1 == (processId = GetProcessIdFromWindowCaption("test.txt", false))) {
if (t.Elapsed() > 10000)
break;
}
if (processId == -1)
Puts("Window was closed before!");
else {
Puts("Ending process in max 2 seconds");
if (!ProcessTerminate(processId, 2000))
Puts("Impossible to end process");
else
Puts("Process terminated");
}
Puts("\nPress enter to continue..."); TestGetchar();
Puts("\nWindows list:");
Array<long> widL, pidL;
Array<String> name, fileName, caption;
GetWindowsList(widL, pidL, name, fileName, caption);
for (int i = 0; i < widL.GetCount(); ++i) {
Puts(Format("Window hwnd: %6.f, processId: %6.f, Name: %s", (double)widL[i], (double)pidL[i], name[i]));
Puts(Format(" File name: %s", fileName[i]));
Puts(Format(" Window caption: '%s'", caption[i]));
if ((i/20) > (i-1)/20) {
Puts("\nPress enter to continue with the next 20 windows..."); TestGetchar();
}
}
Puts("\nPress enter to continue..."); TestGetchar();
Puts("\nProcess list:");
pidL.Clear();
Array<String> pNames;
if (!GetProcessList(pidL, pNames))
Puts("Error getting process info");
else {
for (int i = 0; i < pidL.GetCount(); ++i) {
int priority = GetProcessPriority(pidL[i]);
Puts(Format("Id %6.f: Priority: %s, Program: %s", (double)pidL[i], priority >= 0? AsString(priority): "Not accesible", pNames[i]));
}
}
Puts("\nPress enter to end..."); TestGetchar();
}
CONSOLE_APP_MAIN
{
FileDelete(AppendFileName(GetDesktopFolder(), "log"));
Puts("Introduce enter or (l) to log off, (r) to reboot or (s) to shutdown");
char str[50];
fgets(str, 49, stdin);
if (*str == 'l')
Shutdown("logoff");
else if (*str == 'r')
Shutdown("reboot");
else if (*str == 's')
Shutdown("shutdown");
Puts("Introduce number of test cycles or just type enter to run it once: ");
fgets(str, 49, stdin);
int numTests = atoi(str);
for (int i = 0; i < numTests; ++i)
Test();
end = true;
Test();
}