Seite 2 von 2

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 15.10.2009 00:07
von al90
ts-soft hat geschrieben:Was willste da Testen? Defaultvariable ist nicht mehr long sondern integer, immer. Du brauchst da nichts testen und ich brauch mir nichts anpassen :)
Naja ich gib ja zu, das da auch ein bischen Faulheit von mir mit dabei ist. :mrgreen:

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 15.10.2009 20:35
von al90
So jetzt habe ich mal weiter herumexperimentiert. Dabei ist folgendes herausgekommen:

Code: Alles auswählen

Procedure.i EnumWindowsCallBack(hwnd.i, Handle.i)

  Protected Title$ = Space(1024), ProcessID.i, st.i = #True

  GetWindowText_(hwnd, @Title$, Len(Title$))
  GetWindowThreadProcessId_(hwnd, @ProcessID)

  If Title$<>"" And IsWindowVisible_(hwnd)
    If ProcessID = PeekI(Handle)
      PokeI(Handle, hwnd)
      st = #False
    EndIf
  EndIf

  ProcedureReturn st

EndProcedure

Procedure.i Execute_WindowFile(Filename$, Parameter$, WorkDir$)

  Protected st.i, Handle.i, Check.i

  If FileSize(Filename$) > 0
    st = RunProgram(Filename$, Parameter$, WorkDir$, #PB_Program_Open)
  Else
    ProcedureReturn #Null
  EndIf

  Handle = ProgramID(st) : Check = Handle

  Repeat
    Delay(10)
    EnumWindows_(@EnumWindowsCallBack(), @Handle)
  Until Handle <> Check And IsWindow_(Handle) <> #Null

  CloseProgram(st)
  ProcedureReturn Handle

EndProcedure


file$ = GetEnvironmentVariable("SystemRoot") + "\System32\calc.exe"
hwnd = Execute_WindowFile(file$, "", "")
Delay(500)
CloseWindow_(hwnd)
Delay(500)
OpenIcon_(hwnd)
Delay(1500)
SendMessage_(hwnd, #WM_CLOSE, 0, 0)
Debug "Window-Handle ( hWnd.l ) = " + Str(hwnd)
Die Globals sind dadurch jetzt ganz raus und auf x64 sollte es (Hoffentlich) auch laufen.
Structuren wären dabei auch nicht mehr nötig.

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 15.10.2009 20:59
von ts-soft
al90 hat geschrieben: und auf x64 sollte es (Hoffentlich) auch laufen.
Das tat es vorher auch :mrgreen: , aber darauf sollte man sich nicht verlassen.
Procedure.i haste noch nicht geändert. Ist abgesehen von Procedure.s der einzig
sinnvolle Vartyp für Procedure-Rückgaben! Procedure.b usw. sind irgendwie ballaballa :lol:
Ein einfache Procedure ohne Typ hat dieselbe Wirkung.

Erklärung findeste von jemand anders in diesem Thread, sowie an vielen anderen Stellen hier
im Board.

Gruß
Thomas

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 15.10.2009 21:29
von al90
ts-soft hat geschrieben:Das tat es vorher auch :mrgreen: , aber darauf sollte man sich nicht verlassen.
Jeps. Muss ich mich wohl erstmal daran gewöhnen alles mit .i statt .l zu machen. :)
Procedure.i haste noch nicht geändert. Ist abgesehen von Procedure.s der einzig
sinnvolle Vartyp für Procedure-Rückgaben! Procedure.b usw. sind irgendwie ballaballa :lol:
Ein einfache Procedure ohne Typ hat dieselbe Wirkung.
Wurde soeben behoben. Danke für den Hinweis. :allright: Ich bin es so gewohnt immer ein Typ mit zu Definieren,
das mir das garnicht auffiehl. :oops: Ich muss mal meinen Kaffee etwas stärker machen. :lol:
Erklärung findeste von jemand anders in diesem Thread, sowie an vielen anderen Stellen hier im Board.
Klar, stimmt schon. Werde mal versuchen meine stil zu ändern. :wink:

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 15.10.2009 21:56
von HeX0R
Es ist auch relativ unpraktisch immer neuere Codes im ganzen Thread zu verteilen.

Jemand, der sich dafür interessiert, wird sich wohl kaum bis zum Ende durchlesen.

Also am besten den Ursprungs-beitrag/code immer aktuell halten.

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 15.10.2009 22:16
von Fluid Byte
+1

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 16.10.2009 00:01
von al90
Danke fürs Feedback. :allright:
Code auf Seite 1 angepasst.

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 29.03.2010 21:53
von ts-soft
Wie wäre es, die Schleife zu entfernen und das Callback nur einmal aufzurufen, so wie es vorgesehen ist? :wink:

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)

Verfasst: 29.03.2010 22:12
von al90
ts-soft hat geschrieben:Wie wäre es, die Schleife zu entfernen und das Callback nur einmal aufzurufen, so wie es vorgesehen ist? :wink:
Wollte ich auch zuerst so machen. Aber dabei kann es zu problemen kommen wenn eine Anwendung beim Hochfahren (Autostart)
ausgeführt wird. D.H. die Anwendung kann ggf. noch nicht geöffnet sein, aber der Handle wird von Windows bereits zurückgegeben.
Deshalb auch die Schleife und Delays. :wink:

BTW:
Mir ist gerade aufgefallen das es unter Windows 7 nicht immer ohne "IsWindowVisible_(hwnd)" funktioniert.
Werde es also nochmal anpassen müssen. Grrrr, warum gibts da bloß immer so gravierende unterschiede unter
den OS'es. :?

Nachtrag:

Der Code auf Seite 1 ist nun angepasst. Ausserdem wird das Fenster nach ablauf nun auch geschlossen.
In diesem Beispiel also der Rechner. (Calc.exe)