Управление светодиодами на ноутбуке 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);}
Download this code: asusled.cpp
Программка управляется из командной строки:
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]