Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VNC Viever in Anwendung einbauen ? (https://www.delphipraxis.net/182433-vnc-viever-anwendung-einbauen.html)

Pet04 23. Okt 2014 14:30

VNC Viever in Anwendung einbauen ?
 
Hallo ich möchte gerne VNC Viewer in meine Anwendung einbauen.

Der Viewer soll per buttonclick die Remoteverbindung herstellen.
IP und Passwort sollen dann in eine ini Datei gespeichert werden können.


Gibt es da eine Möglichkeit oder Beispiel Code.


Gruß

Pet

Sherlock 23. Okt 2014 15:10

AW: VNC Viever in Anwendung einbauen ?
 
Der einfachste Weg dürfte ActiveX/COM sein. Es gibt eine handvoll VNC-Viewer, die ActiveX Komponenten bereitstellen. Google einfach mal danach.

Sherlock

rapante 23. Okt 2014 15:30

AW: VNC Viever in Anwendung einbauen ?
 
Wie wär's denn damit?
http://www.delphipraxis.net/62839-[k...wrapper-3.html

Pet04 24. Okt 2014 07:37

AW: VNC Viever in Anwendung einbauen ?
 
bekommt man die Komponente auch unter XE2 zum laufen ?
und wie ?

Danke

Gruß

Pet

jaenicke 24. Okt 2014 08:00

AW: VNC Viever in Anwendung einbauen ?
 
Das funktioniert bei mir problemlos, das Package im Verzeichnis VNCWrapper\projects\D120\VNCWrapper_D120.dpk (aus dem SVN Repository) lässt sich auch mit XE7 noch problemlos kompilieren und installieren.

Was passiert bei dir denn? Was hast du versucht?

Pet04 24. Okt 2014 08:10

AW: VNC Viever in Anwendung einbauen ?
 
Wo kann ich es herunterladen.

Habe die Version deines links oben benutzt.

Pet04 24. Okt 2014 08:57

AW: VNC Viever in Anwendung einbauen ?
 
Hallo

habe es nun gefunden.
beim Comp. kommt der Fehler sppcryptd120 nicht gefunden.

Rainer Wolff 24. Okt 2014 09:29

AW: VNC Viever in Anwendung einbauen ?
 
Ich habe es so gelöst, daß ich einen VNC Viewer mit shellexecute starte, mir dann das Fensterhandle des Viewers hole und dem Fenster dann mein Anzeigepanel als Parent setze.

Bei Interesse kann ich auch Quellcode bereitstellen.

Pet04 24. Okt 2014 09:39

AW: VNC Viever in Anwendung einbauen ?
 
gerne.

wurde ich mir gerne anschauen.

Kann man auch die Verbindungsparameter (IP Passwort) Voreinstellen ?

Rainer Wolff 24. Okt 2014 10:02

AW: VNC Viever in Anwendung einbauen ?
 
Die Geschichte mit dem SetParent kommt daher, daß ich mein Anzeigefenster auch wieder in ein übergeordnetes Formular einhänge, und in dem Moment bekommt es eine andere ParentId, oder wie das nochmal war. Sollte aber normalerweise überflüssig sein.
Ich lasse aber einen Timer laufen, der die Aktivierung triggert, bis das Fenster angezeigt wird.

Die Parameter für den VNC-Viewer hole ich aus einem Inifile. Das WindowToShow ist der Fenstertitel des gestarteten Viewers, ich musste da aufpassen, daß der Titel genau passt und am Ende wollte er auch noch unbedingt ein Leerzeichen haben.

Bei Programmende suche ich mir das Handle des Windows-Explorers (Desktop) und gebe den VNC-Viewer wieder an Windows zurück, bevor ich den Prozess schliesse.


Code:
procedure TFormStatusanzeige.SetParent(AParent: TWinControl);
begin
  inherited;
  if assigned(aParent) then
    ActivateVNC;
end;

procedure TFormStatusanzeigePresse.Timer1Timer(Sender: TObject);
begin
  ActivateVNC;
end;

procedure TFormStatusanzeigePresse.FormDestroy(Sender: TObject);
var
  handle:HWND;
begin
  handle:=FindWindowByTitle('explor');
  Windows.SetParent(ExternesProgrammHandle,Handle);
  SendMessage(ExternesProgrammHandle, WM_CLOSE, 0, 0);
end;

procedure TFormStatusanzeigePresse.ActivateVNC;
var
  WPM : TWindowPlacement;
  Rect : TRect;
  ProgramToStart, parameters:String;
  WindowToShow: string;
  Inifile: TInifile;
begin
  Inifile:=TInifile.Create('setup.ini');
  try
    ProgramToStart :=Inifile.ReadString('Settings','ProgramToStart','C:\Program Files\UltraVNC\vncviewer.exe');
    Parameters    :=Inifile.ReadString('Settings','parameters','-port 192.168.9.140 -password blabla -fullscreen -notoolbar');
    WindowToShow  :=Inifile.ReadString('Settings','WindowToStart','pcname ( 192.168.9.140 ) ');
  finally
    Inifile.Free;
  end;
  ExternesProgrammHandle:=Findwindow(nil, PWideChar(WindowtoShow));
  if ExternesProgrammHandle=0 then
    ShellExecute(0, 'open', PWideChar(ProgramToStart), PWideChar(Parameters), nil, SW_NORMAL);
  ExternesProgrammHandle:=Findwindow(nil, PWideChar(WindowtoShow));
  if ExternesProgrammHandle<>0 then
  begin
    Windows.SetParent(ExternesProgrammHandle,Panel1.Handle);

    WPM.Length:=SizeOf(WPM);
    GetWindowPlacement(ExternesProgrammHandle,@WPM);
    Rect.Top :=0;
    Rect.Left :=0;
    Rect.Right :=Panel1.Width;
    Rect.Bottom:=Panel1.Height;
    wpm.rcNormalPosition:=Rect;
    SetWindowPlacement(ExternesProgrammHandle,@WPM);
    ExternesProgrammEingehaengt:=True;
    Timer1.Enabled:=false;
  end;
end;

function FindWindowByTitle(WindowTitle: string): Hwnd;
var
  NextHandle: Hwnd;
  NextTitle: array[0..260] of char;
begin
  // Get the first window
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    // retrieve its text
    GetWindowText(NextHandle, NextTitle, 255);
    if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
    begin
      Result := NextHandle;
      Exit;
    end
    else
      // Get the next window
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
  end;
  Result := 0;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz