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

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

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

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

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

 

asus_nb.gif

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

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

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

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

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

  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. //---------------------------------------------------------------------------
  4. #pragma argsused
  5.  
  6. #include <windows.h>
  7. #include <shlobj.h>
  8. #include <stdio.h>
  9.  
  10. #include <windows.h>
  11. #include <shlobj.h>
  12.  
  13. HANDLE ATKACPIhandle;
  14.  
  15. int CtrlACPI(int code, int hasArg, int arg)
  16. {
  17. long bytes = 0;
  18. long inbuf[5];
  19. struct cmbuf {
  20. short cmds[2];
  21. long cm2;
  22. } cbuf;
  23. long outbuf[192];
  24. int ret;
  25.  
  26. cbuf.cmds[0] = 0;
  27. cbuf.cmds[1] = 4;
  28. cbuf.cm2 = arg;
  29. inbuf[0] = 2;
  30. inbuf[1] = code;
  31. inbuf[2] = hasArg;
  32. inbuf[3] = 8 * hasArg;
  33. inbuf[4] = (long)&cbuf;
  34.  
  35. ret = DeviceIoControl(ATKACPIhandle, 0x222404, inbuf, sizeof(inbuf),
  36. outbuf, sizeof(outbuf), (unsigned long*)&bytes, NULL);
  37. return ret;
  38. }
  39.  
  40. WNDCLASS wndclass;
  41.  
  42. LRESULT CALLBACK wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  43. {
  44. int ret;
  45. switch(uMsg) {
  46. case WM_DESTROY:
  47. PostQuitMessage(0);
  48. ret = 0;
  49. break;
  50. default:
  51. ret = DefWindowProc(hwnd,uMsg,wParam,lParam);
  52. break;
  53. }
  54. return ret;
  55. }
  56.  
  57. int main(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR cmdLine,
  58. int iCmdShow)
  59. {
  60. FILETIME stamp = {0};
  61. long old = -1, count;
  62. HWND hwnd;
  63. HKEY UnreadMailKey;
  64. HANDLE KeyEvent;
  65.  
  66. wndclass.hInstance = hInstance;
  67. wndclass.lpszClassName = "hyc";
  68. wndclass.lpfnWndProc = wndproc;
  69.  
  70. do {
  71.  
  72. if (RegisterClass(&wndclass) == 0 ) break;
  73.  
  74. hwnd = CreateWindow("hyc", "hyc", WS_OVERLAPPEDWINDOW,
  75. CW_USEDEFAULT, CW_USEDEFAULT,
  76. CW_USEDEFAULT, CW_USEDEFAULT,
  77. NULL, NULL, wndclass.hInstance, NULL);
  78.  
  79. if (!hwnd) break;
  80.  
  81. ATKACPIhandle = CreateFile("\\\\.\\ATKACPI",
  82. GENERIC_READ|GENERIC_WRITE,
  83. FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
  84. 0, NULL);
  85.  
  86. if (!ATKACPIhandle) break;
  87.  
  88. for (;;) {
  89. CtrlACPI(0x44454c57, 1, 1);
  90. CtrlACPI(0x44454c4d, 1, 1);
  91. Sleep(100);
  92. CtrlACPI(0x44454c57, 1, 0);
  93. CtrlACPI(0x44454c4d, 1, 0);
  94. Sleep(100);
  95. }
  96. } while(0);
  97. return(0);
  98. }

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]

Комментарии