Clipboard



  • danke, hast dir ja extra arbeit gemacht 🙂

    ich bekomme leider noch eine fehlermeldung: " getStringFromClipboard' : nichtdeklarierter Bezeichner" zurück. 😕



  • wie gesagt nicht getestet. 😃 aber das lässt sich lösen 😉
    [cpp]
    if(GetStringFromClipboard(szBuffer))
    [/cpp]



  • oh, das hätte ich sogar merken müssen. 😮

    jetzt kreidet er mir noch szTemp und szBuffer als nichtdeklarierter Bezeichner an, gibts da auch so eine leichte lösung? 😋



  • wieder an fünftausend dinge gedacht beim schreiben

    [cpp]
    int main(int argc, char* argv[])
    {
    char szText[512];

    if(GetStringFromClipboard(szText))
    printf("%s\n", szText);
    else
    printf("fehler\n");

    return 0;
    }[/cpp]



  • jaaaaaa! jetzt gehts! vielen dank du hast mir echt geholfen!!!!!!! 👍

    eine kl. frage hätte ich noch: ich bekomme die warnung: GetStringFromClipboard' : Nicht alle Steuerelementpfade geben einen Wert zurück

    was heißt das?



  • miller_m muss man nicht GlobalLock auf das Handle von GetClipboardData aufrufen um an die Daten zu kommen?



  • Noir schrieb:

    eine kl. frage hätte ich noch: ich bekomme die warnung: GetStringFromClipboard' : Nicht alle Steuerelementpfade geben einen Wert zurück
    was heißt das?

    das nach closeclipboard noch nen "return true;" kommen müsste.

    GlobalLocker schrieb:

    miller_m muss man nicht GlobalLock auf das Handle von GetClipboardData aufrufen um an die Daten zu kommen?

    warum? mit GetClipboardData komme ich doch doch dran. hab keinen sinn darin gesehen.



  • Na ja, hab das bis jetzt bei allen Beispielen im Internet mit GlobalLock gesehen. Vielleicht geht es ja nur zufällig. 😉



  • noch ne frage 🙂

    benötige ich hier memcpy überhaupt, damit kopiere ich doch einen Speicherbereich? aber man kann das hier weglassen und es geht noch.



  • aber man kann das hier weglassen und es geht noch.

    glaube ich nicht. 😮 😮 😮



  • stimmt sorry war blödsinn, ich hab nach dem entfernen die falsche exe gestartet. mit der ging es noch. 😮



  • wenn die zeichenkette in der zwischenablage länger ist als mein array kommt es zu einer fehlermelung.
    daher wollte ich nur die ersten 100 zeichen der zeichenkette in das array kopieren.

    so wollte ich dies machen:

    bool GetStringFromClipboard(char *pBuffer) 
    { 
        if(!IsClipboardFormatAvailable(CF_TEXT)) return false; 
    
        if(!(OpenClipboard(NULL))) return false; 
    
       char *pTemp = (char*)GetClipboardData(CF_TEXT); 
       memcpy(pBuffer, pTemp,strlen(pTemp)); 
    
    char str[100];
    strcpy(str,pBuffer);
    strncpy(pBuffer,str,100); //<---------------
    
        CloseClipboard(); 
    	return true;
    

    aber anscheinend ist das wiede total falsch.................



  • bool GetStringFromClipboard(char *pBuffer)
    {
        if(!IsClipboardFormatAvailable(CF_TEXT)) return false;
    
        if(!(OpenClipboard(NULL))) return false;
    
        char *pTemp = (char*)GetClipboardData(CF_TEXT);
    
        int bytesToCopy = strlen(pTemp);
        if(bytesToCopy > 99) bytesToCopy = 99;
    
        memcpy(pBuffer, pTemp,bytesToCopy);
        pBuffer[bytesToCopy] = 0;  // NUL-Zeichen anhängen, damit der String auch sauber terminiert ist.
    
        CloseClipboard();
        return true;
    }
    

    Du könntest das Ganze jetzt noch so abwandeln, dass du der Funktion die Größe deines Buffers mit übergibst.



  • perfekt, haut jetzt wunderbar hin! vielen dank. 🙂



  • ich verwende diese funktion für eine dll für eine andere programmiersprache:
    die dll funktioniert auch super, aber ich kann immer nur ein zeichen übergeben.
    die programmiersprache für welche die dll sein soll kann keine strings übernehmen (nur int, byte, short, float) und kennt auch keine pointer.
    gibt es eine andere möglichkeit den ganzen text aufeinmal zu übergeben, oder muss ich die dll sooft aufrufen bis ich allen text hab?

    #include <windows.h>
    #include "stdafx.h"
    #include <string>
    
    bool GetStringFromClipboard(char *pBuffer) 
    { 
        if(!IsClipboardFormatAvailable(CF_TEXT)) return false; 
    
        if(!(OpenClipboard(NULL))) return false; 
    
        char *pTemp = (char*)GetClipboardData(CF_TEXT); 
    
        int bytesToCopy = strlen(pTemp); 
        if(bytesToCopy > 99) bytesToCopy = 99; 
    
        memcpy(pBuffer, pTemp,bytesToCopy); 
        pBuffer[bytesToCopy] = 0;   
    
        CloseClipboard(); 
        return true; 
    } 
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    {
        return TRUE;
    }
    
    extern "C"{ 
    _declspec(dllexport) char _cdecl my_dll_func( const void *in,int in_size,void *out,int out_sz ); 
    } 
    
    _declspec(dllexport) char _cdecl my_dll_func( const void *in,int in_size,void *out,int out_sz ) 
    { 
    
      char szText[100]; 
    
        if(GetStringFromClipboard(szText)) 
    	{
                 return szText[0]; //1.zeichen übergeben
    	}
    
    	return 0
    
    }
    


  • Noir schrieb:

    die programmiersprache für welche die dll sein soll kann keine strings übernehmen (nur int, byte, short, float) und kennt auch keine pointer.
    gibt es eine andere möglichkeit den ganzen text aufeinmal zu übergeben, oder muss ich die dll sooft aufrufen bis ich allen text hab?

    Also, wenn es wirklich nur diese Typen geben sollte, dann wüsste ich nicht, wie du den Text auf einmal übergeben können solltest bzw. wie du darauf zugreifen kannst. Aber was machst du denn dann dort überhaupt mit den Daten, wenn diese Programmiersprache (welche überhaupt?) keine Strings kennt 😕 🙄



  • nein sie kennt schon strings, aber ich darf mir keine strings von dlls übergeben lassen.

    aber ich glaub ich habe es jetzt, die chars übergeb ich als int zahlen
    diese kann ich mit dem outbuffer übergeben. (*out)



  • Du bist ein Quatschkopf 😃
    Klar kannst du BB Strings übergeben aus einer DLL, das ist kein Problem. Siehe dazu mal im Forum unter "Rund um die Programmierung" bei deinem Beitrag "DLL für BlitzBasic". Da hab ich dir ein Beispiel gegeben wie du Strings zurückgibts und übergibst.



  • danke erstmal hat ich noch gar nicht gesehen. 🙂
    aber wie frag ich das in bb dann ab? du kennst dich damit anscheinend auch aus?
    wäre toll wenn du mir das auch noch sagen würdest.



  • Jup, ich kenn mich damit aus. Ich werd mir das jetzt mal zu gemüte führen und die Funktion "normal" machen. 😃

    PS: ich bin auch im BB-Forum -> VirtualDreams


Anmelden zum Antworten