Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

определение в С# операций с windows

9.8K
21 ноября 2006 года
Magam
14 / / 26.06.2005
Как в С# определить :
1. закончился тонер в лазерном принтере
2. зажована бумага
3. оперативная память загружена более 80%
Какие классы и функции используются для этого?
273
22 ноября 2006 года
3A3-968M
1.2K / / 22.12.2005
Цитата: Magam
Как в С# определить :
1. закончился тонер в лазерном принтере
2. зажована бумага
3. оперативная память загружена более 80%
Какие классы и функции используются для этого?


Первые два - только прямая с работа с драйвером, это очень сложно в случае с C#. А последнее можно через WinAPI. Сначала создаём структуру MEMORYSTATUS:

Код:
[SIZE=2][FONT=Courier New][System.Runtime.InteropServices.[/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]StructLayout[/COLOR][/SIZE][SIZE=2](System.Runtime.InteropServices.[/SIZE][SIZE=2][COLOR=#008080]LayoutKind[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Sequential)][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]struct [/COLOR][/SIZE][SIZE=2][COLOR=#008080]WINAPI_MEMORYSTATUS
[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwAvailPageFile;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwAvailPhys;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwAvailVirtual;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwLength;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwMemoryLoad;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwTotalPageFile;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwTotalPhys;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#008080]UInt32[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] dwTotalVirtual;[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]

Далее создаём managed-обёртку для вызова WinAPI функции для получения состояния памяти:
 
Код:
[SIZE=2][FONT=Courier New][System.Runtime.InteropServices.[/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]DllImport[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#800000]"Kernel32.dll"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New], [/FONT]
[FONT=Courier New]CharSet = System.Runtime.InteropServices.[/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]CharSet[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Auto, [/FONT]
[FONT=Courier New]SetLastError = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]true[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New],[/FONT]
[FONT=Courier New]CallingConvention = System.Runtime.InteropServices.[/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]CallingConvention[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Winapi)] [/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]extern [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void [/COLOR][/SIZE][SIZE=2]GlobalMemoryStatus([/SIZE][SIZE=2][COLOR=#0000ff]ref [/COLOR][/SIZE][SIZE=2][COLOR=#008080]WINAPI_MEMORYSTATUS[/COLOR][/SIZE][SIZE=2] lpBuffer);
[/SIZE][/FONT]

Теперь можно вызвать функцию:
 
Код:
[SIZE=2][COLOR=#008080][FONT=Courier New]WINAPI_MEMORYSTATUS[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2] mem = [/SIZE][SIZE=2][COLOR=#0000ff]default[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#008080]WINAPI_MEMORYSTATUS[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]);[/FONT]
[FONT=Courier New]GlobalMemoryStatus([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]ref[/COLOR][/SIZE][SIZE=2] mem);
[/SIZE][/FONT]
9.8K
22 ноября 2006 года
Magam
14 / / 26.06.2005
Хорошо, спасибо
713
23 ноября 2006 года
Ap0k
360 / / 13.03.2006
Если не ошибаюсь, то это можно реализовать через WMI
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог