• 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

Moderators: tungcan5diop, QUANITGROBEST

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 415
Joined: Sat 14/07/2007 10:06 pm
Location: Hà Nội
Been thanked: 1 time

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

Postby tienlbhoc » Wed 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

Code: Select all

  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

Code: Select all

  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/

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

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

Postby clarkkent » Wed 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
Posts: 415
Joined: Sat 14/07/2007 10:06 pm
Location: Hà Nội
Been thanked: 1 time

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

Postby tienlbhoc » Wed 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
Posts: 4
Joined: Tue 17/06/2008 9:11 pm
Location: Đà Nẵng

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

Postby bong_dem » Fri 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
Posts: 415
Joined: Sat 14/07/2007 10:06 pm
Location: Hà Nội
Been thanked: 1 time

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

Postby tienlbhoc » Fri 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/

User avatar
CoiBi
Thành viên chính thức
Thành viên chính thức
Posts: 40
Joined: Fri 20/07/2007 4:23 pm
Location: LRCO

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

Postby CoiBi » Sat 12/07/2008 11:06 am

bong_dem wrote: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
Posts: 415
Joined: Sat 14/07/2007 10:06 pm
Location: Hà Nội
Been thanked: 1 time

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

Postby tienlbhoc » Sat 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
Posts: 415
Joined: Sat 14/07/2007 10:06 pm
Location: Hà Nội
Been thanked: 1 time

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

Postby tienlbhoc » Sat 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
Posts: 490
Joined: Sat 26/05/2007 4:31 pm
Been thanked: 8 times

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

Postby neverland87 » Sat 12/07/2008 4:00 pm

tienlbhoc wrote: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
Posts: 415
Joined: Sat 14/07/2007 10:06 pm
Location: Hà Nội
Been thanked: 1 time

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

Postby tienlbhoc » Sat 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
Posts: 490
Joined: Sat 26/05/2007 4:31 pm
Been thanked: 8 times

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

Postby neverland87 » Sat 12/07/2008 5:18 pm

tienlbhoc wrote: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ổ
Posts: 62
Joined: Tue 17/01/2006 9:43 am
Location: Where Bill Gates beats the penguin just like the Batman
Contact:

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

Postby luungoc2005 » Tue 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.

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

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

Postby clarkkent » Fri 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
Posts: 168
Joined: Thu 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

Postby ShareToShare » Wed 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
Posts: 168
Joined: Thu 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

Postby ShareToShare » Wed 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 đỡ

User avatar
MATH-INFO
Thành viên năng nổ
Thành viên năng nổ
Posts: 55
Joined: Fri 15/07/2005 9:58 am
Location: TP.HCM, F12, Gò Vấp
Contact:

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

Postby MATH-INFO » Wed 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
Posts: 415
Joined: Sat 14/07/2007 10:06 pm
Location: Hà Nội
Been thanked: 1 time

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

Postby tienlbhoc » Wed 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/

User avatar
MATH-INFO
Thành viên năng nổ
Thành viên năng nổ
Posts: 55
Joined: Fri 15/07/2005 9:58 am
Location: TP.HCM, F12, Gò Vấp
Contact:

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

Postby MATH-INFO » Thu 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
Posts: 6
Joined: Thu 16/05/2013 5:21 pm
Been thanked: 2 times

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

Postby thuanchinapro07 » Wed 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


Return to “[.NET] Ứng dụng - Form và Control”

Who is online

Users browsing this forum: No registered users and 1 guest