Deutsch
Quelltexte/ Codesnippets

Erhalten Hwnd Programm Runex Starten Xprofan

 
Nicht mehr erforderlich, siehe iFs Posting, dort befindet sich der Source in XPSE kompatibler Version ohne Autoren-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:
KompilierenMarkierenSeparieren
Ersatz 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&

EndProc

 
23.10.2006  
 




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

 
23.10.2006  
 



@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 Änderung im Beispiel auf Hardcoded Dateipfad ist doch wohl nicht Dein Ernst? Es sollte möglichst bei jedem laufen, bzw. wenn, dann ermittelt man den Pfad!
 
23.10.2006  
 



Was hat Dich denn gestochen?

Was fehlt Dir denn und warum sollte ein CodeSnippet was mit benötigt XPSE bezeichnet ist auch ohne XPSE laufen zumal Du ja bereits das nicht-XPSE Schnipsel gepostet hast?

Die Änderung 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 natürlich nicht heissen soll das ich nicht wünsche mich darauf aufmerksam zu machen wenn ich etwas falsch wiederhole.
 
23.10.2006  
 



[quote:8cef19ce1c=TS-Soft]Nicht mehr erforderlich, siehe iFs Posting, dort befindet sich der Source in XPSE kompatibler Version ohne Autoren-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 für 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 natürlich niiiieeeemals so schön ist wie Thomas seine Variante die auch einen Vermerk auf den Author (Thomas Schulz) enthielt.
KompilierenMarkierenSeparieren
DECLARE __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")

ENDIF

 
23.10.2006  
 




GDL
Bitte nich an meinem Geburtstag streiten.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
23.10.2006  
 



[quote:f0cb3b491f=GDL]Bitte nich an meinem Geburtstag streiten.

Servus
Georg[/quote:f0cb3b491f]
Du zauberst mir immer wieder ein Lächeln Georg.
 
23.10.2006  
 




GDL
Bin heute seit langem mal wieder gut drauf und ich wünsche mir, das vielleicht alle heute mal gut drauf sind.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
23.10.2006  
 



Hey das bekommen wir sicher hin - @alle: stiiiiimts????
 
23.10.2006  
 



Ich glaub wir (Thomas und ich) konnten die Indifferenz in einem ausführlichen Skypegespräch beilegen. Drum siehe erstes Posting.
 
23.10.2006  
 




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
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

Nachher:
KompilierenMarkierenSeparieren
Case %PCount <> 2 : Return -1
Parameters cmdline$, modus%
Declare Ret&, SI#, PI#, WinHandle&, pid&, win&, timeout&
Struct STARTUPINFO = ~STARTUPINFO
Struct PROCESS_INFORMATION = ~PROCESS_INFORMATION
Dim SI#, STARTUPINFO
Dim PI#, PROCESS_INFORMATION
LET SI#.wShowWindow%=modus%

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) ?
 
02.11.2006  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.678 Betrachtungen

Unbenanntvor 0 min.
Torben Nissen02.05.2020

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie