[Erledigt] RunProgram() in meinem eigenen Fenster

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

[Erledigt] RunProgram() in meinem eigenen Fenster

Beitrag 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
Zuletzt geändert von udg am 31.05.2018 19:22, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: RunProgram() in meinem eigenen Fenster

Beitrag von RSBasic »

Meinst du SetParent_()? Damit kannst du, wenn du die Handle-Nummer des Fensters des Programms hast, in dein eigenes Fenster einbetten.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: RunProgram() in meinem eigenen Fenster

Beitrag 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
Hygge
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: RunProgram() in meinem eigenen Fenster

Beitrag von udg »

Oha, Schreibfleiß.

Vielen Dank :allright:
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten