<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ärger mit Keyhook]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe zuerst alle Keypresses mit GetKeyState abgefragt.<br />
Da dies ziemlich unprofessionell ist, habe ich eine eigene<br />
Hotkey-klasse geschrieben, die mit einem Keyboard-Hook funktioniert.</p>
<p>Hier der code:</p>
<pre><code class="language-cpp">//Setup
[...]
hook_keys  = SetWindowsHookEx(WH_KEYBOARD_LL,LLKeyboardProc,GetModuleHandle(0),0);
[...]

LRESULT CALLBACK LLKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) 
{
	PKBDLLHOOKSTRUCT hookstruct;

	if (nCode == HC_ACTION) 
	{
		switch (wParam) 
		{
		case WM_KEYDOWN:  case WM_SYSKEYDOWN:
		case WM_KEYUP:    case WM_SYSKEYUP:

			hookstruct = (PKBDLLHOOKSTRUCT) lParam;

			if(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
			{
				//Register Keypress for Hotkey system
				Hotkeys-&gt;ModifyButtonState(hookstruct-&gt;vkCode,GetTickCount());
			}
			else if(wParam == WM_KEYUP || wParam == WM_SYSKEYUP)
			{
				//Register Keyrelease for Hotkey system
				Hotkeys-&gt;ModifyButtonState(hookstruct-&gt;vkCode,false);
			}

			//Block windows keys
			if(settings.blockwindowskeys &amp;&amp; (hookstruct-&gt;vkCode == 0x5B || hookstruct-&gt;vkCode == 0x5C))  /* Left / Right WinButton */
				return 1;
			else
				return CallNextHookEx(NULL, nCode, wParam, lParam);
		}
	}
	return CallNextHookEx(NULL, nCode, wParam, lParam);
}
</code></pre>
<p>Das Problem:<br />
Manche user beschweren sich, dass mein Programm zwar super funktioniert. Allerdings andere Hotkey Programme, die auch auf die Tastatur zugreifen, nicht mehr funktionieren, wenn mein Tool läuft. (Die anderen Programme reagieren nicht mehr auf die in ihnen festgelegten Hotkeys)</p>
<p>Bei Alternativen ist zu beachten, dass die hotkeys auch funktionieren sollen, wenn mein Programm z.B. im Tray ist.</p>
<p>Vielen Dank schonmal für eure Hilfe!</p>
<p>Gruß<br />
Listing</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235890/ärger-mit-keyhook</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Apr 2026 00:47:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235890.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Mar 2009 23:13:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ärger mit Keyhook on Sat, 07 Mar 2009 23:14:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe zuerst alle Keypresses mit GetKeyState abgefragt.<br />
Da dies ziemlich unprofessionell ist, habe ich eine eigene<br />
Hotkey-klasse geschrieben, die mit einem Keyboard-Hook funktioniert.</p>
<p>Hier der code:</p>
<pre><code class="language-cpp">//Setup
[...]
hook_keys  = SetWindowsHookEx(WH_KEYBOARD_LL,LLKeyboardProc,GetModuleHandle(0),0);
[...]

LRESULT CALLBACK LLKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) 
{
	PKBDLLHOOKSTRUCT hookstruct;

	if (nCode == HC_ACTION) 
	{
		switch (wParam) 
		{
		case WM_KEYDOWN:  case WM_SYSKEYDOWN:
		case WM_KEYUP:    case WM_SYSKEYUP:

			hookstruct = (PKBDLLHOOKSTRUCT) lParam;

			if(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
			{
				//Register Keypress for Hotkey system
				Hotkeys-&gt;ModifyButtonState(hookstruct-&gt;vkCode,GetTickCount());
			}
			else if(wParam == WM_KEYUP || wParam == WM_SYSKEYUP)
			{
				//Register Keyrelease for Hotkey system
				Hotkeys-&gt;ModifyButtonState(hookstruct-&gt;vkCode,false);
			}

			//Block windows keys
			if(settings.blockwindowskeys &amp;&amp; (hookstruct-&gt;vkCode == 0x5B || hookstruct-&gt;vkCode == 0x5C))  /* Left / Right WinButton */
				return 1;
			else
				return CallNextHookEx(NULL, nCode, wParam, lParam);
		}
	}
	return CallNextHookEx(NULL, nCode, wParam, lParam);
}
</code></pre>
<p>Das Problem:<br />
Manche user beschweren sich, dass mein Programm zwar super funktioniert. Allerdings andere Hotkey Programme, die auch auf die Tastatur zugreifen, nicht mehr funktionieren, wenn mein Tool läuft. (Die anderen Programme reagieren nicht mehr auf die in ihnen festgelegten Hotkeys)</p>
<p>Bei Alternativen ist zu beachten, dass die hotkeys auch funktionieren sollen, wenn mein Programm z.B. im Tray ist.</p>
<p>Vielen Dank schonmal für eure Hilfe!</p>
<p>Gruß<br />
Listing</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675947</guid><dc:creator><![CDATA[Listing]]></dc:creator><pubDate>Sat, 07 Mar 2009 23:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to Ärger mit Keyhook on Sat, 07 Mar 2009 23:27:00 GMT]]></title><description><![CDATA[<p>Wo steht, daß man CallNextHookEx() NULL als ersten Parameter übergeben darf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675951</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sat, 07 Mar 2009 23:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to Ärger mit Keyhook on Sat, 07 Mar 2009 23:46:11 GMT]]></title><description><![CDATA[<p>Hui, ist das das Problem?</p>
<p>Vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675958</guid><dc:creator><![CDATA[Listing]]></dc:creator><pubDate>Sat, 07 Mar 2009 23:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Ärger mit Keyhook on Sun, 08 Mar 2009 01:56:32 GMT]]></title><description><![CDATA[<p>Der erste param wird</p>
<p>MSDN schrieb:</p>
<blockquote>
<p>Windows NT/XP/2003: Ignored.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1675981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675981</guid><dc:creator><![CDATA[Halbwissen]]></dc:creator><pubDate>Sun, 08 Mar 2009 01:56:32 GMT</pubDate></item><item><title><![CDATA[Reply to Ärger mit Keyhook on Sun, 08 Mar 2009 11:43:38 GMT]]></title><description><![CDATA[<p>Habe das geändert aber es gibt immernoch Probleme <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676052</guid><dc:creator><![CDATA[Listing]]></dc:creator><pubDate>Sun, 08 Mar 2009 11:43:38 GMT</pubDate></item><item><title><![CDATA[Reply to Ärger mit Keyhook on Sun, 08 Mar 2009 12:37:19 GMT]]></title><description><![CDATA[<p>Halbwissen schrieb:</p>
<blockquote>
<p>Der erste param wird</p>
<p>MSDN schrieb:</p>
<blockquote>
<p>Windows NT/XP/2003: Ignored.</p>
</blockquote>
</blockquote>
<p>Ah, richtig.<br />
In meiner MSDN-Dokumentation steht das noch nicht drin. [/berechtigte_ausrede]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676081</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sun, 08 Mar 2009 12:37:19 GMT</pubDate></item></channel></rss>