• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tạo phím nóng trong dotnet không thèm đụng hook

Các thủ thuật liên quan đến ứng dụng, biểu mẫu và control

Điều hành viên: tungcan5diop, QUANITGROBEST

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi tienlbhoc » T.Tư 09/07/2008 12:50 pm

Thủ thuật: Tạo phím nóng trong dotnet
Tác giả: tienlbhoc và hieubm(cviet) đồng tác giả tìm kiếm
Mô tả: không thèm đụng hook


Tất nhiên đây chỉ có tác dụng cục bộ trong chương trình thôi nếu cuốn cửa sổ xuống thì không được . Cách làm cực kỳ đơn giản là nạp chồng phương thức ProcessDialogKey của form , bạn chỉ cần tạo form và paste đoạn code đây vào để xem , dù ở bất kỳ control nào trên form thì gõ alt + D sẽ luôn cho thông báo "You are stupid" :D

Mã: Chọn hết

  1.        protected override bool ProcessDialogKey(Keys keyData)
  2.         {
  3.             switch(keyData)
  4.             {
  5.                 case Keys.Alt | Keys.D:
  6.                     MessageBox.Show("You are stupid");
  7.                     return true;
  8.                     break;
  9.                 // some more cases...                    
  10.             }
  11.             return false;
  12.         }

Nếu không thích dùng swich thì dùng if như sau

Mã: Chọn hết

  1.        protected override bool ProcessDialogKey(Keys keyData)
  2.         {
  3.             if (keyData == (Keys.Alt | Keys.D))
  4.             {
  5.                 MessageBox.Show("You are stupid");
  6.                 return true;
  7.             }
  8.             else return false;
  9.         }


Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi clarkkent » T.Tư 09/07/2008 2:49 pm

Ủa bên C# không có sự kiện Form_KeyPress à :-/
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi tienlbhoc » T.Tư 09/07/2008 3:43 pm

có nhưng nếu con trỏ ở trong 1 text box ở trong form thì thử xem có bắt được không nhé ;))
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

bong_dem
Bài viết: 4
Ngày tham gia: T.Ba 17/06/2008 9:11 pm
Đến từ: Đà Nẵng

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi bong_dem » T.Sáu 11/07/2008 8:37 pm

Có thuộc tính keypreview mà :|
Bóng đêm đã trở lại và nợi hại gấp trăm lần >:)

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi tienlbhoc » T.Sáu 11/07/2008 9:43 pm

Ừ há, không biết cái này :D , mà coi như 1 cách khác , có sao đâu :D
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

Hình đại diện của người dùng
CoiBi
Thành viên chính thức
Thành viên chính thức
Bài viết: 40
Ngày tham gia: T.Sáu 20/07/2007 4:23 pm
Đến từ: LRCO

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi CoiBi » T.Bảy 12/07/2008 11:06 am

bong_dem đã viết:Có thuộc tính keypreview mà :|

Thử cho cursor vào DataGridView xem
(^_^) Khôn 3 năm dại 1 giờ(^_^)
Biết zậy dại sớm khỏi chờ 3 năm

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi tienlbhoc » T.Bảy 12/07/2008 11:28 am

tớ đã thử , thấy keypreview vẫn nhận , nó nhận cả khi dùng phím lên xuống trái phải ở trong text , còn cái của tớ thì không :(
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi tienlbhoc » T.Bảy 12/07/2008 2:09 pm

Thử với webbrower , kết quả , dùng keypreview không ăn thua đâu , tóm lại cách của tui vẫn là best :D. Dù không bắt được các phím lên xuống nhưng có phím nóng nào cần tới nó đâu :D
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi neverland87 » T.Bảy 12/07/2008 4:00 pm

tienlbhoc đã viết:tớ đã thử , thấy keypreview vẫn nhận , nó nhận cả khi dùng phím lên xuống trái phải ở trong text , còn cái của tớ thì không :(

best mà thế đó >:) . Hook mới là best >:)
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi tienlbhoc » T.Bảy 12/07/2008 4:15 pm

Dotnet tạo ra nhiều lớp vậy , cốt yếu để thay thế hook , chạy không phụ thuộc hệ điều hành mà (bác ne học nhiều thế mà không biết à) . Vì vây hạn chế đến mức nào hay mức đó . Không cứ phải chạy linux mới là hệ điều hành mới , biết đâu win mới cũng sẽ có thay đổi . Nhiều ứng dụng chập cheng vì winvista đó . unikey chặn phím thôi mà cũng có rắc rối với vista . hook này cũng chặn phím , chắc gì đã thoát . Rồi sắp có win 7 nữa .
Phù , nói tóm lại , cách này nhanh , bổ , rẻ , mang phong cách dotnet , tiêu biểu cho tư tưởng dotnet , nói chung là best :))
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi neverland87 » T.Bảy 12/07/2008 5:18 pm

tienlbhoc đã viết:Dotnet tạo ra nhiều lớp vậy , cốt yếu để thay thế hook

Trong khi chưa có lớp nào hỗ trợ bắt phím thì tạm thời dùng hook. Quan trọng là đạt được kết quả, người dùng họ muốn anh bắt phím ở các ứng dụng khác, họ có quan tâm anh dùng hook hay ko dùng hook hay không đâu :D
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

luungoc2005
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 62
Ngày tham gia: T.Ba 17/01/2006 9:43 am
Đến từ: Where Bill Gates beats the penguin just like the Batman
Liên hệ:

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi luungoc2005 » T.Ba 16/09/2008 6:57 pm

có sẵn cả rùi, registerhotkey+unregisterhotkey...
A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi clarkkent » T.Sáu 10/10/2008 8:48 am

Có cái nào khác ngoài 2 cái đó không, không biết sao đưa vô 1 số chương trình nó bị đơ... :D
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

ShareToShare
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 167
Ngày tham gia: T.Năm 27/11/2008 4:04 pm
Has thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi ShareToShare » T.Tư 04/03/2009 4:17 pm

theo tui đánh giá bài viết của bác @tienlbhoc hay
hay ở chổ nào thì khi dùng userControl thì sẽ rõ , vì userControl ko có KeyPreview

ShareToShare
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 167
Ngày tham gia: T.Năm 27/11/2008 4:04 pm
Has thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi ShareToShare » T.Tư 08/04/2009 10:16 am

tôi đang viết hotkey trên userControl giống như bác @tienlbhoc nói ở trên . Nói chung nó chạy ổn . Nhưng chỉ khi nào focus nó nằm trên userControl thì mới dùng hotkey được , còn nếu nó nằm trên textbox của form (ko phải của userControl đâu nha) thì hotkey lại gọi ko được . Mong mọi người giúp đỡ

Hình đại diện của người dùng
MATH-INFO
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 55
Ngày tham gia: T.Sáu 15/07/2005 9:58 am
Đến từ: TP.HCM, F12, Gò Vấp
Liên hệ:

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi MATH-INFO » T.Tư 08/04/2009 2:28 pm

@Tienlbhoc: Trước giờ bạn tạo hotkey toàn dùng hook à, đao to búa lớn thế, Lên google search coi người ta tạo hot key có dùng hook không nha... (tất nhiên là phải có tác dụng trên toàn bộ mọi cửa sổ).
[size=100][color=#0000FF][b]"The essential in the existence of a man like me is what he thinks and how he thinks, not what he does or suffers."[/b][/color][/size]
[img]http://vn47.com/DKhanh/Images/signature.png[/img]

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi tienlbhoc » T.Tư 08/04/2009 8:33 pm

cái đăng ký hotkey biết rồi , nhưng cái đó run 64bit trục trặc đó bác, đã xét hotkey toàn cục thì hook là lành nhất
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

Hình đại diện của người dùng
MATH-INFO
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 55
Ngày tham gia: T.Sáu 15/07/2005 9:58 am
Đến từ: TP.HCM, F12, Gò Vấp
Liên hệ:

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi MATH-INFO » T.Năm 09/04/2009 10:12 am

Hook toàn cục để bắt hotkey rất khó khăn, phải xử lý keyup key down rất nhiêu khê. Chưa kể không thể giải quyết được đụng độ xảy ra nếu hotkey của mình trùng với một chương trình nào đó khác.

Chỉ nên sử dụng khi muốn khóa máy và chỉ cho unlock khi nhấn hotkey.
[size=100][color=#0000FF][b]"The essential in the existence of a man like me is what he thinks and how he thinks, not what he does or suffers."[/b][/color][/size]
[img]http://vn47.com/DKhanh/Images/signature.png[/img]

thuanchinapro07
Bài viết: 6
Ngày tham gia: T.Năm 16/05/2013 5:21 pm
Been thanked: 2 time

Re: Tạo phím nóng trong dotnet không thèm đụng hook

Gửi bàigửi bởi thuanchinapro07 » T.Tư 22/05/2013 5:18 pm

function ProcessDialogKey là gốc rễ để bắt event bàn phím . khi override bạn có thể bắt được sự kiện khi gõ 1 phím bất kì
Nó được gọi đầu tiên
thứ tự gọi các function khi gõ phím. (khi xử lý gõ bản phím)
1. ProcessDialogKey
2. KeyDown
3. KeyPress

p/s: với VB cũng tương tự.
Nếu bạn hay customize các control đôi khi bạn sẽ hay phải override function ProcessDialogKey này


Quay về “[.NET] Ứng dụng - Form và Control”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách