Zwischenablage verändern
-
Hi,
ich habe hier einen Programmcode zum Überwachen der Zwischenablage, d.h. sobald sich die Zwischenablage verändert wird das Programm darüber informiert.using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Translator { public partial class Form1 : Form { [DllImport("User32.dll")] protected static extern int SetClipboardViewer(int hWndNewViewer); [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam); IntPtr nextClipboardViewer; public Form1() { InitializeComponent(); //Clipboard.SetText("Welcome to Translator 1.00"); nextClipboardViewer = (IntPtr)SetClipboardViewer((int) this.Handle); } protected override void WndProc(ref System.Windows.Forms.Message m) { // defined in winuser.h const int WM_DRAWCLIPBOARD = 0x308; const int WM_CHANGECBCHAIN = 0x030D; switch (m.Msg) { case WM_DRAWCLIPBOARD: checkStatus(); if (on) DisplayClipboardData(); SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam); this.Close(); break; case WM_CHANGECBCHAIN: if (m.WParam == nextClipboardViewer) nextClipboardViewer = m.LParam; else SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam); break; default: base.WndProc(ref m); break; } } void DisplayClipboardData() { string text = ""; if (Clipboard.ContainsText()) text = Clipboard.GetText().ToLower().Trim(); richTextBox1.Text = text; //Clipboard.SetText(translation()); } void checkStatus() { IDataObject iData = new DataObject(); iData = Clipboard.GetDataObject(); if (((string)iData.GetData(DataFormats.Text)).Equals("+on")) on = true; if (((string)iData.GetData(DataFormats.Text)).Equals("+off")) on = false; } bool on = true; private void Form1_Load_1(object sender, EventArgs e) { } } }
mein Problem ist, dass ich gerne den in der Zwischenablage abgelegten Text verändern möchte, was mir aber bis jetzt nicht möglich war, da der Code sich immer und immer wieder ausführt => sobald ich das ganze veränder wird es wieder und wieder verändert
würde mich sehr über Ratschläge freuen
greetings,
warum geht nicht?
-
Hallo.
Bitte beschreibe das nächste mal das erwartete und beobachtete Verhalten genauer.
Folgendes könnte helfen, falls ich Dein Problem verstanden habe:
//Feldvariable bool noReact = true; //in WndProc if(noReact) DisplayClipboardData(); //in DisplayClipboardData noReact = false; Clipboard.SetText(text+text); //text+text nur zum test.... noReact = true;
-
manchmal kann es so einfach sein...
big merci!