Русская документация для фриланесеров
Главная arrow Разное arrow Управление светодиодами на ноутбуке ASUS L3C  
08.01.2009 г.
Главное меню
Главная
Поиск
PHP
.NET
Java
Ruby
C++
Delphi
Другие языки
Базы данных
Безопасность
Сети
ОС
Мобильные
Теория дизайна
WEB
Разное
Админцентр



светодиодные лампы для освещения витрин магазинов

Управление светодиодами на ноутбуке ASUS L3C Печать E-mail
Автор Westry   
29.02.2008 г.

На ноутбуках 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]

Источник - http://www.ishodniki.ru/art/artshow.php?cat=1&id=228&show=builder&pr=builder_system 

 
« Пред.   След. »
Webdesign by Webmedie.dk Webdesign by Webmedie.dk