ArhEVM_Labs/main.c
Суслов Роман 8b58ef014d L2 - v1.0
2023-10-07 17:43:11 +03:00

401 lines
13 KiB
C

#include <stdio.h>
#include <windows.h>
#include <locale.h>
#include <unistd.h>
// Ëàáîðàòîðíàÿ ðàáîòà ¹ 2 - óñòðîéñòâà ðó÷íîãî ââîäà
// --- Èíôîðìàöèÿ î êëàâèàòóðå
int getLogicalDriveStrings() {
printf("- GetLogicalDriveStrings:\n");
char buffer[4096]; // ñàì áóôåð äëÿ ñòðîêè
DWORD bufSize = sizeof(buffer) - 1; // ðàçìåð áóôåðà, â êîòîðûé íóæíî çàïèñûâàòü ñòðîêó ñ äèñêàìè
GetLogicalDriveStrings(bufSize, buffer); // Ïîëó÷åíèå ñïèñêà ëîãè÷åñêèõ äèñêîâ
char *drive = buffer;
while (*drive) { // ïåðåáîð äèñêîâ
printf("Äèñê: %s\n", drive);
// ñëåäóþùèé äèñê
drive += strlen(drive) + 1;
}
return 0;
}
int getVolumeInformation() {
printf("- GetVolumeInformation:\n");
char volumeName[256];
char fileSystemName[256];
DWORD serialNumber;
DWORD maxComponentLength;
DWORD fileSystemFlags;
// Ïîëó÷åíèå èíôîðìàöèè î òåêóùåì äèñêå
GetVolumeInformation("C:\\", // óêàçàòåëü íà ñòðîêó, ñîäåðæàùóþ êîðíåâîé êàòàëîã òîìà
volumeName, // áóôåð, êîòîðûé ïîëó÷èò èìÿ òîìà
sizeof(volumeName), // äëèíà áóôåðà äëÿ èìåíè òîìà
&serialNumber, // óêàçàòåëü íà ïåðåìåííóþ, êîòîðàÿ ïîëó÷èò èìÿ óêàçàííîãî òîìà
&maxComponentLength, //
&fileSystemFlags, //
fileSystemName, // áóôåð äëÿ íàçâàíèÿ ôàéëîâîé ñèñòåìû
sizeof(fileSystemName)); // ðàçìåð áóôåðà íàçâàíèÿ ôàéëîâîé ñèñòåìû
printf("Èìÿ òîìà: %s\n", volumeName);
printf("Ñåðèéíûé íîìåð: %lu\n", serialNumber);
printf("Max Component Length: %lu\n", maxComponentLength);
printf("Òèï ôàéëîâîé ñèñòåìû: %s\n", fileSystemName);
printf("File System Flags: %lu\n", fileSystemFlags);
return 0;
}
// ---
long getFileSize(LPCSTR path) {
printf("- GetFileSize:\n");
HANDLE hFile;
DWORD fileSize;
unsigned long structLargeInt;
// Îòêðûòèå ôàéëà
hFile = CreateFile(path,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
// Ïîëó÷åíèå ðàçìåðà ôàéëà
structLargeInt = GetFileSize(hFile, NULL);
// Çàêðûòèå ôàéëà
CloseHandle(hFile);
// Âûâîä ðàçìåðà ôàéëà
printf("Ðàçìåð ôàéëà: %lu áàéò\n", structLargeInt);
return 0;
}
int findNextFile() {
printf("- FindNextFile:\n");
WIN32_FIND_DATA findData;
HANDLE hFind;
char path[MAX_PATH];
// Çàäàåì ïóòü ê äèðåêòîðèè, êîòîðóþ íóæíî ïðîñêàíèðîâàòü
strcpy(path, "..\\*");
// Íà÷èíàåì ïîèñê ïåðâîãî ôàéëà/ïàïêè â äèðåêòîðèè
hFind = FindFirstFile(path, &findData);
// Ïåðåáèðàåì âñå ôàéëû è ïàïêè â äèðåêòîðèè
do {
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
printf("Ïàïêà: %s\n", findData.cFileName);
} else {
printf("\tÔàéë: %s\n", findData.cFileName);
}
} while (FindNextFile(hFind, &findData));
// Çàêðûòèå äåñêðèïòîðà ïîèñêà
FindClose(hFind);
return 0;
}
int getWindowsDirectory() {
printf("- GetWindowsDirectory:\n");
char windowsDir[255]; // ñþäà çàïèøóòñÿ ñèìâîëû ïóòè
GetWindowsDirectory(windowsDir, sizeof(windowsDir));
printf("Âèíäîñâ ïàïêà òóò: %s\n", windowsDir);
return 0;
}
int compareFileTime(LPCSTR path_1, LPCSTR path_2) {
printf("- CompareFileTime:\n");
FILETIME fileTime1;
FILETIME fileTime2;
// ïåðâûé ôàéë
HANDLE file1 = CreateFile(path_1,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
// âðåìÿ èçìåíåíèÿ ïåðâîãî ôàéëà
GetFileTime(file1, NULL, NULL, &fileTime1);
// çàêðûâàåì ïåðâûé ôàéë
CloseHandle(file1);
// Îòêðûâàåì âòîðîé ôàéë
HANDLE file2 = CreateFile(path_2,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
// Ïîëó÷àåì âðåìÿ èçìåíåíèÿ âòîðîãî ôàéëà
GetFileTime(file2, NULL, NULL, &fileTime2);
// Çàêðûâàåì âòîðîé ôàéë
CloseHandle(file2);
// Ñðàâíèâàåì âðåìÿ èçìåíåíèÿ ôàéëîâ
int comparisonResult = CompareFileTime(&fileTime1, &fileTime2);
if (comparisonResult == 1) {
printf("Ôàéë 1 áûë èçìåíåí ðàíüøå ôàéëà 2\n");
} else if (comparisonResult == -1) {
printf("Ôàéë 2 áûë èçìåíåí ðàíüøå ôàéëà 1\n");
} else {
printf("Âðåìÿ èçìåíåíèÿ ôàéëîâ îäèíàêîâî\n");
}
return 0;
}
// ---
int setLocalTime() {
printf("- SetLocalTime:\n");
// Ñîçäàíèå ñòðóêòóðû SYSTEMTIME äëÿ óñòàíîâêè âðåìåíè
SYSTEMTIME systemTime;
// Çàïîëíåíèå ñòðóêòóðû SYSTEMTIME äàííûìè òåêóùåãî âðåìåíè
GetLocalTime(&systemTime);
printf("Äàòà è âðåìÿ ÄÎ èçìåíåíèÿ: %02d-%02d-%d %02d:%02d:%02d\n",
systemTime.wDay, systemTime.wMonth, systemTime.wYear,
systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
// Óâåëè÷åíèå ÷àñîâîãî çíà÷åíèÿ íà 1
if (systemTime.wHour < 23) {
systemTime.wHour++;
} else {
systemTime.wHour = 0;
}
// Óñòàíîâêà íîâîãî âðåìåíè ñ èñïîëüçîâàíèåì SetLocalTime
SetLocalTime(&systemTime);
printf("Âðåìÿ óñïåøíî èçìåíåíî\n");
printf("Äàòà è âðåìÿ ÏÎÑËÅ èçìåíåíèÿ: %02d-%02d-%d %02d:%02d:%02d\n",
systemTime.wDay, systemTime.wMonth, systemTime.wYear,
systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
return 0;
}
void getFileAttributes(LPCSTR path){
DWORD fileAttributes = GetFileAttributes(path);
if (fileAttributes & FILE_ATTRIBUTE_READONLY) {
printf("\n/Read-only");
}
if (fileAttributes & FILE_ATTRIBUTE_HIDDEN) {
printf("\n/Hidden");
}
if (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
printf("\n/Directory");
}// è òàê äàëåå äëÿ äðóãèõ àòðèáóòîâ ôàéëà...
printf("\n");
}
int setFileAttributes(LPCSTR path) {
printf("- SetFileAttributes:\n");
// Góòü ê ôàéëó
// Ñáðàñûâàåì àòðèáóòû ôàéëà
SetFileAttributes(path, (DWORD) NULL);
// Òåêóùèå àòðèáóòû ôàéëà
printf("\tÒåêóùèå àòðèáóòû ôàéëà ÄÎ çàìåíû: ");
getFileAttributes(path);
// Óñòàíàâëèâàåì àòðèáóòû ôàéëà
DWORD newFileAttributes = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY;
BOOL result = SetFileAttributes( path, (DWORD) newFileAttributes);
printf("\tÒåêóùèå àòðèáóòû ôàéëà ÏÎÑËÅ çàìåíû: ");
getFileAttributes(path);
return 0;
}
int createFile() {
printf("- CreateFile:\n");
HANDLE hFile;
char* fileName = "example.txt";
// Ñîçäàíèå ôàéëà
hFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Çàïèñü â ôàéë
char* data = "Hello, World!";
DWORD bytesWritten;
WriteFile(hFile, data, strlen(data), &bytesWritten, NULL);
// Çàêðûòèå ôàéëà
CloseHandle(hFile);
// Ïîâòîðíîå îòêðûòèå ôàéëà
hFile = CreateFile(fileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// ×òåíèå èç ôàéëà
const int bufferSize = 100;
char buffer[bufferSize];
DWORD bytesRead;
if (!ReadFile(hFile, buffer, bufferSize, &bytesRead, NULL))
{
printf("Failed to read from file.\n");
CloseHandle(hFile);
return 1;
}
// Âûâîä ñîäåðæèìîãî ôàéëà
printf("Ñîäåðæèìîå ôàéëà: %.*s\n", bytesRead, buffer);
// Çàêðûòèå ôàéëà
CloseHandle(hFile);
return 0;
}
// --- Èíôîðìàöèÿ î êëàâèàòóðå
void getKeyboardType(){
printf("\t- getKeyboardType()\n");
BYTE typeValue;
typeValue = GetKeyboardType(0);
printf("- Èíôîðìàöèÿ î êëàâèàòóðå:\n");
switch (typeValue) {
case 1:
printf("83-êëàâèøíàÿ êëàâèàòóðà äëÿ IBM PC/XT -ñîâìåñòèìûõ êîìïüþòåðîâ\n");
break;
case 2:
printf("102-êëàâèøíàÿ êëàâèàòóðà Olivetti\n");
break;
case 3:
printf("IBM PC/AT -ñîâìåñòèìàÿ êëàâèàòóðà (84êëàâèøè)\n");
break;
case 4:
printf("Ðàñøèðåííàÿ IBM-êëàâèàòóðà (101- èëè 102 êëàâèøè)\n");
break;
case 5:
printf("Êëàâèàòóðà Nokia 1050\n");
break;
case 6:
printf("Êëàâèàòóðà Nokia 9140\n");
break;
case 7:
printf("ßïîíñêàÿ êëàâèàòóðà\n");
break;
default:
printf("Âèäèìî êëàâèàòóðû íå ñóùåñòâóåò\n");
break;
}
printf("×èñëî ôóíêöèîíàëüíûõ êëàâèø = %d\n", GetKeyboardType(2L));
} // ïîçâîëÿåò ïîëó÷èòü òèï êëàâèàòóðû è êîëè÷åñòâî ôóíêöèîíàëüíûõ êëàâèø
void getKeyboardState(){
printf("\n\t- getKeyboardState()\n");
BYTE keyState[256] = {0};
// Ïîëó÷åíèå ñîñòîÿíèÿ âñåõ êëàâèø
GetKeyboardState(keyState);
// Âûâîä íîìåðîâ íàæàòûõ êëàâèø â êîíñîëü
printf("Íà ìîìåíò çàïóñêà ïðîãðàììû áûëè íàæàòû êëàâèøè ïîä íîìåðàìè:\n");
for (int i = 0; i < 256; i++) {
if (keyState[i] & 0x80) {
printf("Êëàâèøà %d\n", i);
}
}
} // ïîçâîëÿåò ïîëó÷èòü òåêóùåå ñîñòîÿíèå âñåõ êëàâèø (êëàâèàòóðû è ìûøè)
// --- Èíôîðìàöèÿ î ìûøè
void getCursorPos(){
printf("\t- getCursorPos()\n");
POINT cp;
GetCursorPos(&cp);
printf("Òåêóùàÿ ïîçèöèÿ êóðñîðà: (%ld, %ld)\n", cp.x, cp.y);
} // óêàçûâàåò ïîëîæåíèå êóðñîðà ìûøè
void getCaretBlinkTime(){
printf("\n\t- getCaretBlinkTime()\n");
printf("Âðåìÿ ìåðöàíèÿ êàðåòêè - %dìñ\n", GetCaretBlinkTime());
} // ïîçâîëÿåò ïîëó÷èòü âðåìÿ ìåðöàíèÿ êàðåòêè
void getSystemMetrics(){
printf("\n\t- getSystemMetrics()\n");
printf("Êîëè÷åñòâî êíîïîê ìûøè: %d\n", GetSystemMetrics(SM_CMOUSEBUTTONS));
} // ïîçâîëÿåò ïîëó÷èòü êîëè÷åñòâî êíîïîê ìûøè
// --- Óïðàâëÿþùèå ôóíêöèè
void showCursor(){
printf("\t- showCursor()\n");
printf ("Ñåé÷àñ êóðñîð èñ÷åçíåò íà 3 ñåê\n");
// CHAR age;
// scanf("%c", &age);
// sleep(1);
ShowCursor(FALSE);
// scanf("%c", &age);
sleep(3);
ShowCursor(TRUE);
printf ("Êóðñîð âåðíóëñÿ\n");
} // ïîêàçûâàåò è ñêðûâàåò êóðñîð
void swapMouseButton(){
printf("\n\t- swapMouseButton()\n");
printf ("Ñåé÷àñ íà 5 ñåêóíä îñíîâíûå êíîïêè ìûøè ïîìåíÿþòñÿ ìåñòàìè\n");
SwapMouseButton (1);
sleep(5);
SwapMouseButton (0);
printf ("Êíîïêè ìûøè âåðíóëèñü íà ñâîè ìåñòà\n");
} // ïîçâîëÿåò ïîìåíÿòü ôóíêöèè êíîïîê ìåæäó ñîáîé
void setCaretBlinkTime(){
printf("\n\t- setCaretBlinkTime()\n");
UINT blinkTime = GetCaretBlinkTime();
UINT blinkTime_old = GetCaretBlinkTime();
printf ("Ñåé÷àñ íà 5 ñåêóíä êàðåòêà áóäåò ìåðöàòü áûñòðåå\n");
SetCaretBlinkTime(blinkTime / 20);
sleep(5);
SetCaretBlinkTime (blinkTime_old);
printf ("Êàðåòêà ñíîâà ìåðöàåò êàê îáû÷íî\n");
sleep(5);
} // ïîçâîëÿåò çàäàòü âðåìÿ ìåðöàíèÿ êàðåòêè
void setCursorPos(){
printf("\n\t- setCursorPos()\n");
printf("Ñåé÷àñ êóðñîð óñòàíîâèòñÿ â íóëåâóþ ïîçèöèþ\n");
INT y = 0, x = 0;
sleep(2);
SetCursorPos(x,y);
printf("Êóðñîð óñòàíîâëåí â íóëåâóþ ïîçèöèþ\n");
} // ïîçâîëÿåò çàäàòü ïîçèöèþ êóðñîðà
void systemParametersInfo(){
printf("\n\t- systemParametersInfo()\n");
PVOID mouseSpeed;
PVOID mouseSpeed_new = (PVOID) 1;
// Ïîëó÷àåì èíôîðìàöèþ î íàñòðîéêàõ ìûøè
SystemParametersInfo(SPI_GETMOUSESPEED, 0, &mouseSpeed, 0);
// Ïðîâåðÿåì ðåçóëüòàò âûïîëíåíèÿ ôóíêöèè
printf("Òåêóùàÿ ñêîðîñòü ìûøè: %d\n", mouseSpeed);
printf("Ñåé÷àñ ñêîðîñòü ìûøè ñèëüíî óìåíüøèòñÿ íà 3 ñåêóíäû\n");
sleep(1);
SystemParametersInfo(SPI_SETMOUSESPEED, 0, mouseSpeed_new, 0);
sleep(3);
SystemParametersInfo(SPI_SETMOUSESPEED, 0, mouseSpeed, 0);
printf("Ñêîðîñòü ìûøè âîññòàíîâëåíà\n");
} // äëÿ óñòàíîâêè ñêîðîñòè ïåðåìåùåíèÿ êóðñîðà
void main() {
setlocale(LC_ALL, "Rus");
printf("--------------------------------------------------");
printf("\n\t\t\t/ Èíôîðìàöèÿ î êëàâèàòóðå:\n");
getKeyboardType(); // + ïîçâîëÿåò ïîëó÷èòü òèï êëàâèàòóðû è êîëè÷åñòâî ôóíêöèîíàëüíûõ êëàâèø
getKeyboardState(); // + ïîçâîëÿåò ïîëó÷èòü òåêóùåå ñîñòîÿíèå âñåõ êëàâèø (êëàâèàòóðû è ìûøè)
printf("\n--------------------------------------------");
printf("\n\t\t\t/ Èíôîðìàöèÿ î ìûøè:\n");
getCursorPos(); // + óêàçûâàåò ïîëîæåíèå êóðñîðà ìûøè
getCaretBlinkTime(); // + ïîçâîëÿåò ïîëó÷èòü âðåìÿ ìåðöàíèÿ êàðåòêè
getSystemMetrics(); // + ïîçâîëÿåò ïîëó÷èòü êîëè÷åñòâî êíîïîê ìûøè
printf("\n----------------------------------------------");
printf("\n\t\t\t/ Óïðàâëÿþùèå ôóíêöèè:\n");
// showCursor(); // - ïîêàçûâàåò è ñêðûâàåò êóðñîð
// swapMouseButton(); // + ïîçâîëÿåò ïîìåíÿòü ôóíêöèè êíîïîê ìåæäó ñîáîé
// setCaretBlinkTime(); // +- ïîçâîëÿåò çàäàòü âðåìÿ ìåðöàíèÿ êàðåòêè
// setCursorPos(); // + ïîçâîëÿåò çàäàòü ïîçèöèþ êóðñîðà
// systemParametersInfo(); // + äëÿ óñòàíîâêè ñêîðîñòè ïåðåìåùåíèÿ êóðñîðà
printf("\nÄëÿ âûõîäà íàæìèòå Enter\n");
scanf("%c");
}