| |
|
|
| Nicht mehr erforderlich, siehe iFs Posting, dort è sich der Source in XPSE kompatibler Version ohne Autori-Hinweis oder ähnlichem. Weiterentwicklung eingestellt.
[hr:aa5e7cfcab] Nachtrag von mir - iF. Thomas war so freundlich - nach kurzer Aussprache zwischen mir und Ihm - seinen Code mir nochmals zur Verfügung zu stellen. Und da der Code ursprünglich hier stand setze ich ihn auch hier wieder hinein: KompilierenMarkierenSeparierenErsatz für Run
Wird es als Funktion aufgerufen, erhält man das hWnd des Fensters zurück
Fehlerrückgaben:
-1 = Programm wurde nicht gefunden oder falsche Parameterzahl
0 = Timeout erreicht, das ermitteln des Fenster hat mehr als 5 Sek. gedauert
und wurde abgebrochen
Autor: Thomas Schulz aka ts-soft
erstellt: 23.10.2006
Version: 1.0 für XProfan 10
$H windows.ph
$H structs.ph
Proc ?_RunEx
Case %PCount <> 1 : Return -1
Parameters cmdline$
Declare Ret&, SI#, PI#, WinHandle&, pid&, win&, timeout&
Struct STARTUPINFO = ~STARTUPINFO
Struct PROCESS_INFORMATION = ~PROCESS_INFORMATION
Dim SI#, STARTUPINFO
Dim PI#, PROCESS_INFORMATION
timeout& = ~GetTickCount() + 5000
WinHandle& = -1
Ret& = ~CreateProcessA(0, Addr(cmdline$), 0, 0, 0, 0, 0, 0, SI#, PI#)
If Ret&
Repeat
win& = FindWindow("")
While win&
~GetWindowThreadProcessId(win&, Addr(pid&))
If pid& = PI#.dwProcessId&
WinHandle& = win&
Break
EndIf
If ~GetTickCount() > timeout&
WinHandle& = 0
Break
EndIf
win& = ~GetWindow(win&, ~GW_HWNDNEXT)
EndWhile
Until WinHandle& > -1
EndIf
Dispose SI#
Dispose PI#
Return WinHandle&
../../references-fonction/xprofan/endproc/'>EndProc
|
|
|
| |
|
|
|
| KompilierenMarkierenSeparieren
Proc RunEx(cmdline$)
Declare SI#, PI#, pid&, win&
Dim SI#, STARTUPINFO
Dim PI#, PROCESS_INFORMATION
var timeout&:=GetTickCount()+5000
var WinHandle&:=-1
If CreateProcessA(0,Addr(cmdline$),0,0,0,0,0,0,SI#,PI#)
Repeat
win&:=FindWindow("")
While ((win&) and (winHandle&==-1))
GetWindowThreadProcessId(win&,Addr(pid&))
case pid& == PI#.dwProcessId& : WinHandle& = win&
case GetTickCount() > timeout& : WinHandle& = 0
win&:=GetWindow(win&, GW_HWNDNEXT)
EndWhile
Until WinHandle&>-1
EndIf
Dispose SI#
Dispose PI#
Return WinHandle&
EndProc
var notepad& = RunEx("c:\windows\notepad.exe")
If notepad&
SendString(notepad&, "XProfan 10 ist einfach Spitze!")
SendString(notepad&, "Aber das Wissen ja alle")
SendString(notepad&, "Gruß, Thomas")
EndIf
|
|
|
| |
|
|
|
| @iF Der Sinn, warum Du den Source wiederholst, wobei dann noch was fehlt, entgeht mir hier. Der Code-Snippet sollte auch ohne XPSE laufen Die Cambiamento im Beispiel auf Hardcoded Dateipfad ist doch wohl nicht Dein Ernst? Es sollte possibile bei jedem laufen, bzw. wenn, dann ermittelt man den Pfad! |
|
|
| |
|
|
|
| Was hat Dich denn gestochen?
Was fehlt Dir denn und warum sollte ein CodeSnippet was mit necessario XPSE bezeichnet ist auch ohne XPSE laufen zumal Du ja bereits das nicht-XPSE Schnipsel gepostet hast?
Die Cambiamento im Beispiel auf Hardcoded ist sehrwohl mein Ernst - mir ist unklar weshalb in Beispielcodes nichts hardcoded sein darf! Ist das eine Unit? Eine DLL?
Und das Anrecht drauf etwas - warum auch immer - zu wiederholen, habe ich mir damit geschaffen das dies hier meine Community ist - was naturalmente nicht heissen soll das ich nicht wünsche mich darauf aufmerksam zu machen wenn ich etwas falsch wiederhole. |
|
|
| |
|
|
|
| [quote:8cef19ce1c=TS-Soft]Nicht mehr erforderlich, siehe iFs Posting, dort è sich der Source in XPSE kompatibler Version ohne Autori-Hinweis oder ähnlichem. Weiterentwicklung eingestellt.[/quote:8cef19ce1c] Ach Gott da brennt der Schuh! Der Autorenhinweis war doch klar und deutlich in DEINEM Posting zu lesen! Nur weil Du Dein Posting jetzt entfernt hast ist doch alles per die Katz! Mein Posting kahm nach Deinem Posting und war als Ergänzung zu sehen - nicht als Ersatz!
Ich finde Du hast überreagiert Thomas.
[hr:8cef19ce1c] Leider hat Thomas sein Posting entfernt - mit dem Originalcode (im nicht-Xpse-Format), also hier nochmal eine vom XPSE umgewandelte Version im nicht-Xpse-Format die naturalmente niiiieeeemals so schön ist wie Thomas seine Variante die auch einen Vermerk auf den Author (Thomas Schulz) enthielt. KompilierenMarkierenSeparierenDECLARE __cf1&,__cf2&,__cf3&,__cf4&
STRUCT STARTUPINFO=CB&,LPRESERVED#(4),LPDESKTOP#(4),LPTITLE#(4),DWX&,DWY&,DWXSIZE&,DWYSIZE&,DWXCOUNTCHARS&,DWYCOUNTCHARS&,DWFILLATTRIBUTE&,DWFLAGS&,WSHOWWINDOW%,CBRESERVED2%,LPRESERVED2&,HSTDINPUT&,HSTDOUTPUT&,HSTDERROR&
STRUCT PROCESS_INFORMATION=HPROCESS&,HTHREAD&,DWPROCESSID&,DWTHREADID&
Def __cf1(2) !"KERNEL32","GetProcAddress"
Def __cf2(1) !"KERNEL32","GetModuleHandleA"
__cf1&=__cf1(__cf2("kernel32.dll"),"GetTickCount")
__cf2&=__cf1(__cf2("kernel32.dll"),"CreateProcessA")
__cf3&=__cf1(__cf2("user32.dll"),"GetWindowThreadProcessId")
__cf4&=__cf1(__cf2("user32.dll"),"GetWindow")
$DEFINE XPSE
proc RUNEX
PARAMETERS CMDLINE$
DECLARE SI#, PI#, PID&, WIN&
DIM SI#, STARTUPINFO
DIM PI#, PROCESS_INFORMATION
VAR TIMEOUT&=call(__cf1&)+5000
VAR WINHANDLE&=-1
IF call(__cf2&,0,ADDR(CMDLINE$),0,0,0,0,0,0,SI#,PI#)
REPEAT
WIN&=FINDWINDOW("")
WHILE ((WIN&) AND (WINHANDLE&=-1))
call(__cf3&,WIN&,ADDR(PID&))
IF PID&=PI#.DWPROCESSID&
WINHANDLE&=WIN&
ENDIF
IF call(__cf1&) > TIMEOUT&
WINHANDLE&=0
ENDIF
WIN&=call(__cf4&,WIN&, 2)
ENDWHILE
UNTIL WINHANDLE&>-1
ENDIF
DISPOSE SI#
DISPOSE PI#
RETURN WINHANDLE&
endproc
VAR NOTEPAD&=RUNEX("c:\windows\notepad.exe")
IF NOTEPAD&
SENDSTRING(NOTEPAD&, "XProfan 10 ist einfach Spitze!")
SENDSTRING(NOTEPAD&, "Aber das Wissen ja alle")
SENDSTRING(NOTEPAD&, "Gruß, Thomas")
ref='./../../references-fonction/xprofan/endif/'>ENDIF
|
|
|
| |
|
|
|
GDL | Bitte nich an meinem Geburtstag streiten.
Servus Georg |
|
|
| |
|
|
|
| [quote:f0cb3b491f=GDL]Bitte nich an meinem Geburtstag streiten.
Servus Georg[/quote:f0cb3b491f] Du zauberst mir immer wieder ein Lächeln Georg. |
|
|
| |
|
|
|
GDL | Bin heute seit langem mal wieder gut drauf und ich wünsche mir, das vielleicht alle heute mal gut drauf sind.
Servus Georg |
|
|
| |
|
|
|
| Hey das bekommen wir sicher hin - @alle: stiiiiimts???? |
|
|
| |
|
|
|
| Ich glaub wir (Thomas und ich) konnten die Indifferenz in einem ausführlichen Skypegespräch beilegen. Drum siehe erstes Posting. |
|
|
| |
|
|
|
Torsten Rümker | Ich bin jetzt am probieren und probieren, und zwar habe ich versucht der Procedure noch mitzugeben in welchem Modus das Programm starten soll. (also minimiert oder maximiert oder was auch immer)
Folgendes habe ich also eingefügt bzw verändert: vorher: KompilierenMarkierenSeparieren Nachher: KompilierenMarkierenSeparieren Habe versucht CreateProcessA zu befolgen, aber irgendwie kommt da bei mir nix bei raus, soll heißen das Programm wird immer im Normalmodus gestartet egal was ich mache.
A
MfG Torsten Rümker |
|
|
| Ich lerne, ob ich will oder nicht! Betriebssystem: - Ubuntu 15.x - Windows (diverse) XProfan Version: X2 | 02.11.2006 ▲ |
|
|
|
|
| Wenn Du schon das handle hast, warum benutzte nicht einfach ShowWindow(N1,N2) ? |
|
|
| |
|
|