strico Geschrieben 1. August 2006 Teilen Geschrieben 1. August 2006 Hallo, ich möchte ein fremdes Programm steuern, um verschiedene (gleiche) Arbeiten zu automatisieren. Das Programm bietet keine COM-Schnittstellen an. Wäre dankbar für verschiedene Ansätze. Vielleicht über den Handle oder so? Angenommen ich öffne ein Programm mit 3 Textboxen. Nun soll der Fokus in die 2te Box gesetzt werden und genau dort ein Text hineingeschrieben werden. Hat jede Textbox ein Handle??? Kann man die Box darüber ansprechen, wenn ja, wie? Die Möglichkeit mit sendkeys zu arbeiten ist nicht so berauschend. Wenn das Programm den Fokus verliert werden die Tastendrücke falsch weitergeleitet. Und in irgendeine Box den Fokus über Tab zu setzen ist auch nicht so berauschend und sicher. Vielen Dak für eure Antworten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
adragon Geschrieben 1. August 2006 Teilen Geschrieben 1. August 2006 Hallo, ich möchte ein fremdes Programm steuern, um verschiedene (gleiche) Arbeiten zu automatisieren. Das Programm bietet keine COM-Schnittstellen an. Hallo.. mh nur aus neugier was für gleiche Arbeiten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grueni Geschrieben 1. August 2006 Teilen Geschrieben 1. August 2006 Schau mal hier: http://forum.fachinformatiker.de/delphi-rpg-cl-sonstige/93056-menue-programmen-auslesen-delphi.html Ich denke mit ein paar der Tips kannst du was anfangen. Mit was für ner Sprache willst das eigentlich umsetzen? Ich glaub so richtig gehört das Problem nicht in .NET Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 1. August 2006 Autor Teilen Geschrieben 1. August 2006 Sry, das ich vergessen habe zu sagen. dass ich das Problem mit VB.NET lösen möchte. Ich schau mir den Link dann mal an. Danke schon mal. Nachtrag: Wenn es mit der API möglich ist, müsste mir nur noch erklärt werden wie ich über die Handles in .NET hin und herspringe. Ich versuche derzeit mit Diagnostics.Process die Eingaben auf den Process irgendwie umzuleiten. Ich weiß allerdings nicht, ob das möglich ist, was ich brauche. Zu den gleichen Arbeiten: Wir haben mehrere TK-Anlagen. Dazu gibt es ein Tool, welches leider keine Möglichkeit bietet eine Änderung auf allen Anlagen zu tätigen. Man muss so eine Einstellung bei jeder Anlage machen. Dies soll automatisch gehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
U-- °LoneWolf° Geschrieben 1. August 2006 Teilen Geschrieben 1. August 2006 Für sowas gibt es winrunner :cool: aber ich wäre mit solchen funktionen bei einer TK anlage vorsichtigt da es vorkommen kann das dir mal ein handel wegfliegt usw. und naja dann: "TK Konfiguartion fürn *****" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 1. August 2006 Autor Teilen Geschrieben 1. August 2006 Das mit dem Winrunner bringt mich nicht weiter. Ist das ein Programm, oder eine Bibliothek? Wenn Winrunner irgendwie Programme steuern kann, muss es doch auch programmierbar sein, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
U-- °LoneWolf° Geschrieben 1. August 2006 Teilen Geschrieben 1. August 2006 Winrunner ist eine Testing software mit der es möglich ist eine ander software zu steuern. Leider habe ich selbst die erfahrung gemacht das es nicht ganz ohne ist so etwas selbst zu Entwickeln. DEas Problem ist das du beim straten eines Programms nicxht immer das selbe handel hast und naj der Name eines Fensters ist auch nicht immer der gleiche. Siehe Word oder den IE (als negativbeispiel) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 2. August 2006 Autor Teilen Geschrieben 2. August 2006 Angenommen das Fenster hat immer den gleichen Namen, hättest du dann eine herangehensweise für mich? ------------------------------------------------------------- Ich habe mir den Link : http://forum.fachinformatiker.de/del...en-delphi.html angeschaut und versucht die Methode FindWindow zu verwenden (über Declare eingebunden). Leider hat sich VS2005 gemeldet: Das Gleichgewicht des Stapels wurde gestört ... irgendwas mit PInvoke Zielsignatur etc. Kann man die API-Funktionen nicht verwenden oder was mach ich falsch? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grueni Geschrieben 2. August 2006 Teilen Geschrieben 2. August 2006 ... angeschaut und versucht die Methode FindWindow zu verwenden (über Declare eingebunden). Leider hat sich VS2005 gemeldet: Das Gleichgewicht des Stapels wurde gestört ... irgendwas mit PInvoke Zielsignatur etc. Kann man die API-Funktionen nicht verwenden oder was mach ich falsch? Das sollte eigentlich schon funktionieren. Zumindest hab ich ein Beispiel im Netz gefunden: http://support.microsoft.com/default.aspx?scid=kb%3Bde%3B302295 Wenn du deinen Quelltext postest, kann dir viel eher geholfen werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 2. August 2006 Autor Teilen Geschrieben 2. August 2006 Auf der Microsoft Seite habe ich eine FindWindow Version mit einem Long-Wert als ersten Parameter gefunden. Mit String als ersten Parameter gehts soweit. Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click MsgBox(FindWindow("", "")) End Sub Wie benutze ich jetzt diese Methode? Ich hab mal bissl rumprobiert und festgestellt, dass egal, was ich für Parameter übergebe immer eine Zahl bekomme, die jedes mal, wenn ich klicke größer wird. Was ist der Unterschied zwischen Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long und Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As String) As Long Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 2. August 2006 Autor Teilen Geschrieben 2. August 2006 Hab mir mal noch paar gedanken gemacht. Ich hab ja nen 32 Bit System und Long ist 8 Byte groß. Wenn ich jetzt den FindWindow-Rückgabewert nach Links verschiebe, kommt 0 raus, wenn der Rechner zu ist und eine stets konstante Zahl, wenn er auf ist. Also schonmal nen Erfolg. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click MsgBox(FindWindow(Nothing, "Rechner") << 32) End Sub Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Ich hoffe nur, dass ein Handle auch 32 Bit hat, nicht das da noch etwas anderes mit drin hängt. Ich glaube, ich muss die 32 Bit auch wieder nach Rechts verschieben, wäre ja sonst ne falsche Zahl. 2. Wie weiter, wenn ich jetzt das Fensterhandle habe? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
U-- °LoneWolf° Geschrieben 2. August 2006 Teilen Geschrieben 2. August 2006 naja inerhalb deines fensters goibt es komponenten die ebenfals ein handel habe. nur wie du daran kommst kann ich dir nicht sagen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Code Poet Geschrieben 2. August 2006 Teilen Geschrieben 2. August 2006 Man kann die Kindkomponenten über eine Liste abfragen, die ihrerseits wieder eine Liste mit Kindkomponenten besitzen. Ist allerdings ziemlich tricky und auch nicht ganz fehlerungefährlich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 2. August 2006 Autor Teilen Geschrieben 2. August 2006 Geht das zufällig über FindWindowEx? Wo können da überall Fehler auftreten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 3. August 2006 Autor Teilen Geschrieben 3. August 2006 Wieder was neues. Anfangs habe ich erwähnt, dass der Stapel aus dem Gleichgewicht gerät. Das liegt daran, dass der Datentyp Long 8 Byte in .Net hat. Man muss Int32 nehmen, dann klappt das. Beispiel: so nicht Declare Function BringWindowToTop Lib "user32.dll" (ByVal hWnd As Long) As Long so muss es gemacht werden Declare Function BringWindowToTop Lib "user32.dll" (ByVal hWnd As Int32) As Int32 Wenn ich weiter gekommen bin melde ich mich wieder. Vielleicht hat ja auch noch jemand anderes Anregungen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
k4fu Geschrieben 3. August 2006 Teilen Geschrieben 3. August 2006 hab selbiges mal in vb6 gemacht (hat auf jedenfall funktioniert ;-)) damit kann man ein fenster in den vordergrund holen Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function SetWindowPos Lib "user32" _ (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _ ByVal X As Long, ByVal y As Long, ByVal cx As Long, _ ByVal cy As Long, ByVal wFlags As Long) As Long Public Sub vVordergrund(Optional ByVal sDialogName As String, _ Optional ByVal lHandle As Long) Dim wHandle As Long If sDialogName <> "" Then wHandle = FindWindow(vbNullString, sDialogName) ElseIf lHandle <> 0 Then wHandle = lHandle End If Call SetWindowPos(wHandle, -1, 0, 0, 0, 0, 3) End Sub Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 3. August 2006 Autor Teilen Geschrieben 3. August 2006 So bekomme ich alle Handles des Rechners. Die sind dann in der Arraylist gespeichert. Dim al As New ArrayList '#----------------------------------- Public Delegate Function EnumChilds(ByVal ChWnd As Int32, ByVal lParam As Int32) As Int32 Public Declare Function EnumChildWindows Lib "user32" ( _ ByVal hWndParent As Int32, _ ByVal lpEnumFunc As EnumChilds, _ ByVal lParam As Int32) As Int32 '#----------------------------------- Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Int32 Public Sub SearchAllChildsFrom(ByVal hwnd As Int32) EnumChildWindows(hwnd, AddressOf _EnumChildCallBackFunc_, 0) End Sub ' Public Function _EnumChildCallBackFunc_(ByVal ChWnd As Int32, ByVal lParam As Int32) As Int32 al.Add(ChWnd) Return 1 '# Damit alle gesucht werden Return 0 würde nur 1 suchen, bzw. suche abbrechen End Function '# '# '# Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim i As Int32 i = FindWindow(Nothing, "Rechner") Me.SearchAllChildsFrom(i) End Sub Wie kann ich jetzt Eigenschaften der Steuerelemente, die hinter den Handles liegen, ansprechen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.