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

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
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: Thứ 7 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ài by tienlbhoc »

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 tất cả

        protected override bool ProcessDialogKey(Keys keyData)        {            switch(keyData)            {                case Keys.Alt | Keys.D:                    MessageBox.Show("You are stupid");                    return true;                    break;                // some more cases...                                 }            return false;        }
Nếu không thích dùng swich thì dùng if như sau

Mã: Chọn tất cả

        protected override bool ProcessDialogKey(Keys keyData)        {            if (keyData == (Keys.Alt | Keys.D))            {                MessageBox.Show("You are stupid");                return true;            }            else return false;        }
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 thành viên
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: Thứ 4 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 32 times
Tiếp xúc:

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

Gửi bài by clarkkent »

Ủ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: Thứ 7 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ài by tienlbhoc »

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: Thứ 3 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ài by bong_dem »

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: Thứ 7 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ài by tienlbhoc »

Ừ 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 thành viên
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: Thứ 6 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ài by CoiBi »

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: Thứ 7 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ài by tienlbhoc »

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: Thứ 7 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ài by tienlbhoc »

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: Thứ 7 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

Gửi bài by neverland87 »

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: Thứ 7 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ài by tienlbhoc »

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: Thứ 7 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

Gửi bài by neverland87 »

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: Thứ 3 17/01/2006 9:43 am
Đến từ: Where Bill Gates beats the penguin just like the Batman
Tiếp xúc:

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

Gửi bài by luungoc2005 »

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 thành viên
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: Thứ 4 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 32 times
Tiếp xúc:

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

Gửi bài by clarkkent »

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: 168
Ngày tham gia: Thứ 5 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ài by ShareToShare »

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: 168
Ngày tham gia: Thứ 5 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ài by ShareToShare »

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 thành viên
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: Thứ 6 15/07/2005 9:58 am
Đến từ: TP.HCM, F12, Gò Vấp
Tiếp xúc:

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

Gửi bài by MATH-INFO »

@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ổ).
"The essential in the existence of a man like me is what he thinks and how he thinks, not what he does or suffers."
[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: Thứ 7 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ài by tienlbhoc »

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 thành viên
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: Thứ 6 15/07/2005 9:58 am
Đến từ: TP.HCM, F12, Gò Vấp
Tiếp xúc:

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

Gửi bài by MATH-INFO »

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.
"The essential in the existence of a man like me is what he thinks and how he thinks, not what he does or suffers."
[img]http://vn47.com/DKhanh/Images/signature.png[/img]
thuanchinapro07
Bài viết: 6
Ngày tham gia: Thứ 5 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

Gửi bài by thuanchinapro07 »

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
Đăng trả lời

Quay về