<?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[CreateRemoteThread]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe per CreateRemoteThread eine DLL in einen Prozess injiziert und will jetzt während die DLL_PROCESS_ATTACH Nachricht verarbeitet wird, einen lokalen Keyboard Hook auf einen Thread von diesem Prozess installieren, aber die KeyboardHookProc wird nie aufgerufen. Die ThreadId ist richtig, das hab ich in Spy++ nachgeschaut..hab ich irgendwas falsch verstanden oder wieso geht das nicht?</p>
<pre><code class="language-cpp">HHOOK hhkHook;

//
// KeyboardHookProc
//

LRESULT CALLBACK KeyboardHookProc( int nCode, WPARAM wParam, LPARAM lParam )
{
	MessageBox( NULL, &quot;KeyboardHookProc&quot;, &quot;&quot;, 0 );
	return CallNextHookEx( hhkHook, nCode, wParam, lParam );
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	HWND	hWndEDIT;
	DWORD	dwThreadId;
	char szMsg[64];

	switch(ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			hWndEDIT = FindWindow( NULL, &quot;MainEditWnd&quot; );
			if( !hWndEDIT )
				break;

			dwThreadId = GetWindowThreadProcessId( hWndEDIT, NULL );
			hhkHook = SetWindowsHookEx( WH_KEYBOARD, KeyboardHookProc, NULL, dwThreadId );
			if( hhkHook == NULL )
			{
				MessageBox( NULL, &quot;SetWindowsHookEx failed&quot;, &quot;Error&quot;, 0 );
				return FALSE;
			}

			sprintf( szMsg, &quot;Keyboard Hook attached to Thread 0x%x&quot;, dwThreadId );
			MessageBox( NULL, szMsg, &quot;DLL_PROCESS_ATTACH&quot;, 0 );
			break;

		case DLL_PROCESS_DETACH:
			UnhookWindowsHookEx( hhkHook );
			sprintf( szMsg, &quot;Keyboard Hook detached&quot; );
			MessageBox( NULL, szMsg, &quot;DLL_PROCESS_DETACH&quot;, 0 );
			break;
	}
    return TRUE;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/117215/createremotethread</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 14:41:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/117215.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Aug 2005 13:42:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CreateRemoteThread on Thu, 04 Aug 2005 13:42:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe per CreateRemoteThread eine DLL in einen Prozess injiziert und will jetzt während die DLL_PROCESS_ATTACH Nachricht verarbeitet wird, einen lokalen Keyboard Hook auf einen Thread von diesem Prozess installieren, aber die KeyboardHookProc wird nie aufgerufen. Die ThreadId ist richtig, das hab ich in Spy++ nachgeschaut..hab ich irgendwas falsch verstanden oder wieso geht das nicht?</p>
<pre><code class="language-cpp">HHOOK hhkHook;

//
// KeyboardHookProc
//

LRESULT CALLBACK KeyboardHookProc( int nCode, WPARAM wParam, LPARAM lParam )
{
	MessageBox( NULL, &quot;KeyboardHookProc&quot;, &quot;&quot;, 0 );
	return CallNextHookEx( hhkHook, nCode, wParam, lParam );
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	HWND	hWndEDIT;
	DWORD	dwThreadId;
	char szMsg[64];

	switch(ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			hWndEDIT = FindWindow( NULL, &quot;MainEditWnd&quot; );
			if( !hWndEDIT )
				break;

			dwThreadId = GetWindowThreadProcessId( hWndEDIT, NULL );
			hhkHook = SetWindowsHookEx( WH_KEYBOARD, KeyboardHookProc, NULL, dwThreadId );
			if( hhkHook == NULL )
			{
				MessageBox( NULL, &quot;SetWindowsHookEx failed&quot;, &quot;Error&quot;, 0 );
				return FALSE;
			}

			sprintf( szMsg, &quot;Keyboard Hook attached to Thread 0x%x&quot;, dwThreadId );
			MessageBox( NULL, szMsg, &quot;DLL_PROCESS_ATTACH&quot;, 0 );
			break;

		case DLL_PROCESS_DETACH:
			UnhookWindowsHookEx( hhkHook );
			sprintf( szMsg, &quot;Keyboard Hook detached&quot; );
			MessageBox( NULL, szMsg, &quot;DLL_PROCESS_DETACH&quot;, 0 );
			break;
	}
    return TRUE;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/845702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/845702</guid><dc:creator><![CDATA[Commander88]]></dc:creator><pubDate>Thu, 04 Aug 2005 13:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to CreateRemoteThread on Sat, 06 Aug 2005 07:16:31 GMT]]></title><description><![CDATA[<p>Prüfe zuerst einmal ob deine DLL in einem Testprogram von dir funktioniert.<br />
Dort kanst du debuggen. Danach prüfe einmal ob die DLL geladen wird.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> Mit Visual-Studio an einen Prozess attachen<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> Unter Debug-Module nach sehen ob die DLL geladen wurde</p>
<p>Meine Home-Page<br />
[url]<br />
<a href="http://members.inode.at/anton.zechner/az/index.html" rel="nofollow">http://members.inode.at/anton.zechner/az/index.html</a><br />
[/url]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/846857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/846857</guid><dc:creator><![CDATA[AZ]]></dc:creator><pubDate>Sat, 06 Aug 2005 07:16:31 GMT</pubDate></item></channel></rss>