NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Avatar
Jan Demel
Tvůrce
Avatar
Jan Demel:12.12.2013 14:50

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 15:24

http://msdn.microsoft.com/…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
12.12.2013 15:24
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Jan Demel:12.12.2013 18:59

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 19:00

Si přidej referenci na WF.

 
Nahoru Odpovědět
12.12.2013 19:00
Avatar
Jan Demel
Tvůrce
Avatar
Jan Demel:12.12.2013 19:26

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
Tvůrce
Avatar
Jan Demel:12.12.2013 21:03

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 21:10

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

 
Nahoru Odpovědět
12.12.2013 21:10
Avatar
Jan Demel
Tvůrce
Avatar
Jan Demel:12.12.2013 21:12

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 21:20

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
Tvůrce
Avatar
Jan Demel:12.12.2013 21:23

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 21:28

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
Tvůrce
Avatar
Jan Demel:12.12.2013 21:35

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 21:36

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
Tvůrce
Avatar
Jan Demel:12.12.2013 21:41

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 21:50

Je to tam defaultně ...

 
Nahoru Odpovědět
12.12.2013 21:50
Avatar
Jan Demel
Tvůrce
Avatar
Jan Demel:12.12.2013 21:53

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Jan Demel:12.12.2013 21:56

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ý
Tvůrce
Avatar
Odpovídá na Jan Demel
Jan Vargovský:12.12.2013 21:56

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Jan Demel:12.12.2013 22:00

Okey ...

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:13.12.2013 6:49

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

 
Nahoru Odpovědět
13.12.2013 6:49
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Demel:13.12.2013 15:41

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.