Управление светодиодами на ноутбуке 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]
Комментарии