Главная » Статьи » C++ » Статьи по С++

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




Управление светодиодами на ноутбуке ASUS L3C
Управление светодиодами на ноутбуке ASUS L3C


На ноутбуках ASUS, серии L3 есть четыре светодиода.

  • Зеленый - питание или спящий режим;
  • Условно красный (скорее оранжевый) - зарядка;
  • Синий - новая почта;
  • Условно желтый (скорее оранжевый) - WIFI.

Первый два работают всегда и у всех. Скорее всего, программно с ними вообще нельзя ничего сделать. Я не смог подобрать номер порта для них.

Синий светодиод работает только если установлена специальная программа, которую предоставляет производитель, и только при использовании Outlook.

Желтый работает, если есть WI-FI. В моей модели его нет.

Негоже терять такие замечательные сигнализаторы, подумал я, и прикрутил их к The Bat! (особенно с учетом того, что их видно даже при закрытой крышке).

Ниже приведен код консольной программки, написанной на Borland C++ Builder.

//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused

#include <windows.h>
#include <shlobj.h>
#include <stdio.h>

#include <windows.h>
#include <shlobj.h>

HANDLE ATKACPIhandle;

int CtrlACPI(int code, int hasArg, int arg)
{
long bytes = 0;
long inbuf[5];
struct cmbuf {
short cmds[2];
long cm2;
} cbuf;
long outbuf[192];
int ret;

cbuf.cmds[0] = 0;
cbuf.cmds[1] = 4;
cbuf.cm2 = arg;
inbuf[0] = 2;
inbuf[1] = code;
inbuf[2] = hasArg;
inbuf[3] = 8 * hasArg;
inbuf[4] = (long)&cbuf;

ret = DeviceIoControl(ATKACPIhandle, 0x222404, inbuf, sizeof(inbuf),
outbuf, sizeof(outbuf), (unsigned long*)&bytes, NULL);
return ret;
}

WNDCLASS wndclass;

LRESULT CALLBACK wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int ret;
switch(uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
ret = 0;
break;
default:
ret = DefWindowProc(hwnd,uMsg,wParam,lParam);
break;
}
return ret;
}

int main(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR cmdLine,
int iCmdShow)
{
FILETIME stamp = {0};
long old = -1, count;
HWND hwnd;
HKEY UnreadMailKey;
HANDLE KeyEvent;

wndclass.hInstance = hInstance;
wndclass.lpszClassName = "hyc";
wndclass.lpfnWndProc = wndproc;

do {

if (RegisterClass(&wndclass) == 0 ) break;

hwnd = CreateWindow("hyc", "hyc", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, wndclass.hInstance, NULL);

if (!hwnd) break;

ATKACPIhandle = CreateFile("\\\\.\\ATKACPI",
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
0, NULL);

if (!ATKACPIhandle) break;

for (;;) {
CtrlACPI(0x44454c57, 1, 1);
CtrlACPI(0x44454c4d, 1, 1);
Sleep(100);
CtrlACPI(0x44454c57, 1, 0);
CtrlACPI(0x44454c4d, 1, 0);
Sleep(100);
}
} while(0);
return(0);
}

Программка управляется из командной строки:

asusled.exe mail on - включить синий светодиод
asusled.exe mail off - выключить синий светодиод
asusled.exe wifi on - включить желтый светодиод
asusled.exe wifi off - выключить желтый светодиод

Скачать рабочую версию [exe, 52Kb]

В TheBat! необходимо настроить "сортировщик писем" так, чтобы при приходе новой почты запускалась программа "asusled.exe mail on", и при прочтении писем - "asusled.exe mail off".

Два разных светодиода я использую для двух разных почтовых ящиков.

Решение для почтового клиента Mozilla (FireBird) можно найти здесь. [zip, 6Kb]


Автор: mike


Статья с сайта www.ishodniki.ru
Категория: Статьи по С++ | Добавил: c1 (2009 Июнь 22)
Просмотров: 832 | Теги: Управление светодиодами на ноутбуке | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar