Naja ich gib ja zu, das da auch ein bischen Faulheit von mir mit dabei ist.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![]()
ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
So jetzt habe ich mal weiter herumexperimentiert. Dabei ist folgendes herausgekommen:
Die Globals sind dadurch jetzt ganz raus und auf x64 sollte es (Hoffentlich) auch laufen.
Structuren wären dabei auch nicht mehr nötig.
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)
Structuren wären dabei auch nicht mehr nötig.
Zuletzt geändert von al90 am 29.03.2010 22:26, insgesamt 2-mal geändert.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
Das tat es vorher auchal90 hat geschrieben: und auf x64 sollte es (Hoffentlich) auch laufen.
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
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)
Jeps. Muss ich mich wohl erstmal daran gewöhnen alles mit .i statt .l zu machen.ts-soft hat geschrieben:Das tat es vorher auch, aber darauf sollte man sich nicht verlassen.
Wurde soeben behoben. Danke für den Hinweis.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![]()
Ein einfache Procedure ohne Typ hat dieselbe Wirkung.
das mir das garnicht auffiehl.
Klar, stimmt schon. Werde mal versuchen meine stil zu ändern.Erklärung findeste von jemand anders in diesem Thread, sowie an vielen anderen Stellen hier im Board.
- HeX0R
- Beiträge: 3070
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
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.
Jemand, der sich dafür interessiert, wird sich wohl kaum bis zum Ende durchlesen.
Also am besten den Ursprungs-beitrag/code immer aktuell halten.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
Danke fürs Feedback.
Code auf Seite 1 angepasst.
Code auf Seite 1 angepasst.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
Wie wäre es, die Schleife zu entfernen und das Callback nur einmal aufzurufen, so wie es vorgesehen ist? 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: ExecuteFile mit hWnd Rückgabewert (Fenster-Handle)
Wollte ich auch zuerst so machen. Aber dabei kann es zu problemen kommen wenn eine Anwendung beim Hochfahren (Autostart)ts-soft hat geschrieben:Wie wäre es, die Schleife zu entfernen und das Callback nur einmal aufzurufen, so wie es vorgesehen ist?
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.
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)