Möchte in meinem Programm, bei Start den Zwischenspeicher auslesen



  • huhu, hatte eben in der suche einen link gefunden, aber den gibt es leider nicht mehr 😞

    aber kann mir vielleicht trotzdem jemand helfen?

    ich schreibe von einem anderen Programm einen String ins Clipboard, wi ll dann eine Andere Anwendung starten mit CreateProcess und dieses Programm soll dann den Zwischenspeicher auslesen, und dann den string weiterverarbeiten.

    ins clipboard schreiben:

    CString text_to_clipboard;
    
    if(OpenClipboard())
    {
    HGLOBAL  clipboardbuffer;
    char* buffer;
    EmptyClipboard();
    clipboardbuffer=GlobalAlloc(GMEM_DDESHARE,text_to_clipboard.GetLength()+1); 
    buffer=(char*)GlobalLock(clipboardbuffer);			
    GlobalUnlock(clipboardbuffer);					
    strcpy(buffer,LPCSTR(text_to_clipboard));				
    SetClipboardData(CF_TEXT,clipboardbuffer);				
    CloseClipboard();							
    }
    

    aber wie kann ich dass denn umschreiben zum auslesen des Clipboards???
    hat einer Rat? 😕



  • hilfe, finde einfach nix



  • Versuch's so:

    if (!OpenClipboard())
            return;
    
        HANDLE hMem = ::GetClipboardData(CF_TEXT);
        if (hMem == NULL)
        {
            CloseClipboard();
            return;
        }
    
        LPSTR pMem = (LPSTR) ::GlobalLock(hMem);
    
        // pMem zeigt jetzt auf den Text
        ....
        ::GlobalUnlock(hMem);
        CloseClipboard();
    


  • ok,werde es so versuchen, aber wie würede ich dann den text in nen string bekommen



  • wünsche ein frohes fest, aber bevor ich das haben werde, will ich dass noch hinbekommen... 😞

    kann mir jemand nochmal helfen, wie ich den von uwe geposteten code(zeiger) in einen String schreiben kann, um diesen dann wieter zu verarbeiten???? :xmas2:



  • ok, habe eben noch dieses hier gefunden:

    GetClipboardData liefert keinen Zeiger auf die Daten! 
    Die Funktion liefert ein Handle, das du mit GlobalLock/GlobalUnlock "auflösen" kannst.
    

    und dass von uwe

    if (!OpenClipboard())
            return;
    
        HANDLE hMem = ::GetClipboardData(CF_TEXT);
        if (hMem == NULL)
        {
            CloseClipboard();
            return;
        }
    
        LPSTR pMem = (LPSTR) ::GlobalLock(hMem);
    
        // pMem zeigt jetzt auf den Text
        ....
        ::GlobalUnlock(hMem);
        CloseClipboard();
    

    abver wie bekomme ich jetzt die Daten, die in der Zwischenablage sind in einen CString???



  • Clipboard()rafft es net schrieb:

    abver wie bekomme ich jetzt die Daten, die in der Zwischenablage sind in einen CString???

    indem du die Board-Suche benutzt... http://c-plusplus.net/forum/search.php
    als Suchbegriff -> clipboard wählst und die Suche auf Forum: -> FAQ - MFC einschränkst... ergibt genau einen Treffer und da steht alles drin :xmas1:

    ciao veganza



  • oh mann danke, ich habe die suche so oft grquält, wahrscheinlich habe ich das übersehen...

    ist es denn richtig, dass dann:

    char * buffer; 
    if(OpenClipboard()) 
    { 
    buffer = (char*)GetClipboardData(CF_TEXT);//EnthältjetztdenInhaltdesClipBoards 
    } 
    CloseClipboard(); 
    
    CString myTest = buffer; //darf man dieses machen???
    


  • ja ist richtig so 😉

    ciao veganza


Anmelden zum Antworten