Autor Beitrag
the_apprentice
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 17.05.17 16:45 
Hallo zusammen,

ich habe bereits ein fertiges Programm geschrieben um ein Makro einer APP mit Tastenbefehlen zu steuern und Daten zu befüllen.
Das Funktioniert auch soweit.
Problem ist nun folgendes...

Hin und wieder öffnet sich ein Textfeld das Bestätigt werden muss.
Ich kann also nicht vorher schon bestimmen und anhand der Daten erkennen ob die Eingabe direkt angenommen wird, oder eine weitere Bestätigung notwendig ist.

Mein Programm muss also eine Veränderung in einem Fenster eines anderen Programmes, anhand des Textes o.Ä erkennen und einen Befehl ausführen können.

Wenn ich mit dem Tool Microsoft Spy ++ das Feld im Fenster markiere, demarkiere und das Fenster neu öffne (Was im Makro immer vorkommt) Zeigt Spy++ immer wieder einen anderen handle an.

Welche möglichkeiten bieten sich mir?
Merke: Ich bin noch ein schwacher Anfänger, einfache Erklärungen und Links zu Hilfestellungen wären sehr hilfreich :)

Mein Programm falls benötigt:
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:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;


namespace ConsoleApplication3
{
    class Program
    {
        
       

       
        public static void Main()
        {

            string path;
            int delay;

            Console.WriteLine("Bitte geben Sie den Vollständigen Pfad der zu Importierenden txt an: ");
            path = Console.ReadLine();
            Console.WriteLine("Bitte geben Sie die länge des  Delays zwischen den einzelnen Eingaben ein (Millisekunden) \nDanach geht es sofort nach dem Delay Los! \nBitte direkt in das entsprechende Feld klicken"
                + "\nBitte den Rechner während des Vorgangs am besten in Ruhe lassen!\nDas ausuführende Makro heißt LagerplatzZuweisung\n\nBeispiel für ein angemessenes Delay: 10000\nEingabe:");
            delay = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Das Programm startet in: " + delay + " Millisekunden!");


            string value = System.IO.File.ReadAllText(@path);
            string[] split = value.Split(new Char[] {';'});

            System.Threading.Thread.Sleep(delay);
            int mCounter = 0;
            
            foreach (string s in split)
            {


                
                while (mCounter >=3)
                {
                    WindowsInput.InputSimulator.SimulateKeyPress(WindowsInput.VirtualKeyCode.RETURN);
                    System.Threading.Thread.Sleep(delay);
                    Console.WriteLine("\n ");
                    mCounter = 0;
                    System.Threading.Thread.Sleep(500);
                  
                    
                   
                    

                }

                    WindowsInput.InputSimulator.SimulateTextEntry(s);
                    System.Threading.Thread.Sleep(250);
                    Console.WriteLine("Eingabe erfolgreich                " + s + "\n\n#Copyright Max\n");
                    WindowsInput.InputSimulator.SimulateKeyPress(WindowsInput.VirtualKeyCode.RETURN);
                    mCounter++;
                    System.Threading.Thread.Sleep(delay);
            }

            
        }

        private static void AppActivate(string p)
        {
            throw new NotImplementedException();

        }

    
public  long tertra { get; set; }}
}



Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Mi 17.05.2017 um 19:33
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 17.05.17 18:26 
Zitat:
Merke: Ich bin noch ein schwacher Anfänger, einfache Erklärungen und Links zu Hilfestellungen wären sehr hilfreich


böser Ralf : "Hi Reinhold, ich häng hier im Basislager auf 4000 Meter und wollte morgen auf dem Gipfel vom Everest sein. Was muß ich tun. Ach übrigens ich bin eigentlich total unsportlich also bitte irgendeine einfache Route". :roll:

konstruktiver Ralf: Wie du bestimmte Controls am besten findest ist technologieabhängig. Bei bestimmten Techniken hast du mehr oder weniger nichts und müßtest das rein über die vermutete Position auf dem Desktop machen. Uns helfen dir zu helfen würde wenn du sagst was das denn für eine Anwendung ist die du fernsteuern willst (aka in welcher Programmiersprache geschrieben mit welcher UI Technik).
Du sprichst davon das sich ab und zu ein Textfeld öffnet, heißt das es öffnet sich ein neues Fenster? Dann solltest du wohl besser versuchen das gerade fokusierte Fenster in der anderen Anwendung zu finden. Ein Fenstertitel ist üblicherweise stabil. Um an sowas zu kommen hilft dir aber erstmal nichts was standardmäßig in .Net vorhanden ist. Du müßtest dich direkt an die Windows API wenden.