Benutzer mit den meisten Antworten
SendKeys benutzen fuer externes program

Frage
-
hallo leute,
ich habe eine kleine frage mit einem problem dran.
ich bin momentan an einem kleinen program am arbeiten.
ablauf des program:
1 Externes program aufrufen (oeffnen) kein problem
2 buchstaben an das geoefnete program schicken (da ist mein Problem)
3 Externes program schliesen
4 24 std warten gehe zu pos 1
warum das denn,
ich habe einen rechner der mit xp bespielt ist, der aber auch als server fuer ein programm benutzt wird, zugleich ist der rechner in ein reck
verbaut und mit einer tuer verschlossen. das grosse problem ist jetzt, das server program hat eine liz, das hat zufolge bin 30 tagen muss min 1 mal das program aufgerufen werden und der admin muss sich da anmelden. tut er es nicht in dem zeit raum werden die clients und der zugang vom program blockiert, dies kann den nur von einem service techniker mit einem super pin wieder freigeschaltet werden (Kosten). um diese kosten ewig zuvermeiden, habe ich mir das kleine program ein fallen lassen. nur das problem ist momentan nur mit dem schicken der buchstaben.
ich danke allen die mir bei dem kleinem problem helfen koennen.
Antworten
-
Hallo Dietmar,
was genau ist dein Problem bzw. wo schlägt dein Versuch Fehl? Hast du eine Fehlermeldung? Es wäre auch hilfreich wenn du deinen Code posten könntest zu Punkt 2.
An Sich ist das ja nichts komplexes die SendKeys methode zu benutzen, man muss lediglich darauf achten, dass das Fenster an das man die Zeichen senden will auch aktiv ist (den Fokus hat). Das bekommt man mit den Funktionen FindWindow und SetForegroundWindow .
Ein schönes Tutorial kannst su dir auch hier anschauen:
Steuern von Drittprogrammen mit Hilfe der SendKeys-Methode
http://www.activevb.de/tutorials/tut_sendkeys/sendkeys.htmlSendKeys Klasse bei MSDN
Wie gesagt, wär es hilfreich wenn du deinen Code, der nicht funktioniert mal posten könntest, dann kann man die auch besser helfen.
http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
MfG, Sebastian Gross- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. August 2010 14:02
-
Hi,
1 Externes program aufrufen (oeffnen) kein problem
2 buchstaben an das geoefnete program schicken (da ist mein Problem)
3 Externes program schliesen
was genau ist denn bei Punkt 2 das Problem? Wenn Du das Programm geöffnet hast, müsstest Du, wenn Du eine Eingabe machen willst, natürlich noch den Cursor ins entsprechende Eingabefeld bewegen. Probier doch einfach mal, wie viel "Tabs" Du manuell drücken musst, bis Du im gewünschten Feld bist. Diese Anzahl Tabs {TAB} sein) solltest Du dann vor dem senden der Buchstaben noch an an das Programm schicken.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. August 2010 14:03
-
Hallo Dietmar 74,
offen gestanden habe ich dein Problem auch nicht ganz nachvollziehen können.
Dennoch hier ein Code, der beim Start den Editor (als Beispielprogramm öffnet) und dort „Dies ist ein Test“ reinschreibt.
Wenn es also nur dein Problem ist, in ein bestimmtes Eingabefeld einen Anmeldecode einzugeben, please feel free to modify the code:
Public Class Form1
' Get a handle to an application window.
Declare Auto Function FindWindow Lib "USER32.DLL" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
' Activate an application window.
Declare Auto Function SetForegroundWindow Lib "USER32.DLL" _
(ByVal hWnd As IntPtr) As Boolean
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Anwendung muss bereits gestartet sein !!! Nicht erst hier starten
'//Fenster suchen
Dim myHandle As IntPtr = FindWindow("Notepad", "Unbenannt - Editor") '//Hier mit dem beliebiegen Fenstername austauschen
' Verify that Calculator is a running process.
If myHandle = IntPtr.Zero Then
MsgBox("Notepad nicht gestartet")
Return
End If
' Setzt die Anwendung in den Vordergrund und gibt die Werte ein
SetForegroundWindow(myHandle)
SendKeys.SendWait("111")
SendKeys.SendWait("*")
SendKeys.SendWait("11")
SendKeys.SendWait("=")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SetForegroundWindow(RichTextBox1.TextLength)
RichTextBox1.Focus()
SendKeys.SendWait("111")
SendKeys.SendWait("*")
SendKeys.SendWait("11")
SendKeys.SendWait("=")
SendKeys.Send("A")
'SendKeys.Send("^{x}")
SendKeys.Send("{ENTER}")
SendKeys.Send("{ENTER}")
SendKeys.Send("Ende")
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
SendKeys.SendWait("%{D}")
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
SendKeys.SendWait("%{P}")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Process.Start("C:\WINDOWS\notepad.exe")
Timer1.Enabled = True
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Process.Start("C:\WINDOWS\notepad.exe")
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Interval = 200
Timer1.Enabled = True
Dim myHandle As IntPtr = FindWindow("Notepad", "Unbenannt - Editor") '//Hier mit dem beliebiegen Fenstername austauschen
'SendKeys.Send("^{x}")
SendKeys.SendWait("D")
SendKeys.SendWait("A")
SendKeys.SendWait("S")
SendKeys.Send(" ")
SendKeys.SendWait("I")
SendKeys.SendWait("S")
SendKeys.SendWait("T")
SendKeys.Send("{ENTER}")
SendKeys.SendWait("ein")
SendKeys.Send(" ")
SendKeys.Send("Test")
SendKeys.Send("{ENTER}")
SendKeys.Send("Ende")
End Sub
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
End Sub
End Class
Liebe Grüße Stefan- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. August 2010 14:03
Alle Antworten
-
Hallo Dietmar,
was genau ist dein Problem bzw. wo schlägt dein Versuch Fehl? Hast du eine Fehlermeldung? Es wäre auch hilfreich wenn du deinen Code posten könntest zu Punkt 2.
An Sich ist das ja nichts komplexes die SendKeys methode zu benutzen, man muss lediglich darauf achten, dass das Fenster an das man die Zeichen senden will auch aktiv ist (den Fokus hat). Das bekommt man mit den Funktionen FindWindow und SetForegroundWindow .
Ein schönes Tutorial kannst su dir auch hier anschauen:
Steuern von Drittprogrammen mit Hilfe der SendKeys-Methode
http://www.activevb.de/tutorials/tut_sendkeys/sendkeys.htmlSendKeys Klasse bei MSDN
Wie gesagt, wär es hilfreich wenn du deinen Code, der nicht funktioniert mal posten könntest, dann kann man die auch besser helfen.
http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
MfG, Sebastian Gross- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. August 2010 14:02
-
Hi,
1 Externes program aufrufen (oeffnen) kein problem
2 buchstaben an das geoefnete program schicken (da ist mein Problem)
3 Externes program schliesen
was genau ist denn bei Punkt 2 das Problem? Wenn Du das Programm geöffnet hast, müsstest Du, wenn Du eine Eingabe machen willst, natürlich noch den Cursor ins entsprechende Eingabefeld bewegen. Probier doch einfach mal, wie viel "Tabs" Du manuell drücken musst, bis Du im gewünschten Feld bist. Diese Anzahl Tabs {TAB} sein) solltest Du dann vor dem senden der Buchstaben noch an an das Programm schicken.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. August 2010 14:03
-
Hallo Dietmar 74,
offen gestanden habe ich dein Problem auch nicht ganz nachvollziehen können.
Dennoch hier ein Code, der beim Start den Editor (als Beispielprogramm öffnet) und dort „Dies ist ein Test“ reinschreibt.
Wenn es also nur dein Problem ist, in ein bestimmtes Eingabefeld einen Anmeldecode einzugeben, please feel free to modify the code:
Public Class Form1
' Get a handle to an application window.
Declare Auto Function FindWindow Lib "USER32.DLL" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
' Activate an application window.
Declare Auto Function SetForegroundWindow Lib "USER32.DLL" _
(ByVal hWnd As IntPtr) As Boolean
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Anwendung muss bereits gestartet sein !!! Nicht erst hier starten
'//Fenster suchen
Dim myHandle As IntPtr = FindWindow("Notepad", "Unbenannt - Editor") '//Hier mit dem beliebiegen Fenstername austauschen
' Verify that Calculator is a running process.
If myHandle = IntPtr.Zero Then
MsgBox("Notepad nicht gestartet")
Return
End If
' Setzt die Anwendung in den Vordergrund und gibt die Werte ein
SetForegroundWindow(myHandle)
SendKeys.SendWait("111")
SendKeys.SendWait("*")
SendKeys.SendWait("11")
SendKeys.SendWait("=")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SetForegroundWindow(RichTextBox1.TextLength)
RichTextBox1.Focus()
SendKeys.SendWait("111")
SendKeys.SendWait("*")
SendKeys.SendWait("11")
SendKeys.SendWait("=")
SendKeys.Send("A")
'SendKeys.Send("^{x}")
SendKeys.Send("{ENTER}")
SendKeys.Send("{ENTER}")
SendKeys.Send("Ende")
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
SendKeys.SendWait("%{D}")
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
SendKeys.SendWait("%{P}")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Process.Start("C:\WINDOWS\notepad.exe")
Timer1.Enabled = True
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Process.Start("C:\WINDOWS\notepad.exe")
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Interval = 200
Timer1.Enabled = True
Dim myHandle As IntPtr = FindWindow("Notepad", "Unbenannt - Editor") '//Hier mit dem beliebiegen Fenstername austauschen
'SendKeys.Send("^{x}")
SendKeys.SendWait("D")
SendKeys.SendWait("A")
SendKeys.SendWait("S")
SendKeys.Send(" ")
SendKeys.SendWait("I")
SendKeys.SendWait("S")
SendKeys.SendWait("T")
SendKeys.Send("{ENTER}")
SendKeys.SendWait("ein")
SendKeys.Send(" ")
SendKeys.Send("Test")
SendKeys.Send("{ENTER}")
SendKeys.Send("Ende")
End Sub
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
End Sub
End Class
Liebe Grüße Stefan- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. August 2010 14:03