2009-12-11 6 views
63

Gần đây tôi đã chuyển sang bố cục bàn phím Dvorak như một chút thử nghiệm. Một trong những phần khó nhất của quá trình chuyển đổi đã được xử lý bằng các phím nóng. Hầu hết các phím nóng được thiết kế với QWERTY trong tâm trí và, để làm cho vấn đề tồi tệ hơn, phím nóng dường như là bộ nhớ cực kỳ cơ bắp bị ràng buộc.Tại sao studio trực quan lại thu hút các sự kiện quan trọng trước autohotkey?

Thay vì học lại tất cả các phím nóng, tôi đã viết một kịch bản autohotkey dịch bố trí Dvorak trở lại QWERTY khi Ctrl, Alt, hoặc Win bấm phím nào kết hợp với các phím khác . Nó hoạt động đẹp ở mọi nơi tôi đã thử, ngoại trừ Visual Studio '08. Có vẻ như tổ hợp phím đang bị bắt trước khi autohotkey có thể dịch chúng.

Tại sao điều này xảy ra và làm cách nào để khắc phục sự cố này?

Dưới đây là một đoạn trích (từ đầu) của kịch bản của tôi:

; control + letter 
^;::^z 
^q::^x 
^j::^c 
^k::^v 

Cập nhật: Các kịch bản hoạt động tốt trên Win7 với AHK, vs08, và CodeRush tươi cài đặt. Máy tôi đang gặp sự cố đang chạy vista. Bất kỳ suy nghĩ về cách chẩn đoán thêm?

Cập nhật 2: Kịch bản hoạt động tốt với Vista và 2010 beta 2. Có vẻ là thứ gì đó chỉ với 08 + vista. Gonna thử một phiên bản mới của vs08 tối nay.

Trả lời

131

Aha! Tôi đã tìm ra nó. Nếu ahk và ứng dụng đích không chạy dưới cùng một đặc quyền (hoặc người dùng), ahk sẽ không chặn/mô phỏng các sự kiện bàn phím đúng cách. Trong trường hợp của tôi, studio trực quan được chạy với quyền quản trị (nâng cao) trong khi tập lệnh ahk được chạy như người dùng hiện đã đăng nhập.

Hoặc những điều sau đây giải quyết vấn đề:

  • Chạy cả vs và AHK như người dùng hiện
  • Biên soạn kịch bản và chạy cả vs và ứng dụng biên soạn as administrator
+3

Biên dịch và chạy với tư cách quản trị viên hoạt động hoàn hảo! – MEMark

+12

Chỉ muốn thêm rằng nó không phải về * các quyền * khác nhau mà thay vào đó, một tập lệnh AutoHotkey sẽ không hoạt động trên một ứng dụng đang chạy ở mức đặc quyền * cao hơn * Xem câu trả lời của tôi dưới đây –

+1

Bạn có thể thêm "Chạy dưới dạng quản trị viên" vào menu ngữ cảnh cho ahk. Nó tiết kiệm một bước biên dịch. http://www.howtogeek.com/howto/windows-vista/add-run -nhà quản trị viên-cho-autohotkey-scripts-in-windows-vista / –

0

cụm từ trong small print Điều này nghe có liên quan:

Nếu SendMode được sử dụng trong phần tự động thực thi (phần đầu của kịch bản), nó ảnh hưởng đến tất cả remappings. Tuy nhiên, kể từ khi remapping sử dụng Send {Blind} và vì chế độ SendPlay không hỗ trợ đầy đủ {Blind}, một số bản remapp có thể không hoạt động đúng trong chế độ SendPlay (đặc biệt là Control, Shift, Alt, và Win). Để giải quyết vấn đề này, hãy tránh SendPlay trong phần tự động thực hiện khi bạn có các bản remappings; sau đó sử dụng lệnh SendPlay so với Gửi ở những nơi khác trong suốt tập lệnh. Ngoài ra, bạn có thể dịch các bản remappings của bạn thành các phím nóng (như được mô tả bên dưới) để gọi SendEvent rõ ràng với Send.

+0

Thực tế đặt tập lệnh trong bất kỳ chế độ "gửi" nào không giúp được. : ( –

37

Just muốn thêm một vài điểm vào giải pháp được tìm thấy bởi bản thân OP.

1) Vấn đề không phải là với AHK và VS chạy với quyền khác nhau - nó chỉ là phím nóng được tạo ra bởi một kịch bản đang chạy trong một chế độ không phải quản trị sẽ không hoạt động trên các ứng dụng đang chạy trong quản trị chế độ, nhưng sẽ không có vấn đề gì nếu đó là cách khác.

2) Không cần thiết phải biên dịch tập lệnh, chỉ cần đặt autohotkey.exe để chạy trong chế độ quản trị (đó là những gì tôi làm), hoặc cách khác tạo lối tắt cho tập lệnh cụ thể và đặt nó luôn chạy chế độ quản trị. (btw, chỉ để chỉ ra, không có hiệu suất đạt được bằng cách chạy một phiên bản biên dịch của một kịch bản AHK, bởi vì mã vẫn còn được giải thích - nó chỉ là bây giờ các thông dịch viên được nhúng trong thực thi được tạo ra)