Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » Borland C++ Builder - Система »

Обсудить на форуме Обсудить на форуме

Управление светодиодами на ноутбуке 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
Прочитано: 4663
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру