Program/skrypt wciskający guzik przy autostarcie


(fra234) #1

Witam.

Mam podświetlenie klawiatury w laptopie jednak podczas codziennego użytkowania nie potrzebuje go, w związku z czym zawsze je wyłączam zaraz po starcie systemu. Moje pytanie jest następujące: czy istnieje program lub skrypt który mógłby automatycznie wciskać guzik wyłączania podświetlenia za mnie? Chodzi mi o guziki Fn+F9.

Pozdrawiam.


(scripter1) #2

Nie, to jest realizowane sprzętowo a nie programowo i nie da się tego zrobić żadnym skryptem.

Ale możesz zajrzeć do biosu czy nie ma tam opcji ustawiającej czy podświetlanie ma być domyślnie włączone przy starcie czy nie.


(fra234) #3

To była pierwsza rzecz jaką sprawdziłem. Widzę że autohotkey nie wykrywa funkcji przycisku Fn+F9 więc raczej nic z tego. Wychodzi na to, że dopóki ktoś nie zmodyfikuje BIOSu muszę wyłączać to manualnie.


(stasinek) #4

EDIT: ups, nie zauważyłem że daliście odpowiedzi(mam otwarty temat od wczoraj) 

http://www.autohotkey.com/

Uruchom i sprawdź kod dla Fn http://www.autohotkey.com/board/topic/21105-crazy-scripting-scriptlet-to-find-scancode-of-a-key/

Dopasuj do wzoru http://www.autohotkey.com/board/topic/77201-how-to-replay-a-fn-key-event-solved/

Nie sprawdzałem, z Fn to może być niewykonalne, ale dlaczego temat jest “solved”?

 

Problem można by rozwiązać w JScript (.vs) lub JBScript(.vb) ale znowu bez Fn

VScript https://technet.microsoft.com/en-us/library/ff731008.aspx

http://www.codeproject.com/Questions/183840/How-can-I-press-both-function-key-fn-and-f-at-th

VBScript http://www.pctools.com/guides/scripting/detail/149/?act=reference

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.AppActivate(this);
WshShell.SendKeys("{F9}");

Python https://pypi.python.org/pypi/SendKeys/0.3

Również nie Fn+F9

 

Wczoraj zasiadłem do pisania w WinAPI, mam już przerobiony fragment który odczyta kody(KeyboardHook). Troche to potrwa, jeśli nie wieczność bo nie mam weny.

Zostawiam kod, może ci ktoś przerobi a może uda sie sprawdzić czy Fn jest jakoś rejestrowany.

Jeśli tak to można by wysłać SendInput?

#include <windows.h>
#pragma hdrstop
#include "Klawiszek.h"
int main (void)
{
INPUT input;
//wstawić kod dla KeyDOWN Fn
//wstawić kod dla KeyDOWN F9
input.ki.time = 0;
input.ki.dwFlags = 0;
input.ki.vk = VK_F9;
SendInput(NULL, &input,sizeof(input)); //wyślij
//wstawić kod na podniesienie KeyUP F9
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(NULL, &input,sizeof(input));
//wstawić kod na podniesienie Fn
return 0; 
}

// Sprawdzanie kodów wymaga przerobienia:

//NISKOPOZIOMOWE PRZECHWYTYWANIE KLAWISZY 
//
HHOOK llkbdhhook;
LRESULT LowLevelKeyboardProc(INT nCode, WPARAM wParam, LPARAM lParam) {
if (nCode!=HC_ACTION)
   {return CallNextHookEx(llkbdhhook,nCode,wParam,lParam);
   }
register BOOL fProcHandled;
register KBDLLHOOKSTRUCT *pkbdllhook = (KBDLLHOOKSTRUCT*)lParam;
//------------------------------------
if (wParam==WM_KEYDOWN) {
printf("KEYDOWN: %d\n",pkbdllhook->vkCode);
else {
 // obsługa zwolnienia klawisza Ctrl, Alt lub Tab i przekazanie dalej
printf("KEYUP: %d\n",pkbdllhook->vkCode);}

return CallNextHookEx(llkbdhhook,nCode,wParam,lParam); }

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {

llkbdhhook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc, (HINSTANCE)HInstance, 0);

printf(“Naciśnij wybrany klawisz i zanotuj ich kody”);

/// niekończąca się pętla for (; ;) { Sleep(10); }

}

 

 

 

 


(fra234) #5

@stasinek Jestem pod wrażeniem że komuś chciało się tak poważnie potraktować temat. Twój skrypt działa? Czym to skompilować?