Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249486 (10922)
  Suchen
 Zurück zur Übersicht
 AutorThema: Handle fremdFenster
Werner Menegoni
Datum:17.08.01 09:47 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken  


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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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