Autor Beitrag
Sergeant
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 10.01.10 11:58 
Hallo!

Ich kopiere manuell im Browser einen Text. Dieser ist in verschiedene DIVs wahrscheinlich verschachtelt worden. Mit STRG + V kopiere ich den Text in das Notepad von Windows. Dort wird mir der Text wieder angezeigt.

Möchte ich in meinem eigenen Programm mit Clipboard.GetText() den Text in die Konsole ausgeben oder in eine Textarea, passiert dies nicht bzw. ich glaube dass der Befehl schon ausgeführt wird problemlos. Aber es wird nichts angezeigt.

Woran liegt das? Was mache ich falsch? Kann mir jemand weiterhelfen?

Lieben Gruß

Sergeant


Moderiert von user profile iconKha: Topic aus C# - Die Sprache verschoben am So 10.01.2010 um 14:10
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 10.01.10 12:12 
user profile iconSergeant hat folgendes geschrieben Zum zitierten Posting springen:
Möchte ich in meinem eigenen Programm mit Clipboard.GetText() den Text in die Konsole ausgeben oder in eine Textarea, passiert dies nicht bzw. ich glaube dass der Befehl schon ausgeführt wird problemlos.
Zeig doch einfach nicht nur diesen Text ab sondern sowas wie "Der Text ist: ...", dann weißt du was genau von dort kam. :idea:

Wie sieht dein Quelltext denn genau aus?
Sergeant Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 10.01.10 13:09 
Hallo!

Der Quelltext-Ausschnitt sieht so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
SendKeys.SendWait("^(c)");
                System.Threading.Thread.Sleep(500);

                

                

                ActualProfileNumber++;
                
                // Dies ist sogenannter generischer Delegate,
                // innerhalb des Blocks vollen Zugriff auf die
                // UI zuläßt
                MethodInvoker LabelUpdate = delegate
                {
                    // Innerhalb dieses Blocks können Controls
                    // und Forms angesprochen werden, neue Fenster
                    // erzeugt werden etc....
                    TB_Log.AppendText(ActualProfileNumber.ToString() + " Durchläufe absolviert \n");
                    Console.Write(Clipboard.GetText() + " Test");
                };



Das mit dem Testen hab ich bereits probiert. Es steht dann nur " Test" da.


Der Quellcode welcher zu sehen ist, ist etwas verwirrend vielleicht. Hab durch das Ausprobieren etwas wirsch arbeiten müssen.

Sergeant
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 10.01.10 13:50 
Dann ist die Frage in welchem Format die Daten genau vorliegen. Notepad versteht mehrere Formate, während du nur das Standardformat verwendest. (Denn du gibst ja HTML z.B. nicht an, ich vermute dann wird es auch nicht versucht abzurufen.)

Schau dir einmal die Hinweise zu ContainsText in der Doku zu GetText an bzw. die Beispiele: ;-)
msdn.microsoft.com/d...ibrary/kz40084e.aspx
Sergeant Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 10.01.10 14:47 
Habe jetzt folgende Funktion geschrieben:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        public string ClipBoardHTMLtoString()
        {
            string ConvertedString = null;

            if (Clipboard.ContainsText(TextDataFormat.Html))
            {
                ConvertedString = Clipboard.GetText(TextDataFormat.Html);
            }
            else
            { }

            return ConvertedString;
        }


Funktioniert leider immer noch nicht. Okay, die Ausgabe sieht so aus dass ich den Rückgabewert in einer String-Variablen gespeichert habe und dann über die Console ausgeben lasse. Aber auch da erscheint wieder nur " Test".

Irgendwelche Ideen?


Sergeant
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 10.01.10 15:09 
Wenn ich manuell Text aus dem Browser kopiere und dann GetText() aufrufe, funktioniert es. Der Fehler muss in deinem restlichen Code liegen.

_________________
>λ=
Sergeant Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 10.01.10 16:03 
Hier mal die gesamte Klasse. Der Link zu der Website von der aus es geladen wird habe ich aus Datenschutzgründen entfernt, da es sich um private Daten von mir handelt.

Ich finde den Fehler nicht. Ist mir ein Rätsel woran es liegen kann.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
public partial class MainForm : Form
    {
        bool RunProfileScanner = false;
        int ActualProfileNumber = 0;

        public MainForm()
        {
            InitializeComponent();
        }

        private void globalEventProvider1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F2)
            {
                if (RunProfileScanner == false)
                {
                    ControlProfileScannerThread();
                }
                else { }
            }

            if (e.KeyData == Keys.F8)
            {
                if (RunProfileScanner == true)
                {
                    ControlProfileScannerThread();
                }
                else { }            
            }

            if (e.KeyData == Keys.F9)
            { this.Close(); }
        }

        private void BT_DBSettings_MouseClick(object sender, MouseEventArgs e)
        {
            DBSettings DBSettingsForm = new SONAR.Forms.DBSettings.DBSettings();

            DBSettingsForm.ShowDialog();
        }

        private void DoIt(object dummy)
        {
            string ClipboardText = null;

            while(RunProfileScanner == true)
            {
                ActualProfileNumber++;

                SendKeys.SendWait("{F6}");
                System.Threading.Thread.Sleep(200);
                SendKeys.SendWait("http://reject.ichbineinewebsite.com/index.php?m=info_user&id=" + ActualProfileNumber);
                System.Threading.Thread.Sleep(500);
                SendKeys.SendWait("{ENTER}");
                System.Threading.Thread.Sleep(4000);
                Cursor.Position = new Point(600590);
                WinAPI.SendMouseLeftDown();
                Cursor.Position = new Point(1080840);
                WinAPI.SendMouseLeftUp();
                System.Threading.Thread.Sleep(500);
                SendKeys.SendWait("^(c)");
                System.Threading.Thread.Sleep(500);

                ClipboardText = ClipBoardHTMLtoString();

                
                // Dies ist sogenannter generischer Delegate,
                // innerhalb des Blocks vollen Zugriff auf die
                // UI zuläßt
                MethodInvoker LabelUpdate = delegate
                {
                    // Innerhalb dieses Blocks können Controls
                    // und Forms angesprochen werden, neue Fenster
                    // erzeugt werden etc....
                    TB_Log.AppendText(ActualProfileNumber.ToString() + " Durchläufe absolviert \n");
                    Console.Write(ClipboardText + " Test");
                };

                Invoke(LabelUpdate);


                    MethodInvoker QuestionDelegate = delegate
                    {
                        // Sogar Rückfragen sind möglich
                        
                            
                    };
                    Invoke(QuestionDelegate);

            }
        }

        private void BT_Start_MouseClick(object sender, MouseEventArgs e)
        {
            ControlProfileScannerThread();
        }

        public void ControlProfileScannerThread()
        {
            if(RunProfileScanner == false)
            {
                RunProfileScanner = true;
                System.Threading.ThreadPool.QueueUserWorkItem(DoIt);
            }
            else
            {
                RunProfileScanner = false;              
            }
        }

        public string ClipBoardHTMLtoString()
        {
            string ConvertedString = null;

            if (Clipboard.ContainsText(TextDataFormat.Html))
            {
                ConvertedString = Clipboard.GetText(TextDataFormat.Html);
            }
            else
            { }

            return ConvertedString;
        }
    }
}
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 10.01.10 16:17 
Mal eine ganz andere Frage: Es sieht doch so aus als ob du nur eine Webseite aufrufst und damit etwas machst, oder?

Warum rufst du die nicht direkt in deinem Programm ab? :gruebel:
Sergeant Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 10.01.10 16:38 
Es handelt sich immer um die gleiche Website. Das ist richtig. Aber verschiedene Unterseiten. Diese enthalten immer wieder das gleiche Muster an Informationen nur weichen die Informationen von ihrer Zusammensetzung ab.

Ich habe es mit der Maussteuerung gemacht, weil ich damit mein bisheriges Vorgehen imitieren wollte. Das man die Website auch irgendwie einlesen kann hab ich mal gelesen, aber mir fehlte dazu irgendwie der Ansatz und ich hab meinen aktuellen Weg für einfacher gehalten.

EDIT: Abgesehen davon muss man sich auf der Seite einloggen und die Website prüft ob der Browser Mozilla Firefox ist. Wie sollte ich das vorgaukeln?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 10.01.10 17:12 
user profile iconSergeant hat folgendes geschrieben Zum zitierten Posting springen:
Abgesehen davon muss man sich auf der Seite einloggen
Alles, was ein Browser per GET und POST schafft, kann auch ein WebClient.

user profile iconSergeant hat folgendes geschrieben Zum zitierten Posting springen:
und die Website prüft ob der Browser Mozilla Firefox ist.
Nennt sich User Agent, ein Beispiel dazu findest du direkt in der WebClient-Doku.

Wenn du diesen Weg wählen solltest, mach aber bitte ein neues Thema in der Web-Sparte auf :) .

_________________
>λ=
Sergeant Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 10.01.10 17:39 
Ich werde jetzt den Versuch mit dem WebClient starten. :( Soviele Arbeitsstunden für die Tonne. An sowas könnte ich manchmal echt verzweifeln.
Aber danke für eure Hilfe in diesem Fall.

Werde, wenn ich Hilfe brauche, einen neuen Thread aufmachen. Probiere es aber auf jedenfall erstmal alleine.