Win98 下控制 NumLock |
答題得分者是:Cooky Kid
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
請問各位如何可以在 Win98 且背景下使 NumLock 失效, 我用在攔截到 user 按下 NumLock 時, 用 keybd_event 送出另一個 NumLock 使其回復原來的狀況, 可是這個方法在 Win2000 下有用, 轉到 Win98 就沒用了, 而且只有 NumLock 沒用, 如果改送其它 Key 時仍有效, 我的作法如下 if (GetAsyncKeyState(144) == 0)
{
keybd_event(144,MapVirtualKey(144,0),0,(MapVirtualKey(144,0) << 8));
keybd_event(144,MapVirtualKey(144,0),KEYEVENTF_KEYUP,(MapVirtualKey(144,0) << 8));
} 請問要怎麼做? Jesse Chan
------
Jesse Chan |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
試試看以下code,enjoy it!!!
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//改變 NUMLOCK鍵的真假值
//key[VK_NUMLOCK]即是Num Lock鍵
key[VK_NUMLOCK] = (BYTE)Button1->Default;
//設定現在鍵盤狀態
::SetKeyboardState((PBYTE)key);
//切換真假值
Button1->Default = !Button1->Default;
}
//---------------------------------------------------------------------------
|
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
引言: 試試看以下code,enjoy it!!! //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //改變 NUMLOCK鍵的真假值 //key[VK_NUMLOCK]即是Num Lock鍵 key[VK_NUMLOCK] = (BYTE)Button1->Default; //設定現在鍵盤狀態 ::SetKeyboardState((PBYTE)key); //切換真假值 Button1->Default = !Button1->Default; } //---------------------------------------------------------------------------sorry... private: // User declarations char key[256]; |
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
引言: 試試看以下code,enjoy it!!! //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //改變 NUMLOCK鍵的真假值 //key[VK_NUMLOCK]即是Num Lock鍵 key[VK_NUMLOCK] = (BYTE)Button1->Default; //設定現在鍵盤狀態 ::SetKeyboardState((PBYTE)key); //切換真假值 Button1->Default = !Button1->Default; } //---------------------------------------------------------------------------請問一下, 不知您有沒有真正試過, 據我所知這個方法是不行的, 查 BCB Help 的SetKeyboardState 這一項, 在 Remark 中我們可知, Remarks Because the SetKeyboardState function alters the input state of the calling thread and not the global input state of the system, an application cannot use SetKeyboardState to set the NUM LOCK, CAPS LOCK, or SCROLL LOCK indicator lights on the keyboard. 我想我該不用解釋為什麼不行了吧, 請再加油. Jesse Chan
------
Jesse Chan |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 請問各位如何可以在 Win98 且背景下使 NumLock 失效, 我用在攔截到 user 按下 NumLock 時, 用 keybd_event 送出另一個 NumLock 使其回復原來的狀況, 可是這個方法在 Win2000 下有用, 轉到 Win98 就沒用了, 而且只有 NumLock 沒用, 如果改送其它 Key 時仍有效, 我的作法如下 if (GetAsyncKeyState(144) == 0) { keybd_event(144,MapVirtualKey(144,0),0,(MapVirtualKey(144,0) << 8)); keybd_event(144,MapVirtualKey(144,0),KEYEVENTF_KEYUP,(MapVirtualKey(144,0) << 8)); } 請問要怎麼做? Jesse Chanhttp://www.raize.com/DevTools/RzComps/Contents.htm Raize component v2.52中的 KeyStatus可以達到您的要求.... TRzKeyStatus This status pane displays the current state of one of the "Lock" keys: CapsLock, NumLock, or ScrollLock. 網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
引言: 請問一下, 不知您有沒有真正試過, 據我所知這個方法是不行的, 查 BCB Help 的SetKeyboardState 這一項, 在 Remark 中我們可知, Remarks Because the SetKeyboardState function alters the input state of the calling thread and not the global input state of the system, an application cannot use SetKeyboardState to set the NUM LOCK, CAPS LOCK, or SCROLL LOCK indicator lights on the keyboard. 我想我該不用解釋為什麼不行了吧, 請再加油.sorry...你是要NumLock 『失效』 ,而非切換之用, 那請搜尋終極密技--Keyboard Hook--攔截鍵盤所有訊息,加以變更org失效。 good luck!!! |
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
引言:其實我覺得要作切換好像也沒辦法, 如果您有試出切換的話, 也請告訴我好嗎.謝謝. Jesse Chan引言: 請問一下, 不知您有沒有真正試過, 據我所知這個方法是不行的, 查 BCB Help 的SetKeyboardState 這一項, 在 Remark 中我們可知, Remarks Because the SetKeyboardState function alters the input state of the calling thread and not the global input state of the system, an application cannot use SetKeyboardState to set the NUM LOCK, CAPS LOCK, or SCROLL LOCK indicator lights on the keyboard. 我想我該不用解釋為什麼不行了吧, 請再加油.sorry...你是要NumLock 『失效』 ,而非切換之用, 那請搜尋終極密技--Keyboard Hook--攔截鍵盤所有訊息,加以變更org失效。 good luck!!!
------
Jesse Chan |
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
引言:版主您好, 我自己有購買 Raize Component, 所以我用過 TRzKeyStatus 這個元件, 它的 State 這個 property 是 read-only, 所以對於改變 NumLock 是一點幫助也沒有, 不知還有沒有更好的解法, 謝謝. Jesse Chan引言: 請問各位如何可以在 Win98 且背景下使 NumLock 失效, 我用在攔截到 user 按下 NumLock 時, 用 keybd_event 送出另一個 NumLock 使其回復原來的狀況, 可是這個方法在 Win2000 下有用, 轉到 Win98 就沒用了, 而且只有 NumLock 沒用, 如果改送其它 Key 時仍有效, 我的作法如下 if (GetAsyncKeyState(144) == 0) { keybd_event(144,MapVirtualKey(144,0),0,(MapVirtualKey(144,0) << 8)); keybd_event(144,MapVirtualKey(144,0),KEYEVENTF_KEYUP,(MapVirtualKey(144,0) << 8)); } 請問要怎麼做? Jesse Chanhttp://www.raize.com/DevTools/RzComps/Contents.htm Raize component v2.52中的 KeyStatus可以達到您的要求.... TRzKeyStatus This status pane displays the current state of one of the "Lock" keys: CapsLock, NumLock, or ScrollLock. 網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
------
Jesse Chan |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
引言:引言: 其實我覺得要作切換好像也沒辦法, 如果您有試出切換的話, 也請告訴我好嗎.謝謝. Jesse Chanjessechan 大大, 我在Win98, BCB5.0 下順利執行, 別告訴我...您試也沒試一下? >>< face="Verdana, Arial, Helvetica"> 感謝您的熱心, 我有確實試過沒有作用才去找 help, 然後就看到我在上面貼的那段文字, 我用的 BCB 6, 可是我不覺得這部份會有這麼大的差異, 如果方便的話, 可不可以請把您的測試程式連同用 BCB 5 編好的執行檔一起 mail 到 jesse.chan@dtsc.com.tw 好嗎, exe 檔記得 rename 成其它副檔名, 以免被防火牆擋下來, 謝謝您. Jesse Chan
------
Jesse Chan |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 感謝您的熱心, 我有確實試過沒有作用才去找 help, 然後就看到我在上面貼的那段文字, 我用的 BCB 6, 可是我不覺得這部份會有這麼大的差異, 如果方便的話, 可不可以請把您的測試程式連同用 BCB 5 編好的執行檔一起 mail 到 jesse.chan@dtsc.com.tw 好嗎, exe 檔記得 rename 成其它副檔名, 以免被防火牆擋下來, 謝謝您. Jesse Chan天下沒有不勞而獲的事......... <>網><>路>志<>工>聯盟---- href="http://www.vista.org.tw">http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
jessechan大大,
小弟已經傳檔給你囉~~~~~~~~
如沒收到,請見下面的程式碼....
//目的:按下按鈕,切換Num Lock鍵功能 //本程式在Win98,BCB5.0中順利編譯執行 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { //在Form1上新增一Memo1元件,以供測試之用 Memo1->Clear(); for(int i=0; i<21; i ) Memo1->Lines->Add("0.1.2.3.4.5.6.7.8.9.10.11.12.13"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //先取得現在鍵盤狀態 unsigned char key[256]; ::GetKeyboardState(key); int i; (Button1->Default)?(i=1,Caption="開啟Num Lock鍵"):(i=0,Caption="關閉Num Lock鍵"); //改變 NUMLOCK鍵的真假值 //key[VK_NUMLOCK]即是Num Lock鍵 key[VK_NUMLOCK] = i; //設定現在鍵盤狀態 ::SetKeyboardState(key); //切換真假值 Button1->Default = !Button1->Default; Memo1->SetFocus(); } //--------------------------------------------------------------------------- |
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
正在測試中, 先謝謝您, 我想請問那位熱心人士幫我聯絡 MicroSoft, 在此致上最大的敬意和謝意, 如果依照台灣微軟的說法, 在 window 98, 95, ME 中是無法以正常方法去控制 NumLock 的燈號的, 唯一辦法就是寫 VxD, 但凡事沒有絶對, 所以我也在謙卑的心去測試 Cooly Kid 的程式, 為了這個問題, 我除了貼在版上之外, BCB 的 help, MSDN 光碟及網路, Win32 API 的書, 加上四處問高手, 即使現在找到答案, 也不該算是不勞而獲了吧. 我請人寄 exe 的原因是要排除 compiler 版本不同的問題, 版主博學多聞, 想必也知道有些東西在 BCB6 及 BCB5 編出來會不一樣, 還是多謝 axsoft 的指教. Jesse Chan
------
Jesse Chan |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
Sorry!我沒別的意思您別誤會,只希望大家能試過後有問題才來發問 !
以上深感抱歉! 網路志工聯盟----Visita網站http://www.vista.org.tw
---[ 發問前請先找找舊文章 ]---
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
引言: Sorry!我沒別的意思您別誤會,只希望大家能試過後有問題才來發問 ! 以上深感抱歉! 網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---別放在心上, 我只是說明我不是懶人而已, 能夠做版主, 您一定也是熱心又有實力的人, 這裡的人都很熱心, 在此謝謝大家. Jesse Chan
------
Jesse Chan |
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |