Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249486 (10922)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Handle fremdFenster
Werner Menegoni
| Datum:17.08.01 09:47 (Werner.Menegoni@skf.com) |
Ich starte eien fremdes Programm (Notepad ist nur ein Beispiel) mit folgenden Befehlen Declare Notepad%, NotepadWin%,x% ' Notepad starten Let Notepad% = WinExec("NOTEPAD.EXE",1) ' Handle der Anwendung Let NotepadWin% = GetActiveWindow() ' Handle des Notepad-Hauptfensters 'Handle des aktuellen Elementes ist in %GetFocus SendString(NotepadWin%,"%FO") ' ALT-F O = Datei - oeffnen '******** bis hierher gings gut *************** 'nun will ich die Tab-Taste simulieren 'doch das bringe ich nicht fertig. 'die untere Befehle habe ich schon der Reihe nach durchprobiert 'doch keiner führt zum gewünschten Ergebnis let x% = @getfocus let x% = @Findwindow("Open") let x% ) @GetActiveWindow() @Sendstring(x%,"{TAB}") @Sendkey(x%,9) Ich arbeite mit Profan 6.0 und WIN NT4.0 ich habe schon die 1Bit version und die 32Bit Versucht versucht doch leider kein Erfolg. P.S. Ich weiß, dass ich das Programm auch mit Parameterübergabe starten kann. Doch das will ich nicht. Das Programm Notepade.exe ist ja auch nur ein Beispiel Bitte helft mir M.f.g. Werner
Uwe ''Pascal'' Niemeier
| Datum:18.08.01 18:07 (Pascalxd@owl-online.de) |
Hallo Werner! Eigendlich sollte dein Beispiel funktionieren (tut es bei mir auch), wobei du nichtmal das Handle des Öffnen-Dialoges verwenden mußt; das Hauptfenster des Programmes sollte die simulierten Eingaben automatisch umleiten:
    declare x%

    winexec("NOTEPAD.EXE",1)
    x%=getactivewindow()

    sendstring(x%,"%df")

    sendstring(x%,"Dateiname")
    sleep 1000
    sendstring(x%,"{TAB}")
    sleep 1000
    sendstring(x%,"{TAB}")
    sleep 1000
    sendstring(x%,"{TAB}")
    sleep 1000
    sendkey(x%,13)

    messagebox("Demo Ende","Meldung",0)
Natürlich müssen Programm- bzw. Öffnen-Fenster zum Empfang der Eingaben aktiv sein und den Focus haben. HTH Pascal
Werner Menegoni
| Datum:21.08.01 11:24 |
Hallo Uwe Vielen Dank dass dur dich mit meinem Problem beschäftigt hast. Deinen Vorschlag habe ich getestet. Nachdem ich den Befehl 'SLEEP' durch eine Schleife ersetzt habe klappte es Jedoch nur auf einem anderem Rechner WIN98 plus Profan 6.0 32Bit will ich das Programm jedoch auf NT 4.0 laufen lassen passiert folgendes. im 32Bit Modus stürzt mein Rrechner komplett ab. im 16Bit Modus kann ich zwar den Dateinamen in das Inputfeld bringen, jedoch die TAB-Taste wird nicht bearbeitet. Es müsste doch möglich sein, das Programm auch auf dem NT-Rechner zum laufen zu bringen m.f.G.Werner
Uwe ''Pascal'' Niemeier
| Datum:23.08.01 10:36 (Pascalxd@owl-online.de) |
Hallo Werner! Weil ich nicht mit NT arbeite, kann ich nur spekulieren... Hier ein Beispiel für Profan 6, daß ohne Tataur-Simulation auskommt:
    declare x%,y%,a$
    def Pause(1) !"KERNEL32","Sleep"

    winexec("NOTEPAD.EXE",1)
    x%=getactivewindow()'-----Hauptfenster

    sendstring(x%,"%df")
    x%=findwindow("Öffnen")'--Öffnen-Dialog

    Pause(1000)

    y%=GetHandle(x%,1152)'----2. Parameter: ID des Edits
    a$="Dateiname"
    sendmessage(y%,12,0,add(addr(a$),1))'--SetText geht nicht(?)

    Pause(1000)

    y%=GetHandle(x%,2)'-------2. Parameter: ID des Abbrechen-Buttons
    sendmessage(y%,245,0,0)'--Click simulieren

    messagebox("Demo Ende","Meldung",0)
Die ID's der anzusprechenden Elemente können je nach Herkunft des Dialogs allerdings abweichen. Auf meiner HP findest du unter http://members.aol.com/pascalxd/pages/beta.html ein Tool (FensterFänger), um diese zu ermitteln. HTH Pascal
Werner Menegoni
| Datum:24.08.01 07:25 (Werner.Menegoni@skf.com) |
Hallo Uwe klappt leider immer noch nicht. schon der erste Befehl def Pause........ wird nicht angenommen. Ich befürchte, dass mit meinem Rechner etwas nicht in Ordnung ist. Es wäre toll wenn ein anderer User welcher einen NT-Rechner hat dieses Problem bzw. Deine Vorschläge austesten könnte. Vielleicht brauche ich auch die Version 7.X das sollte auch kein Problem sein.Ich wollte nur abwarten bis einige Bugs beseitigt sind. Gruss Werner
Uwe ''Pascal'' Niemeier
| Datum:24.08.01 09:49 (Pascalxd@owl-online.de) |
Hallo Werner! Die PAUSE-Sache soll ja nur eine Verzögerung bewirken, um den Effekt deutlich zu machen. (Hab's unter Win95 + Profan 6.6 getestet) Gibt's die Sleep-API unter NT denn nicht?? Aber mal was anderes: Ist denn bei besagtem Programm der OK-Button des Öffnen-Dialoges nicht ein Def-Button, also voraktiviert? Dann sollte nach (simulierter) Eingabe des Dateinamens bereits ein simuliertes Enter an den Dialog ausreichen, um die Eingabe zu quittieren (ohne den OK-Button gezielt anzusprechen) Obwohl das im Moment auch nicht weiterhilft :-( Also sind jetzt die NT-Anwender gefordert... SeeYou Pascal
Werner Menegoni
| Datum:29.08.01 08:29 (Werner.Menegoni@skf.com) |
Welcher User hat einen NT-Rechner und kann das Programm mal kurz testen, ob es bei ihm läuft. also NT-User ihr seit am Zug. Vielen Dank im Vorraus declare x% winexec("NOTEPAD.EXE",1) x%=getactivewindow() sendstring(x%,"%df") sendstring(x%,"Dateiname") sleep 1000 sendstring(x%,"{TAB}") sleep 1000 sendstring(x%,"{TAB}") sleep 1000 sendstring(x%,"{TAB}") sleep 1000 sendkey(x%,13) messagebox("Demo Ende","Meldung",0) m.f.G. Werner Menegoni
Jörg Sellmeyer
| Datum:29.08.01 15:36 (joerse@gmx.de) |
Hallo, Ich hab' kei NT, aber hast Du schon mal versucht Deine Variablen als Longint zu deklarieren ? Also : declare x& winexec("NOTEPAD.EXE",1) x&=getactivewindow() Vielleicht hilft's ja. Jörg
Werner Menegoni
| Datum:06.09.01 07:45 (Werner.Menegoni@skf.com) |
Hallo Danke an alle die mir helfen wollten. Leider hat es nicht geklappt und ein NT-User hat sich in diesem Forum nicht gemeldet. Ich muss jetzt halt auf eine andere Programmiersprache umsteigen mit freundlichen Grüssen Werner Menegoni
Roland G. Hülsmann
| Datum: 06.09.01 09:31 (rgh-soft@t-online.de) |
Hast Du Deine Sache schon mal mit der aktuellen Betaversion von PROFAN 7.5 getetestet? Gerade die Funtion GetActiveWindow wurde hier überarbeitet, damit sie besser mit Fenstern von fremden Programmen umgehen kann.

| Zurück zur Übersicht