Diskuze: Simulace vstupu z klávesnice
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 21 zpráv z 21.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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
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. :/
No dobré, tak to by jsem měl. Zbývá mi asi jenom jedna věc 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();
}
}
}
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?
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
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.
Thread.Sleep(int ms);
Používej tlačítko odpovědět nebo pak budeš čekat na odpověď pár hodin...
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.ReadKey(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.
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.ReadKey(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.
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...
není jednoduší si v tom ATF zatrhnout "přeskakovat chyby"?
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;
}
}
}
}
Zobrazeno 21 zpráv z 21.