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

如何使用王國榮先生的 KeybHook.dll

尚未結案
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-23 17:15:31 IP:202.39.xxx.xxx 未訂閱
請教各位大大:    因為程式中需要禁止使用 Alt+F4 和 Alt+Tab, 手邊找到的資料是王國榮先生的大作, Visual Basic 6.0 與 Windows API 講座(旗標出版), 裡面介紹使用 KeybHook.dll , 應該可以達成我的要求, 但是由於範例是 VB 語法, 我試了很久仍無法翻成 BCB 語法, 想請教一下各位, 書中 VB 範例如下:
private Sub Form_Load()
  '掛上視窗程序
  prevWndProc=GetWindowLong(Me.hWnd,GWL_WNDPROC)
  SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
  '掛上 KeyboardHook_HookProc 函數
  SetKeyboardHook Me.hWnd, WM_USER
End Sub    private Sub Form_Unload(Cancel As Integer)
  '卸下 KeyboardHook_HookProc 函數
  ReleaseKeyboardHook
  '卸下 視窗程序
  SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub    Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, 
                 ByVal wParam As Long, ByVal lParam As Long) As Long      If Msg=WM_USER Then
    Form1.List1.AddItem "wParam="&wParam&",lParam"&Hex(lParam)
    Form1.List1.ListIndex=Form1.List1.NewIndex;
  End If
  WndProc=CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function
謝謝! -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-24 00:37:21 IP:59.104.xxx.xxx 未訂閱
引言: 請教各位大大: 因為程式中需要禁止使用 Alt F4 和 Alt Tab, 手邊找到的資料是王國榮先生的大作, Visual Basic 6.0 與 Windows API 講座(旗標出版), 裡面介紹使用 KeybHook.dll , 應該可以達成我的要求, 但是由於範例是 VB 語法, 我試了很久仍無法翻成 BCB 語法, 想請教一下各位, 書中 VB 範例如下: -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
您好!您是否要找個程式是用bcb寫的!功能是禁止使用 Alt F4 這裡有個:讓預設關閉功能組合鍵失效! http://delphi.ktop.com.tw/forum.asp?FORUM_ID=1402
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-24 08:51:29 IP:202.39.xxx.xxx 未訂閱
cashyy 大大: 我點選進入您所說的頁次 http://delphi.ktop.com.tw/forum.asp?FORUM_ID=1402 但是網頁訊息告訴我說〝沒權進入 〞, 這.... 我該如何做呢? -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-24 12:06:25 IP:61.228.xxx.xxx 未訂閱
casper97, 你可以使用RegisterHotKey的方式讓那ALT-TAB跟ALT-F4失效 RegisterHotKey(hwnd,1,MOD_ALT,VK_TAB); RegisterHotKey(hwnd,2,MOD_ALT,VK_F4);
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-24 15:09:50 IP:202.39.xxx.xxx 未訂閱
GeorgeKu 大大:    感謝您的回應, 我試過您的方式, 發現在 Win98 中只可以檔掉 Alt ┼ F4 、而 Alt ┼ Tab 卻仍有作用, 但在 Win2k 中就可以都檔掉,是否還需加些什麼動作才能夠都能檔掉 < > 再請問一下,如果是 > 謝謝!!< > 以下是我的程式碼: < class="code"> //-------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //-------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //-------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { RegisterHotKey(Form1->Handle,1,MOD_ALT,VK_TAB); RegisterHotKey(Form1->Handle,2,MOD_ALT,VK_F4); } //-------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { UnregisterHotKey(Form1->Handle,1); UnregisterHotKey(Form1->Handle,2); } //-------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form1->Close(); } //-------------------------------------------------------------------- -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-24 16:34:53 IP:140.127.xxx.xxx 未訂閱
引言: GeorgeKu 大大: 感謝您的回應, 我試過您的方式, 發現在 Win98 中只可以檔掉 Alt ┼ F4 、而 Alt ┼ Tab 卻仍有作用, 但在 Win2k 中就可以都檔掉,是否還需加些什麼動作才能夠都能檔掉 < > 再請問一下,如果是 > 謝謝!!< > 以下是我的程式碼: < class="code"> //-------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //-------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //-------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { RegisterHotKey(Form1->Handle,1,MOD_ALT,VK_TAB); RegisterHotKey(Form1->Handle,2,MOD_ALT,VK_F4); } //-------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { UnregisterHotKey(Form1->Handle,1); UnregisterHotKey(Form1->Handle,2); } //-------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form1->Close(); } //-------------------------------------------------------------------- -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
casper97您好! 檔案不知道要傳去那裡!(沒空間上傳) 所以還是貼上程式碼給您! < class="code"> //--------------------------------------------------------------------------- //目的:將預設關閉功能組合鍵失效 //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { //將預設關閉功能組合鍵失效 CanClose = !(::GetKeyState(VK_MENU) && ::GetKeyState(VK_F4)); } //--------------------------------------------------------------------------- //.h //--------------------------------------------------------------------------- #ifndef Unit2H #define Unit2H //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp> #include #include #include //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TStaticText *StaticText1; void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-24 17:24:49 IP:202.39.xxx.xxx 未訂閱
GeorgeKu 大大:    感謝您的幫忙,您回應的程式碼我已試過, 可以成功的檔掉 Alt ┼ F4  但是其他的功能鍵
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-24 18:15:45 IP:211.75.xxx.xxx 未訂閱
引言: GeorgeKu 大大: 感謝您的幫忙,您回應的程式碼我已試過, 可以成功的檔掉 Alt ┼ F4 但是其他的功能鍵 >< face="Verdana, Arial, Helvetica"> 您好!我是cashyy啦! 請參考這一篇,裡面有虛擬按鍵對照表
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-24 18:29:09 IP:202.39.xxx.xxx 未訂閱
cashyy 大大:    〝真歹勢 〞!! 程式不會寫就算了, 連人都會搞錯, 真是..... < > 您的建議我會找時間試試! 萬分感謝! < > -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-25 13:27:30 IP:61.228.xxx.xxx 未訂閱
casper97, 手頭上的2部電腦,一個是裝XP,另一個是2000,所以沒辦法測試在98的情況下,至於在2000及XP要控制CTRL ALT DEL,這個部分看起來挺麻煩的,在討論區裡可以找到相關的資料.
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-25 16:53:15 IP:202.39.xxx.xxx 未訂閱
感謝 GeorgeKu 和 cashyy 大大:    我的問題雖然沒完全解決, 但是已有解決的方向, 對於兩位大大的幫忙, 表示萬分感激, 有機會再向兩位請益。  -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
系統時間:2024-04-19 4:30:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!