दिलचस्प पोस्ट
मैं कैसे asm.net सीपीयू से JSON.NET MVC नियंत्रक तरीकों से सीमक कैस कर सकते हैं? एक धारा से लगातार जोड़े इकट्ठा करें बिगइंटेगर स्विफ्ट में बराबर है? इकाई फ़्रेमवर्क async कार्रवाई को पूरा करने के लिए दस गुना लंबा समय लगता है एक div में हर 3 divs लपेटें GUID के लिए SCOPE_IDENTITY ()? MySQL में लॉकिंग के बिना चयन करने का कोई भी तरीका? जावा में कीवर्ड "यह" का प्रयोग करना "Git mergetool" के साथ विलय MVC मॉडल से एक बाइट सरणी छवि प्रदर्शित करने के लिए कैसे .NET में जेनेरिक विधियों में उनके रिटर्न प्रकार अनुमानित नहीं हो सकते। क्यूं कर? सूची फ़िल्टरिंग: सूची समझ बनाम लैम्ब्डा + फिल्टर SQL सर्वर पर Varchar (MAX) बनाम TEXT का उपयोग करना $ ("# Id") के बीच अंतर। लोड और $। एजेक्स? क्या मैं छवि को 404 त्रुटियों को लॉग करने से क्रोम डेवलपर उपकरण कंसोल को रोक सकता हूं?

विंडोज में जेएनए कुंजीपटल हुक

मैंने विंडोज़ में कीबोर्ड हुक को स्थापित करने के लिए एक जेएनए कोड डाल दिया है (जेएनए उदाहरणों का उपयोग करते हुए)। कोड संकलित और सब कुछ, और मुझे हुक स्थापित हो गया (मैं सफलतापूर्वक हुक को संभालता हूं), मैं भी सफलतापूर्वक हुक को अनइंस्टॉल कर सकता हूं हालांकि, जब मैं कीबोर्ड पर कोई कुंजी दबाता हूं तो कॉलबैक कभी नहीं बुलाया जाता यह मेरा कोड है (इसमें से अधिकतर प्रकार की परिभाषाएं जेएनए उदाहरण से मिली हैं, मेरे भाग के लिए सीधे "मुख्य" पर जाएं)

import com.sun.jna.IntegerType; import com.sun.jna.Pointer; import com.sun.jna.PointerType; import com.sun.jna.Structure; import com.sun.jna.FromNativeContext; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.StdCallLibrary; import com.sun.jna.win32.StdCallLibrary.StdCallCallback; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.Library; import com.sun.jna.win32.W32APITypeMapper; import com.sun.jna.win32.W32APIFunctionMapper; import java.util.Map; import java.util.HashMap; public class HelloWorld { static Map UNICODE_OPTIONS = new HashMap() { { put("type-mapper", W32APITypeMapper.UNICODE); put("function-mapper", W32APIFunctionMapper.UNICODE); } }; public static class LONG_PTR extends IntegerType { public LONG_PTR() { this(0); } public LONG_PTR(long value) { super(Pointer.SIZE, value); } } public static class UINT_PTR extends IntegerType { public UINT_PTR() { super(Pointer.SIZE); } public UINT_PTR(long value) { super(Pointer.SIZE, value); } public Pointer toPointer() { return Pointer.createConstant(longValue()); } } public static class ULONG_PTR extends IntegerType { public ULONG_PTR() { this(0); } public ULONG_PTR(long value) { super(Pointer.SIZE, value); } } public static class LRESULT extends LONG_PTR { public LRESULT() { this(0); } public LRESULT(long value) { super(value); } } public static class WPARAM extends UINT_PTR { public WPARAM() { this(0); } public WPARAM(long value) { super(value); } } public static class LPARAM extends LONG_PTR { public LPARAM() { this(0); } public LPARAM(long value) { super(value); } } public static class KBDLLHOOKSTRUCT extends Structure { public int vkCode; public int scanCode; public int flags; public int time; public ULONG_PTR dwExtraInfo; } static HANDLE INVALID_HANDLE_VALUE = new HANDLE() { { super.setPointer(Pointer.createConstant(-1)); } public void setPointer(Pointer p) { throw new UnsupportedOperationException("Immutable reference"); } }; public static class HANDLE extends PointerType { public Object fromNative(Object nativeValue, FromNativeContext context) { Object o = super.fromNative(nativeValue, context); if (INVALID_HANDLE_VALUE.equals(o)) return INVALID_HANDLE_VALUE; return o; } } public static class HHOOK extends HANDLE { } public static class HINSTANCE extends HANDLE { } public static class HMODULE extends HINSTANCE { } public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32)Native.loadLibrary("user32", User32.class, UNICODE_OPTIONS); static final int WH_KEYBOARD_LL = 13; public static interface HOOKPROC extends StdCallCallback { LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam); } HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HMODULE hMod, int dwThreadId); LRESULT CallNextHookEx(HHOOK idHook, int nCode, WPARAM wParam, LPARAM lParam); LRESULT CallNextHookEx(HHOOK idHook, int nCode, WPARAM wParam, Pointer lParam); boolean UnhookWindowsHookEx(HHOOK idHook); } public interface Kernel32 extends StdCallLibrary { Kernel32 INSTANCE = (Kernel32)Native.loadLibrary("kernel32", Kernel32.class, UNICODE_OPTIONS); HMODULE GetModuleHandle(String name); } public static HHOOK hHook; public static User32.HOOKPROC lpfn; public static volatile boolean quit = false; public static void main(String[] args) throws Exception { HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null); System.out.println(hMod); lpfn = new User32.HOOKPROC() { public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam) { System.out.println("here"); quit = true; return User32.INSTANCE.CallNextHookEx(hHook, nCode, wParam, lParam.getPointer()); } }; hHook = User32.INSTANCE.SetWindowsHookEx(User32.WH_KEYBOARD_LL, lpfn, hMod, 0); System.out.println(hHook); if(hHook != null) System.out.println("Keyboard hooked, type anything to quit"); while(!quit) { Thread.sleep(100); } if(User32.INSTANCE.UnhookWindowsHookEx(hHook)) System.out.println("Unhooked"); } } 

मैंने कुंजीपटल / माउस हुक को कई बार सी ++ और सी # का उपयोग करते हुए अतीत में किया है जावा के साथ यह मेरा पहला प्रयास है, और मुझे नहीं पता कि क्या मैं पुस्तकालय को आयात और मैप करने के लिए सही तरीके से मैप करता हूं। कोई विचार?

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "विंडोज में जेएनए कुंजीपटल हुक"

ऐसा प्रतीत होता है कि आपको GetMessage या PeekMessage को कॉल करने की आवश्यकता है, जो अजीब है – यह हुक या लो लेवेलकेबोर्ड बोर्ड के लिए दस्तावेज़ में उल्लिखित नहीं है मुझे एपीआई के इस हिस्से के बारे में पर्याप्त कारण नहीं पता है।

मैंने बस उदाहरण वर्गों का इस्तेमाल किया:

 import com.sun.jna.examples.win32.*; public class Callback { public static User32.HHOOK hHook; public static User32.LowLevelKeyboardProc lpfn; public static volatile boolean quit = false; public static void main(String[] args) throws Exception { W32API.HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null); lpfn = new User32.LowLevelKeyboardProc() { public W32API.LRESULT callback(int nCode, W32API.WPARAM wParam, User32.KBDLLHOOKSTRUCT lParam) { System.out.println("here"); quit = true; return User32.INSTANCE.CallNextHookEx(hHook, nCode, wParam, lParam .getPointer()); } }; hHook = User32.INSTANCE.SetWindowsHookEx(User32.WH_KEYBOARD_LL, lpfn, hMod, 0); if (hHook == null) return; User32.MSG msg = new User32.MSG(); while (!quit) { User32.INSTANCE.PeekMessage(msg, null, 0, 0, 0); Thread.sleep(100); } if (User32.INSTANCE.UnhookWindowsHookEx(hHook)) System.out.println("Unhooked"); } } 

एक न्यूनतम उदाहरण:

 import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef.HINSTANCE; import com.sun.jna.platform.win32.WinDef.LPARAM; import com.sun.jna.platform.win32.WinDef.LRESULT; import com.sun.jna.platform.win32.WinDef.WPARAM; import com.sun.jna.platform.win32.WinUser.HOOKPROC; public class MainTestKeyHook { public static void main(String[] args) throws Exception { HOOKPROC hookProc = new HOOKPROC_bg(); HINSTANCE hInst = Kernel32.INSTANCE.GetModuleHandle(null); User32.HHOOK hHook = User32.INSTANCE.SetWindowsHookEx(User32.WH_KEYBOARD_LL, hookProc, hInst, 0); if (hHook == null) return; User32.MSG msg = new User32.MSG(); System.err.println("Please press any key ...."); while (true) { User32.INSTANCE.GetMessage(msg, null, 0, 0); } } } class HOOKPROC_bg implements HOOKPROC { public HOOKPROC_bg() { } public LRESULT callback(int nCode, WPARAM wParam, LPARAM lParam) { System.err.println("callback bbbnhkilhjkibh nCode: " + nCode); return new LRESULT(0); } }