Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.02.18 18:32 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: markusmayer123
markusmayer123 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 24.02.18 18:51 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Weiss nicht, was du meinst. :gruebel: Aufrufe erfolgen nunmal nacheinander.
Wenn du Thread.Sleep() ständig aufrufst, dann blockst du in dieser Zeit den Haupt-Thread, also deine Anwendung per se. D.h. du kannst in dieser Zeit das Fenster der Anwendung nicht bedienen.
Mit dem Timer kannst du nebenbei, während er arbeitet, die Hauptanwendung bedienen. Wie regelmäßig der Timer etwas ausführt, hängt von seiner gesetzten .Intervall-Eigenschaft (in Millisekundnen) ab.


Ja genau, die erfolgen genau nacheinander und dazwischen suche ich was, um einen kurzen delay zwischen den Aufrufen zu haben:D
Schau mal, ich versuche mit C# ein AutoHotKey Ablauf nachzubilden, dieser sieht wie folgt aus:
ausblenden volle Höhe 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:
if GetKeyState(key_pressed)
{

if s
{
loop
{
DllCall("mouse_event", uint, 2, int, 0, int, 0, uint, 0, int, 0)
sleep 92
if !GetKeyState(key_pressed)
{
DllCall("mouse_event", uint, 4, int, 0, int, 0, uint, 0, int, 0)
break
}
DllCall("mouse_event", "UInt", 0x01, "UInt", 0*modifier, "UInt", 25*modifier)
sleep 92
if !GetKeyState(key_pressed)
{
DllCall("mouse_event", uint, 4, int, 0, int, 0, uint, 0, int, 0)
break
}
DllCall("mouse_event", "UInt", 0x01, "UInt", 0*modifier, "UInt", 25*modifier)
sleep 92
if !GetKeyState(key_pressed)
{
DllCall("mouse_event", uint, 4, int, 0, int, 0, uint, 0, int, 0)
break
}
DllCall("mouse_event", "UInt", 0x01, "UInt", 0*modifier, "UInt", 25*modifier)
sleep 92
if !GetKeyState(key_pressed)
{
DllCall("mouse_event", uint, 4, int, 0, int, 0, uint, 0, int, 0)
break
}
DllCall("mouse_event", "UInt", 0x01, "UInt", 0*modifier, "UInt", 22*modifier)
sleep 92


Hier ist im AutoHotKey Script auch eine Art Sleep drinne.
Das versuche ich auch in C# umzusetzen.
Ist das überhaupt möglich?

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.02.18 19:07 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: markusmayer123
markusmayer123 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 24.02.18 19:26 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Ja, das ist möglich, und hier muss auch sleep() aufgerufen werden, damit die Befehle die nötige Zeit haben, ausgeführt werden zu können. Wo ist nun das Problem?


Okay, ja mit Thread.Sleep(92); hängt ja das ganze Programm:D
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 24.02.18 19:46 
Dann schau dir mal die asynchrone Programmierung an. Stichworte: async, await, Task.Delay, ...

Ich denke aber, daß du als Anfänger nicht gleich so komplexe Anwendungen entwickeln solltest (also Fernsteuerung eines anderen Programms). Warum bleibst du nicht bei AutoHotKey?

Für diesen Beitrag haben gedankt: markusmayer123
markusmayer123 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 24.02.18 19:54 
Dankeschön, ich schau es mir an:)

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Warum bleibst du nicht bei AutoHotKey?

Da ich sehr eingeschränkte Möglichekeiten mit AHK habe. Leider.

LG
markusmayer123 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 25.02.18 01:11 
Guten Abend zusammen!

Ich habe mal folgendes ausprobiert mit einem Async Timer:

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:
 private async void timer2_TickAsync(object sender, EventArgs e)
        {


            if (_pressed == true)
            {

                Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 21);
                await Task.Delay(92);
            }
            
            if (_pressed == true)
            {
                Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 21);
                await Task.Delay(92);
            }
           

            if (_pressed == true)
            {
                Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 21);
                await Task.Delay(92);
            }
            
            if (_pressed == true)
            {
                Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 21);
                await Task.Delay(92);

            }

           
            if (_pressed == true)
            {

                Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 18);
                await Task.Delay(92);

            }
            
            if (_pressed == true)
            {
                Cursor.Position = new Point(Cursor.Position.X -11, Cursor.Position.Y + 16);
                await Task.Delay(92);


            }
            
            if (_pressed == true)
            {


                Cursor.Position = new Point(Cursor.Position.X - 11, Cursor.Position.Y + 19);
                await Task.Delay(92);
            }
}


Das funktioniert soweit auch, allerdings geht der Cursor nur Y nach unten und ignoriert die X Werte:D

Hat jemand eine Idee, woran das liegen könnte? Habe jetzt sämtliches erfolglos ausprobiert.


LG
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 25.02.18 20:01 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: markusmayer123
markusmayer123 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 25.02.18 20:50 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:

key_pressed ist kein bool'scher Wert, sondern entspricht einer (virtuellen) Taste, siehe Virtual Key Code.
Welchen Wert modifier hat oder annehmen soll, ist aus dem Skript nicht zu entnehmen.


Weiteres nachzulesen unter:
- GetKeyState()
- mouse_event()


Guten Abend!

Erstmal vielen herzlichen Dank für deine Hilfe! :)

Ich bin deinen geposteten Code durchgegangen und habe mir die Links die du gepostet hast, angeschaut.

Mir ist leider nicht ganz klar, wie der Code jetzt ausführbar ist:D

Wenn ich jetzt annehmen würde, der Modifier hätte den Wert 1 und ich würde die Linke Maustaste drücken wollen, müsste ich doch dann in Form1_Load das hier schreiben, um den Code ausführen zu können:

ausblenden C#-Quelltext
1:
DoAutoHotKey(0x011);					


PS: Tut mir leid für die dummen Fragen:P

Edit2:
ausblenden C#-Quelltext
1:
DoAutoHotKey(0x011);					
Das hier kommt glaub ich in einen Timer und
Timer1.Enabled = true;
in form1_load
LG
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 25.02.18 22:33 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: markusmayer123
markusmayer123 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 25.02.18 23:04 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Gute Frage. Wo wird es denn im AutoHotKey ausgeführt? Ich hätte es wohl in einem MouseDown oder KeyDown Ereignis ausgeführt.
Solltest du es im Timer ausführen, dann muss aber die while-Schleife verschwinden, ansonsten hängt sich die Anwendung noch auf.


Das wird auch innerhalb einer Loop ausgeführt.
Okay, ich teste ein wenig herum.

Vielen Dank nochmal!

Edit: Also ohne Timer schaffe ich es garnicht, DoAutoHotkey(); auszuführen.

LG

Markus
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 25.02.18 23:23 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: markusmayer123