Autor | Thema: Handle fremdFenster | | 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
|
| | 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
|
| | 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
|
| | 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
|
| | 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
|
| | 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
|
| | 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
|
| | 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
|
| | 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
|
| | 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.
|
|
|