Diskuze: Simulace vstupu z klávesnice

C# .NET .NET (C# a Visual Basic) Simulace vstupu z klávesnice American English version English version

Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Ahojte, chtěl by jsem se zeptat, jak by se dal udělat program, který by měl nasimulovat stisknutí klávesy na klávesnici. Jde o to, že chci udělat program, který by dokázal oklamat ATF (all ten fingers - největší teror každého středoškoláka, ale mně to jde ... je to pro spolužáky :D).

Ať jsem googlil, jak jsem googlil, tak jsem nic nenašel :/ Prosím o pomoc :)

Odpovědět 12.12.2013 14:50
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jan Demel
Jan Vargovský:

http://msdn.microsoft.com/…endkeys.send(v=vs.110).aspx

Pozn.: osobně jsem to taky nesnášel po půl roce, stejně jsem psal normálně ... Zvyknout si po X letech kdy píšeš svým stylem na nějaký jinačí, umřel bych :)

Editováno 12.12.2013 15:25
 
Nahoru Odpovědět  +1 12.12.2013 15:24
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Jan Vargovský
Jan Demel:

Děkuju :) Jenže je tu jeden problém, co jsem tohle zkoušel, tak to funguje jenom pro Windows Form. Já bych něco takového potřeboval v console application. :/

Nahoru Odpovědět 12.12.2013 18:59
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jan Demel
Jan Vargovský:

Si přidej referenci na WF.

 
Nahoru Odpovědět 12.12.2013 19:00
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

No dobré, tak to by jsem měl. Zbývá mi asi jenom jedna věc :D Jak to udělat, aby tenhle program fungoval na pozadí a aby mohl psát do textového editoru např ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = System.IO.File.ReadAllText(@"C:\Users\HonDemik\Desktop\text_utf.txt");
            // * Načtení TXT souboru, který se bude vypisovat.

            //string text = "Nějáký texdt, který se bude vypisovat postupně když zmáčknu jakoukoliv klávesu.";
            char[] text_in_characters = text.ToCharArray();

            foreach (char c in text)
                {
                    Console.ReadKey(true);
                    SendKeys.SendWait(c.ToString());
                }



            /*for (int i = 0; i < text.Length; i++)
            {
                Console.ReadKey(true);
                //Console.Write(text_in_characters[0 + i]);

            }
            */
            //End of the applicationd
            Console.WriteLine();
            Console.WriteLine("Program ukončete jakoukoliv klávesou...");
            Console.ReadKey();
        }
    }
}
Nahoru Odpovědět 12.12.2013 19:26
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Prosím pomozte :D

Nahoru Odpovědět 12.12.2013 21:03
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jan Demel
Jan Vargovský:

K čemu chceš psát do textového editoru ?

 
Nahoru Odpovědět 12.12.2013 21:10
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Samozřejmě, že to půjde do ATF, ale je to skoro to stejné.

Nahoru Odpovědět 12.12.2013 21:12
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jan Demel
Jan Vargovský:

Zamysli se nad tím kódem, čekáš na stisk klávesy v konzli a pak následně vypíšeš nějaký char z tvého souboru ... Trošku nahlavu ne?

 
Nahoru Odpovědět 12.12.2013 21:20
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

No tak je to založeno na tom, aby to vypadalo, že opravdu píšeš ty a ne program. Takhle docílím toho, že se na každý stisk jakékoliv klávesy vypíše jeden znak. Kdyby to tak nebylo, tak by nakonec byla rychlost úhozů bůhví kolik a to už by učitelka nesežrala :D

Nahoru Odpovědět 12.12.2013 21:23
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jan Demel
Jan Vargovský:

Metoda Send posílá to "stisknuté" tlačítko aktivované aplikaci (konzole, když pár nanosekund před tím si zmačkl tlačítko) ... Použij uspání vlákna na pár stovek milisekund. Nebo odchytávej systémově to zmáčknutí klávesy a nahraď to tou svou.

 
Nahoru Odpovědět 12.12.2013 21:28
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

To nevím, jak by se udělalo.

Nahoru Odpovědět 12.12.2013 21:35
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jan Demel
Jan Vargovský:

Thread.Sleep(int ms);

Používej tlačítko odpovědět nebo pak budeš čekat na odpověď pár hodin...

 
Nahoru Odpovědět 12.12.2013 21:36
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

A jak to teďka udělat, aby to fungovalo na aktivní okno ? O.o

Nahoru Odpovědět 12.12.2013 21:41
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
 
Nahoru Odpovědět 12.12.2013 21:50
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Hele asi jsi mě špatně pochopil :) To má být program, který jenom spustím, potom zapnu ATF a budu mačkat jakékoliv klávesy a ono to bude psát správné znaky místo mě. To Console.ReadKe­y(true) se mi tam zdá v pořádku, protože čekám na stisknutí klávesy a potom odešlu správný znak.

Ale něják se mi pořád nezdá, že když to spustím a na to spusím další program, tak to bude fungovat.

Editováno 12.12.2013 21:56
Nahoru Odpovědět 12.12.2013 21:53
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Jan Vargovský
Jan Demel:

Hele asi jsi mě špatně pochopil :) To má být program, který jenom spustím, potom zapnu ATF a budu mačkat jakékoliv klávesy a ono to bude psát správné znaky místo mě. To Console.ReadKe­y(true) se mi tam zdá v pořádku, protože čekám na stisknutí klávesy a potom odešlu správný znak.

Ale něják se mi pořád nezdá, že když to spustím a na to spusím další program, tak to bude fungovat.

Nahoru Odpovědět 12.12.2013 21:56
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jan Demel
Jan Vargovský:

Vzdávám to ... Přečti si celou konverzaci znova.

Btw, neslibuj kamarádům něco co nedokážeš splnit, když nechápeš ani jak funguje základní metoda pro čtení z konzole...

Editováno 12.12.2013 21:57
 
Nahoru Odpovědět 12.12.2013 21:56
Avatar
Jan Demel
Redaktor
Avatar
Nahoru Odpovědět 12.12.2013 22:00
To co se zdá být nemožné, je vždy možné.
Avatar
Michal Žůrek (misaz):

není jednoduší si v tom ATF zatrhnout "přeskakovat chyby"?

Nahoru Odpovědět 13.12.2013 6:49
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jan Demel:

No to už je celkem jedno :) Už jsem to něják vyřešil a funguje to. Ale bych bych rád, kdyby to fungovalo na stisk klávesy v daném okně, než na časový interval :/ Kdyby někdo věděl, napište mi prosím :)

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;

namespace ATF_Hack
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            string text = richTextBox1.Text;
            char[] text_in_characters = text.ToCharArray();
            bool opakovani = true;
            int i = 0;
            string znak;

            int pocet_uhozu = int.Parse(textBox1.Text);
            int konecny_pocet_uhozu = (60 / pocet_uhozu) * 1000;
            while (opakovani == true)
            {
                if (i <= text.Length)
                {
                    znak = Convert.ToString(text_in_characters[i]);
                    SendKeys.Send(znak);
                    i++;
                    System.Threading.Thread.Sleep(konecny_pocet_uhozu);
                }
                else
                    timer1.Enabled = false;
            }
        }
    }
}
Nahoru Odpovědět 13.12.2013 15:41
To co se zdá být nemožné, je vždy možné.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 21 zpráv z 21.