Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
albu
1

GetFileType и GetCosoleCursorInfo

08.03.2012, 20:01. Показов 1753. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать динамически подключаемую dll с этими функциями. А я никак разобраться не могу. Кинь те кто то пример программы или помогите написать программу.

Добавлено через 2 часа 59 минут
Помогите очень срочно надо!
Заблокирован
Автор FAQ
09.03.2012, 13:03 2
Цитата Сообщение от albu Посмотреть сообщение
Нужно написать динамически подключаемую dll с этими функциями.
- смотри можно написать проект где в теле функции скажем решающей задачу 2 + 2 будут вызываться 2-е указанные функции. Формально задание будет выполнено, но фактически толку от вызовов GetFileType и GetCosoleCursorInfo не будет. Поэтому обрисуй хотя бы что приблизительно должна делать твоя DLL-ка?
Помотри сюда там есть работа с буфером консоли
Форматирование текста и изменение цвета текста в консоли
1
albu
11.03.2012, 15:39 3
Нужно просто сделать пример использования этих двух функций и все. Это часть задания остальное я сам попробую.

Добавлено через 2 минуты
Типа такого, только использовать функции GetFileType and GetCosoleCursorInfo.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include<windows.h>
#include <winioctl.h>
#include <stdio.h>
#include <conio.h>
extern "C" __declspec(dllexport) 
void SystemInfo()
{
    LPSTR str = new CHAR[40],str1 = new CHAR[40],buff = new CHAR[40];   
    DWORD n;    
    HANDLE h_out = GetStdHandle(STD_OUTPUT_HANDLE),hFile;
    DWORD Len;
    HANDLE hOut = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE,0,CONSOLE_TEXTMODE_BUFFER,0);   
    SetConsoleActiveScreenBuffer(hOut);
    SYSTEM_INFO inf;
    GetSystemInfo(&inf);
    switch (inf.wProcessorArchitecture){            
    case PROCESSOR_ARCHITECTURE_INTEL:  str1="PROCESSOR_ARCHITECTURE_INTEL";        break;
    case PROCESSOR_ARCHITECTURE_MIPS:   str1="PROCESSOR_ARCHITECTURE_MIPS";     break;
    case PROCESSOR_ARCHITECTURE_UNKNOWN:str1="PROCESSOR_ARCHITECTURE_UNKNOWN";  break;
    case PROCESSOR_ARCHITECTURE_SHX:    str1="PROCESSOR_ARCHITECTURE_SHX";      break;
    case PROCESSOR_ARCHITECTURE_ARM:    str1="PROCESSOR_ARCHITECTURE_ARM";      break;}
    CharToOem("PROCESSOR_ARCHITECTURE:      ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str1,lstrlen(str1),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
    itoa(inf.dwNumberOfProcessors ,str,10);
    CharToOem("NumberOfProcessors:      ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
    switch(inf.dwProcessorType){
    case PROCESSOR_INTEL_386:       str="PROCESSOR_INTEL_386";      break;
    case PROCESSOR_INTEL_486:       str="PROCESSOR_INTEL_486";      break;
    case PROCESSOR_INTEL_PENTIUM:   str="PROCESSOR_INTEL_PENTIUM";  break;
    case PROCESSOR_MIPS_R4000:      str="PROCESSOR_MIPS_R4000";     break;
    case PROCESSOR_HITACHI_SH3:     str="PROCESSOR_HITACHI_SH3";    break;
    case PROCESSOR_HITACHI_SH4:     str="PROCESSOR_HITACHI_SH4";    break;
    case PROCESSOR_STRONGARM:       str="PROCESSOR_STRONGARM";      break;
    case PROCESSOR_ARM720:          str="PROCESSOR_ARM720";         break;
    }
    CharToOem("ProcessorType:           ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
    CharToOem("\n\n\n\n\n\nДля выхода нажмите любую клавишу...",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    getch();
    CloseHandle(hOut);
    SetConsoleActiveScreenBuffer(h_out);
}
extern "C" __declspec(dllexport) 
void FileTime()
{       
    LPSTR str = new CHAR[40],buff = new CHAR[40];   
    DWORD n;    
    HANDLE h_out = GetStdHandle(STD_OUTPUT_HANDLE),hFile;
    DWORD Len;
    HANDLE hOut = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CONSOLE_TEXTMODE_BUFFER,NULL); 
    SetConsoleActiveScreenBuffer(hOut);
    HANDLE h_inp = GetStdHandle(STD_INPUT_HANDLE);
    WriteConsole(hOut,"Input file name:",lstrlen("Input file name:"),&Len,NULL);
    ReadConsole(h_inp,str,40,&n,NULL);
    //ReadConsole(h_inp,str,40,&n,NULL);
    str[n-2] = 0;
    str[n-1] = 0;
    HANDLE File=CreateFile(str,GENERIC_READ,0,NULL,OPEN_EXISTING,0,0);
    if (File!=NULL)
    {
        FILETIME fc;
        FILETIME fa;
        FILETIME fw;
        SYSTEMTIME sysT;
        if (GetFileTime(File,&fc,&fa,&fw)!=0)
        {
             FileTimeToSystemTime(&fc,&sysT);
             itoa(sysT.wYear,str,10);
    CharToOem("Year:        ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
 
    itoa(sysT.wMonth,str,10);
    CharToOem("Month:       ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
    
    itoa(sysT.wDay,str,10);
    CharToOem("Day of Month:    ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
    
    
    itoa(sysT.wHour,str,10);
    CharToOem("Hour:        ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
 
    itoa(sysT.wMinute,str,10);
    CharToOem("Minute:      ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
 
    itoa(sysT.wSecond,str,10);
    CharToOem("Seconds: ",buff);
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    WriteConsole(hOut,str,lstrlen(str),&Len,NULL);
    WriteConsole(hOut,"\n",lstrlen("\n"),&Len,NULL);
 
    CharToOem("\n\n\n\n\n\nДля выхода нажмите любую клавишу...",buff);
 
    WriteConsole(hOut,buff,lstrlen(buff),&Len,NULL);
    }
}
    getch();
    CloseHandle(File);
    CloseHandle(hOut);
    SetConsoleActiveScreenBuffer(h_out);
}
Заблокирован
Автор FAQ
11.03.2012, 16:25 4
код DLL-ки
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// albuDLL.cpp : Defines the entry point for the DLL application.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
//Объявление экспортируемых функций
EXPORT BOOL PrintInConsole(HANDLE,LPCTSTR);//Служит для вывода на экран русского текста 
EXPORT BOOL GetInfoOfCsor (HANDLE);
EXPORT BOOL GetTypeOfFile (HANDLE,LPCTSTR);
 
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}
 
BOOL PrintInConsole(HANDLE hConsoleOutput, LPCTSTR sMSG)
{
    BOOL bRet = FALSE;
    long sLen   = -1;
    char * sBUF = NULL;
    DWORD dwBytes;
    if(sMSG)
    {
        sLen = strlen(sMSG);
        if((sBUF = (char *)malloc((1 + sLen)*sizeof(char))))
        if((bRet = CharToOem(sMSG,sBUF)))
            bRet = WriteConsole(hConsoleOutput,sBUF,strlen(sBUF),&dwBytes,NULL);
    }
    if(sBUF)
        free((void *)sBUF);
    return bRet;
}
 
EXPORT BOOL GetInfoOfCsor(HANDLE hConsoleOutput)
{
    char sBuf[256] = {0};
    CONSOLE_CURSOR_INFO pCursorInfo;
    BOOL bRet = GetConsoleCursorInfo
        (
            hConsoleOutput, // дескриптор буфера экрана
            &pCursorInfo    // информация о курсоре
        );
    if(!bRet)
        PrintInConsole(hConsoleOutput,"Невозможно получить информацию о курсоре\n");
    else
    {
        //О полях структуры CONSOLE_CURSOR_INFO здесь 
        //http://msdn.microsoft.com/en-us/library/windows/desktop/ms682068(v=vs.85).aspx
        sprintf(sBuf,"%% символьных ячеек которые заполняет курсор : %u\n",pCursorInfo.dwSize);
        PrintInConsole(hConsoleOutput,sBuf);
 
        sprintf(sBuf,"видимость курсора : %s\n",(pCursorInfo.bVisible ? "ДА" : "НЕТ"));
        PrintInConsole(hConsoleOutput,sBuf);
        system("pause");
    }
    return bRet;
}
 
EXPORT BOOL GetTypeOfFile(HANDLE hConsoleOutput, LPCTSTR sFilePath)
{
    char sBuf[256] = {0};
    BOOL bRet = FALSE;
    HANDLE hFile = CreateFile(sFilePath,GENERIC_READ,0,NULL,OPEN_EXISTING,0,0);
    if(hFile == INVALID_HANDLE_VALUE)
    {
        sprintf(sBuf,"Не могу отрыть файл : %s\n",sFilePath);
        PrintInConsole(hConsoleOutput,sBuf);
    }
    else
    {
        //О GetFileType [url]http://www.vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_getfiletype.htm[/url]
        switch(GetFileType(hFile))
        {
        case FILE_TYPE_CHAR:
            bRet = PrintInConsole
            (
                hConsoleOutput,
                "Указанный файл - символьный файл, обычно устройства LPT или консоли\n"
            );
            break;
        case FILE_TYPE_DISK:
            bRet = PrintInConsole
            (
                hConsoleOutput,
                "Указанный файл - файл на диске\n"
            );
            break;
        case FILE_TYPE_PIPE:
            bRet = PrintInConsole
            (
                hConsoleOutput,
                "Указанный файл является или именованным или анонимным каналом\n"
            );
            break;
        default:
            bRet = PrintInConsole
            (
                hConsoleOutput,
                "Тип указанного файла неизвестен, или функция завершилась ошибкой\n"
            );
            break;
        }
        CloseHandle(hFile);
    }
    return bRet;
}
Ниже прикреплён откомпилированный проект
Вложения
Тип файла: rar albuDLL.def.rar (479 байт, 5 просмотров)
Тип файла: rar albuDLL.dll.rar (18.3 Кб, 6 просмотров)
Тип файла: rar albuDLL.lib.rar (688 байт, 5 просмотров)
Тип файла: rar albuDLL_proj.rar (28.9 Кб, 5 просмотров)
0
Заблокирован
Автор FAQ
11.03.2012, 16:28 5
Код клиента
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <windows.h>
#include <stdio.h>
#pragma comment (lib,"albuDLL.lib")
#ifdef __cplusplus 
#define IMPORT extern "C" __declspec (dllimport) 
#else 
#define IMPORT __declspec (dllimport) 
#endif 
 
//Объявление импортируемых функций
IMPORT BOOL PrintInConsole(HANDLE,LPCTSTR);//Служит для вывода на экран русского текста 
IMPORT BOOL GetInfoOfCsor (HANDLE);
IMPORT BOOL GetTypeOfFile (HANDLE,LPCTSTR);
 
int main()
{
    char sFilePath[MAX_PATH] = {0};
    HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    PrintInConsole(hConsoleOutput,"Введите путь к файлу: ");
    scanf("%[^\n]",sFilePath);
    //Побуем получить информацию о файле
    if(!GetTypeOfFile(hConsoleOutput,sFilePath))
        MessageBox(NULL,"GetTypeOfFile",NULL,MB_OK);
    //Побуем получить информацию о курсоре
    if(!GetInfoOfCsor(hConsoleOutput))
        MessageBox(NULL,"GetInfoOfCsor",NULL,MB_OK);
    return 0;
}
Ниже скрин работы и откомпилированный проект
Миниатюры
GetFileType и GetCosoleCursorInfo  
Вложения
Тип файла: rar albuClient.exe.rar (11.8 Кб, 9 просмотров)
Тип файла: rar albuClient_proj.rar (33.4 Кб, 8 просмотров)
1
11.03.2012, 16:28
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru