C# skicka en slumpad sträng till notepad

Permalänk
Medlem

C# skicka en slumpad sträng till notepad

Tjena !
Jag har experimenterat lite med "SendKeys.Send" och "mouse_event" just nu, dvs Lite små grejer som att t.ex skicka en textsträng till notepad och så.

Men jag skulle vilja veta hur man skickar en slump-genererad sträng till notepad. Altså man klickar på en button i sitt windows form så skickas en slumpartad sträng genom "SendKeys.Send" funktionen till notepad. Ska förklara hur jag hade tänkt mig med exempel här under:

EX1 strängen har alltid samma namn men(slut siffran ändras)

"Spår Nummer - x" (x är då ett random genererat nummer mellan kanske 1-50)

EX2

Man trycker på knappen och det genereras en slumpvald sträng t.ex "CdxFsf4" som sedan skickas
till notepad genom Send.Keys funktionen.

Just nu lyckas jag bara skicka en förbestämmd "sträng" så jag hade varit tacksam för alla tips man kan få !

Här kommer lite kod ur mitt projekt, så ni ser vad det handlar om

private void button2_Click(object sender, EventArgs e)
{
Cursor.Position = new Point(800, 680); // Rör Pekaren till notepad
System.Threading.Thread.Sleep(100); // väntar 100 ms
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // Gör ett mouseclick i notepad-
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); // för att få fokus
System.Threading.Thread.Sleep(200); // väntar igen
SendKeys.Send("Artist-Spårnummer-X"); // skickar strängen(som jag egentligen vill slumpa)

}

Permalänk
Medlem

Detta bör slumpa en textrad + ett nummer..

private void button2_Click(object sender, EventArgs e) { Random random = new Random(); int randomNumber = random.Next(1,50); Cursor.Position = new Point(800, 680); // Rör Pekaren till notepad System.Threading.Thread.Sleep(100); // väntar 100 ms mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // Gör ett mouseclick i notepad- mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); // för att få fokus System.Threading.Thread.Sleep(200); // väntar igen SendKeys.Send(CreateRandomPassword(7) + "-" + randomNumber); // skickar strängen } public static string CreateRandomPassword(int PasswordLength) { string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGH JKLMNOPQRSTUVWXYZ0123456789"; Random rNum = new Random(); string NewPassWord = ""; for (int i = 0; i < PasswordLength; i++) { NewPassWord += allowedChars[rNum.Next(allowedChars.Length)]; } return NewPassWord; }

EDIT, la till textrad random..

Permalänk
Hedersmedlem

Sendkeys vill man nog dock egentligen undvika om det är möjligt. Man måste till exempel lägga in fördröjningar för att det skall fungera över huvud taget och det är sannolikt att det ändå misslyckas (kanske klickar användaren på ett annat fönster medan programmet väntar/kanske gör windows något som tar ovanligt lång tid/vad som helst).
SendMessage är mera pålitligt, men lite bökigare att använda.

public partial class Form1 : Form { [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "FindWindowEx")] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern int SendMessage(IntPtr hwnd, int msg, int wParam, StringBuilder sb); Random r = new Random(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("notepad"); if (p.Length > 0 && p[0] != null) { IntPtr child = FindWindowEx(p[0].MainWindowHandle, new IntPtr(0), "Edit", null); int u = SendMessage(child, 0xE, 0, null); StringBuilder sb = new StringBuilder(u+1); SendMessage(child, 0xD, sb.Capacity, sb); sb.Append("\r\nArtist - Spårnummer - " + (r.Next() % 50 + 1).ToString()); SendMessage(child, 0xC, sb.Length, sb); } } }