Hallo RSBasic,
Danke für deine Tips. Habe die Sache mal eingearbeitet in 3 Beispiele.
Beispiel 1: [Extern] WORDPAD im Window
Code: Alles auswählen
;- Externes WORDPAD Test
Enumeration
#Window
#WordpadButton
EndEnumeration
Global Handle
Global wNd_PosX = 60
Global wNd_PosY = 90
Global wNd_GraphX = 1200
Global wNd_GraphY = 600
Procedure ExtWordPad()
; Aufruf über Explorer
; RunProgram("explorer.exe ",Chr(34)+"Z:\INFORMENT\Richtext\Asteroid 2016 TB57.rtf"+Chr(34),"",#PB_Program_Wait)
; Aufruf direkt über Programm
RunProgram("WRITE.exe ",Chr(34)+"Z:\INFORMENT\Richtext\Asteroid 2016 TB57.rtf"+Chr(34),"",0);#PB_Program_Wait ist nicht notwendig
Delay(1000) ;!!!! ;lieber 500 Millisekunden
Handle = FindWindow_("WordPadClass", 0)
Debug Handle
SetParent_(Handle, WindowID(#Window))
;Titelzeile entfernen
SetWindowLongPtr_(Handle, #GWL_STYLE, GetWindowLongPtr_(Handle, style) | #WS_DLGFRAME)
SetWindowPos_(Handle,0,0,0,wNd_GraphX,wNd_GraphY,#SWP_SHOWWINDOW)
SmartWindowRefresh(#Window, 1)
SetActiveWindow(#Window)
EndProcedure
OpenWindow(#Window,wNd_PosX , wNd_PosY, wNd_GraphX, wNd_GraphY, "Test" )
ButtonGadget(#WordpadButton,10,100,100,25,"WordPad")
Repeat
If FindWindowEx_(WindowID(#Window), 0, "WordPadClass", 0)
; Debug "Write läuft"
Else
; Jetzt Button Hiden
HideGadget(#WordpadButton,0)
EndIf
Event = WaitWindowEvent(1)
Select EventGadget()
Case #PB_Event_Gadget
Case #WordpadButton
; Jetzt Button Hiden
HideGadget(#WordpadButton,1)
; Nun Procedure
ExtWordPad()
EndSelect
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
MessageRequester("Meldung", "Beenden")
EndIf
Until Quit = 1
Startet ausserhalb des Fensters und dann erst als Parent. Zeigt immer eine leere Zeile im Head von Wordpad.
Beispiel 2:[Extern] NOTEPAD im Window
Code: Alles auswählen
;- Externes NotePad Test
Enumeration
#Window
#NotePadButton
EndEnumeration
Global Handle
Global wNd_PosX = 60
Global wNd_PosY = 90
Global wNd_GraphX = 1200
Global wNd_GraphY = 600
Procedure ExtNotePad()
; Aufruf über Explorer
RunProgram("explorer.exe ",Chr(34)+"Z:\INFORMENT\Flash\txt\Story.txt"+Chr(34),"",#PB_Program_Wait)
; Aufruf direkt über Programm
; RunProgram("Notepad.exe ",Chr(34)+"Z:\INFORMENT\Flash\txt\Story.txt"+Chr(34),"",0);#PB_Program_Wait ist nicht notwendig
; Delay(1000);!!!! ;lieber 500 Millisekunden
; RunProgram("Notepad.exe","","",#PB_Program_Hide)
; Handle = FindWindow_(0, "Story.txt - Editor")
Delay(100) ;!!!!
Handle = FindWindow_(0, "Unbenannt - Editor"); Welche Class??
Debug Handle
SetParent_(Handle, WindowID(#Window))
;Titelzeile entfernen
SetWindowLongPtr_(Handle, #GWL_STYLE, GetWindowLongPtr_(Handle, style) | #WS_DLGFRAME)
SetWindowPos_(Handle,0,0,0,wNd_GraphX,wNd_GraphY,#SWP_SHOWWINDOW)
SmartWindowRefresh(#Window, 1)
SetActiveWindow(#Window)
EndProcedure
OpenWindow(#Window,wNd_PosX , wNd_PosY, wNd_GraphX, wNd_GraphY, "Test" )
ButtonGadget(#NotePadButton,10,100,100,25,"NotePad")
Repeat
If FindWindowEx_(WindowID(#Window), 0, "Unbenannt - Editor", 0)
; Debug "Write läuft"
Else
; Jetzt Button Hiden
HideGadget(#NotePadButton,0)
EndIf
Event = WaitWindowEvent(1)
Select EventGadget()
Case #PB_Event_Gadget
Case #NotePadButton
; Jetzt Button Hiden
HideGadget(#NotePadButton,1)
; Nun Procedure
ExtNotePad()
EndSelect
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
MessageRequester("Meldung", "Beenden")
EndIf
Until Quit = 1
Notepad.exe findet man nicht als Window im WinSpy!
Wenn ich "Handle = FindWindow_(0, "Story.txt - Editor")" verwende, findet er ihn nicht!
Beispiel 3:[Extern] PHOTOFILTRE im Window
Code: Alles auswählen
;- Externes PhotoFiltre Test einbinden
;-
; C:\Program Files (x86)\PhotoFiltre\PhotoFiltre.exe
; Z:\INFORMENT\Flash\png\selfhtml - Kopie.png
Enumeration
#Window
#PhotoFiltreButton
EndEnumeration
Global Handle
Global wNd_PosX = 60
Global wNd_PosY = 90
Global wNd_GraphX = 1200
Global wNd_GraphY = 600
Procedure ExtWordPad()
; Aufruf über Explorer
RunProgram("explorer.exe ",Chr(34)+"Z:\INFORMENT\Flash\png\selfhtml - Kopie.png"+Chr(34),"",#PB_Program_Wait)
; Aufruf direkt über Programm
; RunProgram("C:\Program Files (x86)\PhotoFiltre\PhotoFiltre.exe",Chr(34)+"Z:\INFORMENT\Flash\png\selfhtml - Kopie.png"+Chr(34),"",0);#PB_Program_Wait ist nicht notwendig
Delay(1000) ;!!!! ;lieber 500 Millisekunden
Handle = FindWindow_("TMainForm", 0)
Debug Handle
SetParent_(Handle, WindowID(#Window))
;Titelzeile entfernen
SetWindowLongPtr_(Handle, #GWL_STYLE, GetWindowLongPtr_(Handle, style) | #WS_DLGFRAME)
SetWindowPos_(Handle,0,0,0,wNd_GraphX,wNd_GraphY,#SWP_SHOWWINDOW)
SmartWindowRefresh(#Window, 1)
SetActiveWindow(#Window)
EndProcedure
OpenWindow(#Window,wNd_PosX , wNd_PosY, wNd_GraphX, wNd_GraphY, "Test" )
ButtonGadget(#PhotoFiltreButton,10,100,100,25,"PhotoFiltre")
Repeat
If FindWindowEx_(WindowID(#Window), 0, "TMainForm", 0)
; Debug "Write läuft"
Else
; Jetzt Button Hiden
HideGadget(#PhotoFiltreButton,0)
EndIf
Event = WaitWindowEvent(1)
Select EventGadget()
Case #PB_Event_Gadget
Case #PhotoFiltreButton
; Jetzt Button Hiden
HideGadget(#PhotoFiltreButton,1)
; Nun Procedure
ExtWordPad()
EndSelect
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
MessageRequester("Meldung", "Beenden")
EndIf
Until Quit = 1
Hier ein Versuch mit einer Shareware die ich selbst ins Verzeichniss gebe:
[WinSpy]
TApplication
TMainForm
[Applikation]
Irgendwie fehlt CloseWindow_ weil die Proc weiterläuft! Gibt es da noch ein CloseWindow etc.
Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)