全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1849
推到 Plurk!
推到 Facebook!

Win98 下控制 NumLock

答題得分者是:Cooky Kid
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-11 09:59:50 IP:203.75.xxx.xxx 未訂閱
請問各位如何可以在 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-14 20:40:56 IP:210.58.xxx.xxx 未訂閱
試試看以下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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-14 20:44:09 IP:210.58.xxx.xxx 未訂閱
引言: 試試看以下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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-16 11:17:16 IP:203.75.xxx.xxx 未訂閱
引言: 試試看以下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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-16 13:00:45 IP:61.218.xxx.xxx 未訂閱
引言: 請問各位如何可以在 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
http://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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-16 13:07:30 IP:210.58.xxx.xxx 未訂閱
引言: 請問一下, 不知您有沒有真正試過, 據我所知這個方法是不行的, 查 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-16 14:14:00 IP:203.75.xxx.xxx 未訂閱
引言:
引言: 請問一下, 不知您有沒有真正試過, 據我所知這個方法是不行的, 查 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
------
Jesse Chan
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-16 14:23:35 IP:203.75.xxx.xxx 未訂閱
引言:
引言: 請問各位如何可以在 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
http://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 ---[ 發問前請先找找舊文章 ]---
版主您好, 我自己有購買 Raize Component, 所以我用過 TRzKeyStatus 這個元件, 它的 State 這個 property 是 read-only, 所以對於改變 NumLock 是一點幫助也沒有, 不知還有沒有更好的解法, 謝謝. Jesse Chan
------
Jesse Chan
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-18 13:31:54 IP:210.58.xxx.xxx 未訂閱
引言: 其實我覺得要作切換好像也沒辦法, 如果您有試出切換的話, 也請告訴我好嗎.謝謝. Jesse Chan
jessechan 大大, 我在Win98, BCB5.0 下順利執行, 別告訴我...您試也沒試一下?
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-18 13:54:01 IP:203.75.xxx.xxx 未訂閱
引言:
引言: 其實我覺得要作切換好像也沒辦法, 如果您有試出切換的話, 也請告訴我好嗎.謝謝. Jesse Chan
jessechan 大大, 我在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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-19 12:12:20 IP:61.218.xxx.xxx 未訂閱
引言: 感謝您的熱心, 我有確實試過沒有作用才去找 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-19 13:37:32 IP:210.58.xxx.xxx 未訂閱
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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-12-19 15:44:05 IP:203.75.xxx.xxx 未訂閱
正在測試中, 先謝謝您, 我想請問那位熱心人士幫我聯絡 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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-12-19 17:15:00 IP:61.218.xxx.xxx 未訂閱
Sorry!我沒別的意思您別誤會,只希望大家能試過後有問題才來發問 ! 以上深感抱歉!    聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-12-20 01:49:07 IP:61.228.xxx.xxx 未訂閱
引言: Sorry!我沒別的意思您別誤會,只希望大家能試過後有問題才來發問 ! 以上深感抱歉! 聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
別放在心上, 我只是說明我不是懶人而已, 能夠做版主, 您一定也是熱心又有實力的人, 這裡的人都很熱心, 在此謝謝大家. Jesse Chan
------
Jesse Chan
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-12-20 01:59:14 IP:61.228.xxx.xxx 未訂閱
給 Cooky kid, 您的程式我收到了, 我在 windows 2000 server 下執行還是無法改變燈號, 我在公司用了四台電腦試也是一樣, 可能是您 keyboard 的 driver 不同吧, 無論如何小弟在此致上最大謝謝, 為了不浪費版面, 我把 case 結掉, 我們用 email 聯絡. Jesse Chan
------
Jesse Chan
系統時間:2024-04-20 17:22:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!