線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4922
推到 Plurk!
推到 Facebook!

請問各位大大,要如何鎖定鍵盤上全部的按鍵呢?(含系統及功能鍵)

答題得分者是:mathewzhao
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-29 16:59:47 IP:211.75.xxx.xxx 未訂閱
請問各位大大 要如何鎖定鍵盤上全部的按鍵呢?(含系統及功能鍵) 我參改過之前大大們的文章,但是無法鎖住如Ctrl,Alt, Print Screen,及視窗鍵等,請各位大大幫我解困! 謝謝!!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-29 20:11:44 IP:202.39.xxx.xxx 未訂閱
### Disable Print Screen ### http://www.bsdg.org/swag/PRINTING/0040.PAS.html { >If anyone could tell me how to disable [Print Screen] from within a >text-based program, I would appreciate it.  Thanks, - Jeff Napier, Another >Company -     For that you can trap int 5h(Print Screen interrupt) Here is a program I wrote for someone on another network that will show you the basics of how it can be done:    nstn1410@fox.nstn.ca }
PROGRAM DisableInt05h;          { Dec 13/93, Greg Estabrooks.           }
USES CRT,                       { IMPORT Clrscr,KeyPressed.             }
     DOS;                       { IMPORT SetIntVec,GetIntVec.           }
VAR
   OldInt05   :POINTER;         { Holds the old address of INT 05h.     }
   NumPressed :WORD;            { The number of times PrtScr was pressed.}
   Misc       :WORD;    {$F }                           { Force FAR calls.                      }
PROCEDURE NewInt05; ASSEMBLER;
ASM
  Push DS                       { Push DS onto stack.                   }
  Mov AX,Seg @Data              { Now point DS to our data segment.     }
  Mov DS,AX
  Add NumPressed,1              { Add one to counter.                   }
  Pop DS                        { Pop DS off stack.                     }
  IRet                          { Force a return and pop flags off stack.}
END;{NewInt05}
{$F-}                           { Back to normal.                       }    BEGIN
  NumPressed := 0;             { Clear number count.                    }
  Clrscr;                      { Clear the screen.                      }
  GetIntVec($05,OldInt05);     { Save Old Interrupt vector.             }
  SetIntVec($05,@NewInt05);    { Point to our trap.                     }
  Misc := 0;                   { Clear Counter.                         }
  REPEAT                       { Loop Until a key other than PrtScr is  }
                               { pressed.                               }
    GOTOXY(1,1);               { Always show info at top corner.        }
    Write(Misc:8,'...  You have pressed PrtScr ',NumPressed:3,' times.');
    INC(Misc);                 { Increase counter to show a change.     }
  UNTIL KeyPressed;
  SetIntVec($05,OldInt05);     { Restore Old Interrupt vector.          }
END.{DisableInt05h}
--- --<-<-<@ 發表人 - hagar 於 2003/07/29 20:13:10
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-30 09:13:24 IP:147.8.xxx.xxx 未訂閱
Hagar: Isn't this a Turbo Pascal program? I think unit CRT/DOS have gone for goodies in Delphi.... 
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-30 15:26:33 IP:211.75.xxx.xxx 未訂閱
感謝二位大大的指導: 在下不曉得要在Windows下 鎖住所有按鍵還需 使用到中斷, 對我來說來難了 其實我是為了在跑一支別人寫的程式時, 因為會 送出序號給它後,再關掉該程式, 但是使用者卻可 以在送出序號的瞬間按下鍵盤上的一些鍵盤而中斷 ,停在序號的畫面進而看到序號, 我想這個問題是否 可以另一個方式來達成,就是強迫關閉該程式,這樣的 功能是不是
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-30 15:59:44 IP:147.8.xxx.xxx 未訂閱
Could you make the external program invisible? If it is a console application, I think you can create a hidden console for it. For Windows application, perhaps sending some messages to hide it is easier?
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-30 16:23:22 IP:211.75.xxx.xxx 未訂閱
william大大: 您的意思是可以把那個程式隱藏起來嗎? 但是由於那個程式不是我寫的,所以只有 執行檔, 如果我想把他隱藏要怎麼做呢?
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-30 16:51:02 IP:147.8.xxx.xxx 未訂閱
1. DOS application -> create anonymous pipes and pipe for it I/O 2. Windows application -> FindWindow.... or SW_HIDE in ShellExecute, etc.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-30 23:14:05 IP:202.39.xxx.xxx 未訂閱
引言: Hagar: Isn't this a Turbo Pascal program? I think unit CRT/DOS have gone for goodies in Delphi.... >< face="Verdana, Arial, Helvetica"> william 大大, 小弟不懂 < > 網路上找了篇, 就貼上來了.< > --- --<-<-<@
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-01 13:38:42 IP:61.185.xxx.xxx 未訂閱
Hi!saam兄 你要鎖住鍵盤,可以用Keyboard Hook這樣試一試: // 點擊Button1 鎖住鍵盤 // 點擊Button2 解開鍵盤 ... hKeyHook: Integer; ... function KeyHook(iCode: Integer; wParam: wParam; Key: lParam): LRESULT; stdcall; begin if iCode < 0 then CallNextHookEx(hKeyHook, iCode, wParam, Key); Result := 1; end; procedure TForm1.Button1Click(Sender: TObject); begin hKeyHook := SetWindowsHookEx(WH_KEYBOARD, KeyHook, HInstance, 0); end; procedure TForm1.Button2Click(Sender: TObject); begin UnHookWindowsHookEx(hKeyHook); hKeyHook := 0; end;
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-01 19:57:49 IP:202.100.xxx.xxx 未訂閱
Hi!saam兄 剛才忘了一個問題: 系統鍵在調用WH_KEYBOARD Hook之前就已經被處理了,在WH_KEYBOARD HOOK 中無法處理,可以如下試一試: ( 我使用delphi5 ) ... const WH_KEYBOARD_LL = 13; ... var hKeyHook: Integer; hKeyHookwin98:integer; ... function KeyHook(iCode: Integer; wParam: wParam; Key: lParam): LRESULT; stdcall; begin if iCode < 0 then CallNextHookEx(hKeyHook, iCode, wParam, Key); Result := 1; end; procedure TForm1.Button1Click(Sender: TObject); var temp:integer; begin if Win32Platform=VER_PLATFORM_WIN32_WINDOWS then //win98 begin SystemParametersInfo(Spi_screensaverrunning,1,@temp,0); hKeyHookwin98 := SetWindowsHookEx(WH_KEYBOARD, KeyHook, HInstance, 0); end else // win2000 begin hKeyHook := SetWindowsHookEx(WH_KEYBOARD_LL, KeyHook, HInstance, 0); end; end; procedure TForm1.Button2Click(Sender: TObject); var temp:integer; begin if Win32Platform=VER_PLATFORM_WIN32_WINDOWS then begin SystemParametersInfo(spi_screensaverrunning,0,@temp,0); UnHookWindowsHookEx(hKeyHookwin98); hKeyHookwin98:=0; end else begin UnHookWindowsHookEx(hKeyHook); hKeyHook := 0; end; end; 發表人 - mathewzhao 於 2003/08/01 20:02:40
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-08-02 23:14:10 IP:61.62.xxx.xxx 未訂閱
感謝諸位大大的指導,我試看看
5997
一般會員


發表:1
回覆:7
積分:1
註冊:2003-01-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-08-08 03:41:34 IP:203.77.xxx.xxx 未訂閱
引言: 請問各位大大 要如何鎖定鍵盤上全部的按鍵呢?(含系統及功能鍵) 我參改過之前大大們的文章,但是無法鎖住如Ctrl,Alt, Print Screen,及視窗鍵等,請各位大大幫我解困! 謝謝!! 我曾經也遇到這個問題 我用最簡單的發法解決ㄌ 填完序號後,算好秒數,將那支執行檔踢出記憶體就好ㄌ, 如果使用者中斷程式將會產生錯誤訊息,序號一樣註冊完成, 而且看不到你輸入的字串.
帥哥
------
帥哥
系統時間:2024-05-02 13:40:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!