SendMessage übergibt nur fragezeichen/chinesische zeichen



  • Juchuu
    Ich habe ein problem mit der WinApi und der Sendmessage Funktion, ich versuche einen bestimmten text an eine editbox eines anderen fenster zu senden, über dem ich gerade die maus habe.
    Das senden von text funktioniert auch, leider schickt es leider den komplett falschen text, bzw Chinesische Zeichen, oder aber Fragezeichen aber ich glaube das liegt nur daran wenn das programm keine chineschichen zeichen annimmt 😛

    Der Quellcode:

    #include <iostream>
    #include <windows.h>
    #include <string>
    
    using namespace std;
    int main()
    {
    	//Position of the mouse
    	POINT curPos;
    	//Handle of  the edit box
    	HWND hEditbox;
    	string text = "x";
    
    	GetCursorPos(&curPos);
    	hEditbox = WindowFromPoint(curPos);
    	cout<<hEditbox<<endl;
    	cout<<text<<endl; //hier wird noch der richtige text angegeben
    	SendMessage(hEditbox, WM_SETTEXT, 0, (LPARAM)text.c_str()); 
    
    }
    

    Weiter informationen:
    Compiler Visual C/C++ 2008;
    OS : Microsoft Windows Vista;
    hoffe das mir jemand helfen kann und mein problem verstanden hat!
    wär super wenn mir jemand helfen kann, ich habe googel benutz aber konnte nichts finden...

    LG Cpp_Neuling
    DAnke schonmal im vorraus



  • Juchee,

    könnte vielleicht daran liegen, dass das Zielfenster die von dir übergebenen ANSI-Zeichen als Unicode interpretiert.

    Versuch mal: ::SetWindowTextA(hEditbox,text.c_str());

    (Zweite Möglichkeit: Dein Gerät wurde von einem chinesischen Spionagevirus gekapert... 😉



  • Dann hat er doch immernoch ANSI?
    Versuch mal dein Projekt auf UNICODE umzustellen und wstring zu verwenden,
    oder SendMessageW mit wstring. Dann ist es Unicode.



  • mit:

    SetWindowTextA(hEditbox,text.c_str());

    Funktioniert es schon fast jetz gibt er nämlich zumindest das richtige weiter, leider nur in editboxen die von mir nicht vorgesehen waren, in der eigentlichen editbox

    SendMessage(hEditbox, WM_SETTEXT, 0, (LPARAM)text.c_str());
    

    Hiermit lies sich jedoch in eben die editbox schreiben..

    das mit dem Unicode hab ich bisher noch nicht hingekriegt, werd mich wohl erstmal ins bettlegen aber shconmal vieel danke an alle die schon geantwortet haben, oder versucht haben zu antworten



  • Sorry, ich hatte gestern übersehen, daß SetWindowText() nur innerhalb des eigenen Prozesses funktioniert.

    So sollte es jetzt eigentlich laufen:

    if (IsWindowUnicode(hEditbox)) // ist hEditbox ein Unicode-Fenster?
    {
        // sende Unicode-String, Präfix L
    
        PostMessageW(hEditbox,WM_SETTEXT,0,(LPARAM) L"Mein Text");
    }
    else
    {
        // sende ANSI-String
    
        PostMessageA(hEditbox,WM_SETTEXT,0,(LPARAM) "Mein Text");
    }
    

    Alternative Methode: Schreibe deinen Text ins Clipboard und veranlasse hEditbox mit WM_PASTE, ihn von dort aus einzufügen.

    Gruß, VV 🙂



  • Hmm jetz bin ich zwar verwirrt aber es funktioniert...
    Habe einfach mal SendMessageW/SendMessageA geschrieben und ansonsten das von VirtualVoid übernommen und es hat funktioniert! Danke VirtualVoid!
    Allerdings funktioniert es auch ohne if bedingung, und sogar mit BEIDEN Versionen, was für mich ein wenig undurchsichtig ist.
    Vielleicht liegt es daran das ich Gestern keinen reboot gemacht hab, und sich irgend ein fehler eingeschlichen hat...

    Also nochmal Danke an alle und besonders VirtualVoid!
    Lg Cpp_Neuling


Anmelden zum Antworten