Seite 1 von 1

[Erledigt] RunProgram() in meinem eigenen Fenster

Verfasst: 31.05.2018 17:41
von udg
Hallo,

ist es möglich, wenn ich durch den Befehl RunProgram() ein Programm aufrufe, es in mein eigenes Fenster zu zwingen, sodass es in meinem eigenen Fenster läuft?

Beispiel:

Code: Alles auswählen

Enumeration
  #Main
  EndEnumeration

Global sgChrome.s = Chr(34) +"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"+ Chr(34)
Global sgHtml.s = Chr(34) + "--app=https://google.de" + Chr(34)
Global sgParams.s = " --chrome  " + sgHtml

Procedure Open_Main()

OpenWindow(#Main, 0, 0, 900, 600,"testfenster",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_Invisible)
RunProgram(sgChrome,sgParams,"",#PB_Program_Open)
HideWindow(#Main, #False)
 
EndProcedure
Open_Main()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: RunProgram() in meinem eigenen Fenster

Verfasst: 31.05.2018 18:46
von RSBasic
Meinst du SetParent_()? Damit kannst du, wenn du die Handle-Nummer des Fensters des Programms hast, in dein eigenes Fenster einbetten.

Re: RunProgram() in meinem eigenen Fenster

Verfasst: 31.05.2018 18:47
von Kiffi
ich habe mal ein paar Codes von RSBasic zusammengehauen:

Code: Alles auswählen

EnableExplicit

Global sgChrome.s = Chr(34) +"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"+ Chr(34)
Global sgHtml.s = Chr(34) + "--app=https://google.de" + Chr(34)
Global sgParams.s = " --chrome  " + sgHtml
Global GoogleFound


Procedure EnumWindows(hWnd,Visibility=#True) ;Prozedur, die die Handles der Fenster erhält
  Static title.s{1024},class.s{1024},PID.l=0
  If IsWindowVisible_(hWnd) Or Visibility=#False
    GetWindowText_(hWnd,@title,1024) ;Fenstertitel auslesen
    GetClassName_(hWnd,@class,1024)  ;Fensterklasse auslesen
    GetWindowThreadProcessId_(hWnd,@PID) ;PID des zugehörigen Prozesses auslesen
    
    ; Debug "[Title]= "+title+" [hWnd]= "+Str(hWnd)+" [ClassName]= "+class+" [PID]= "+Str(PID) ;Werte ausgeben
    
    If  title = "Google"
      
      SetParent_(hWnd, GadgetID(1))
      SetWindowPos_(hWnd, 0, 0, 0, WindowWidth(0), WindowHeight(0), #SWP_NOZORDER | #SWP_FRAMECHANGED)
      
      GoogleFound = #True
      
    EndIf
    
  EndIf
  ProcedureReturn #True
EndProcedure

OpenWindow(0, 0, 0, 800, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If ContainerGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), 0)
    
    If RunProgram(sgChrome,sgParams,"",#PB_Program_Open)
      
      Repeat
        
        EnumWindows_(@EnumWindows(),#True) ;#True, um nur sichtbare Fenster anzuzeigen; ansonsten #False    
        
        If GoogleFound
          Break 
        EndIf
        
        Delay(50)
        
      ForEver
      
    EndIf
    
  CloseGadgetList()
  
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Grüße ... Peter

Re: RunProgram() in meinem eigenen Fenster

Verfasst: 31.05.2018 19:22
von udg
Oha, Schreibfleiß.

Vielen Dank :allright: