WinCC Inhalt von Textvariablen Kopieren

GoodOld

Level-1
Beiträge
51
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,
kann mir jemand sagen ob es möglich ist den Inhalt einer Textvariablen per rechten Mausklick zu kopieren.
Ich habe ein Objekt, jetzt möchte ich wenn ich mit der rechten Maustaste drauf klicke soll der inhalt einer Textvariablen so kopiert werden das ich diesen Inhalt am PC weiter verwenden kann.
Bei dem Inhalt handelt es sich um eine 20stellige Zahlenfolge die ich am PC z.B. Word/Excel weiterverwenden möchte.
Ist das per C-Aktion möglich? leider habe ich so gut wie keine Programmierkenntnisse.


verwende WinCC 7.4.1


Gruß
Eddy
 
Etwas verspätet, aber das geht.
Du legst dir eine globale C-Funktion CopyTextToClipboard() mit folgendem Code an:

Code:
#include "apdefap.h"
void CopyTextToClipboard(char *textToCopy)
{
    ////////////////////////////////////////////////
    #pragma code("User32.dll")
    BOOL EmptyClipboard(void);
    BOOL OpenClipboard(HWND hWndNewOwner);
    HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
    BOOL CloseClipboard(void);
    #pragma code()
    #define CF_TEXT         1
    ////////////////////////////////////////////////
    #pragma code("Kernel32.dll")
    HGLOBAL GlobalAlloc(UINT uFlags, size_t dwBytes);
    LPVOID GlobalLock(HGLOBAL hMem);
    BOOL GlobalUnlock(HGLOBAL hMem);
    #pragma code()
    #define GMEM_FIXED      0x0000
    ////////////////////////////////////////////////
    char *pchData;
    HGLOBAL hClipboardData;

    if (OpenClipboard(NULL)) {
        EmptyClipboard();
        hClipboardData = GlobalAlloc(GMEM_FIXED, strlen(textToCopy) + 1);    
        pchData = (char*)GlobalLock(hClipboardData);
        strcpy(pchData, textToCopy);
        GlobalUnlock(hClipboardData);
        SetClipboardData(CF_TEXT, hClipboardData);
        CloseClipboard();
    }
}

Der als C-String übergebene Text wird dann in die Zwischenablage kopiert, welche dann mit "Einfügen" oder Strg+V in einer anderen Anwendung eingefügt werden kann.
Hast du den Text beispielsweise in einer WinCC Textvariable "textFuerClipboard" stehen, dann kannst du den Inhalt der Variable folgendermaßen in die Zwischenablage kopieren:
Code:
char *textToClipboard;
textToClipboard = GetTagChar("textFuerClipboard");
CopyTextToClipboard(textToClipboard);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,
vielen Dank für deine Hilfe, leider habe ich es aber nicht geschafft deinen Code zum laufen zu bringen.
Mit globale C-Funktion meinst du eine Projekt Funktion (Global Script > C-Editor > Projekt-Funktionen)? Oder bringe ich etwas durcheinander.
Dann verstehe ich noch zwei weitere Sachen nicht, wie wird das Script ausgeführt bzw. woher weiß es das es jetzt die Daten in die Zwischenablage kopieren soll?
Der zweite Punkt ist wohin soll der zweite Code Abschnitt kopiert werden?
Ich habe eine Variable die "LE_LAO" heißt und es ist eine Interne Variable vom Datentyp "Textvariable 8-Bit Zeichensatz". Diese soll in die Zwischenablage kopiert werden wenn ich einen rechts-Klick auf bestimmt Objekt machen.

Für weitere Hilfe wäre ich dir sehr dankbar.

Gruß Eddy
 
Hallo Thomas,
war etwas zu voreilig mit meinen Fragen.
Habe jetzt deinen Code verstanden und er funktioniert.
Verrmutlich hätte ich lieber noch etwas länger mit der Erkältung im Bett liegen bleiben sollen.

Gruß
Eddy
 
Zurück
Oben