Bạn đang xem trang 1 / 1 trang

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

Đã gửi: Thứ 4 09/07/2008 12:50 pm
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;        }

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

Đã gửi: Thứ 4 09/07/2008 2:49 pm
by clarkkent
Ủa bên C# không có sự kiện Form_KeyPress à :-/

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

Đã gửi: Thứ 4 09/07/2008 3:43 pm
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é ;))

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

Đã gửi: Thứ 6 11/07/2008 8:37 pm
by bong_dem
Có thuộc tính keypreview mà :|

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

Đã gửi: Thứ 6 11/07/2008 9:43 pm
by tienlbhoc
Ừ há, không biết cái này :D , mà coi như 1 cách khác , có sao đâu :D

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

Đã gửi: Thứ 7 12/07/2008 11:06 am
by CoiBi
bong_dem đã viết:Có thuộc tính keypreview mà :|
Thử cho cursor vào DataGridView xem

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

Đã gửi: Thứ 7 12/07/2008 11:28 am
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 :(

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

Đã gửi: Thứ 7 12/07/2008 2:09 pm
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

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

Đã gửi: Thứ 7 12/07/2008 4:00 pm
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 >:)

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

Đã gửi: Thứ 7 12/07/2008 4:15 pm
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 :))

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

Đã gửi: Thứ 7 12/07/2008 5:18 pm
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

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

Đã gửi: Thứ 3 16/09/2008 6:57 pm
by luungoc2005
có sẵn cả rùi, registerhotkey+unregisterhotkey...

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

Đã gửi: Thứ 6 10/10/2008 8:48 am
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

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

Đã gửi: Thứ 4 04/03/2009 4:17 pm
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

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

Đã gửi: Thứ 4 08/04/2009 10:16 am
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 đỡ

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

Đã gửi: Thứ 4 08/04/2009 2:28 pm
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ổ).

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

Đã gửi: Thứ 4 08/04/2009 8:33 pm
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

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

Đã gửi: Thứ 5 09/04/2009 10:12 am
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.

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

Đã gửi: Thứ 4 22/05/2013 5:18 pm
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