Delphi-PRAXiS

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;

Neumann 24. Okt 2014 12:07

AW: VNC Viever in Anwendung einbauen ?
 
Für uns ist wesentlich interessanter, einen VNC-Server an die Kunden zu geben, damit wir auf den Kundenrechner Zugriff bekommen und fernwarten können.

Wir benutzen dazu ChuncVNC, was einigermaßen funktioniert. Man braucht dafür einen Repeater mit fester IP der über Internet erreichbar ist. Wir benutzen dafür einen gemieteten VServer mit Windows 2008.

Das Server-Programm ist eine selbstextrahierende EXE mit der Grösse von etwa 1,2 MB. Der Kunde startet es bei Bedarf, bekommt dann eine 6-Stellige ID angezeigt die er dann dem Supporter durchgibt, der dann seinen Viewer startet.

Probleme:

Der Repeater verträgt sich nicht besonders mit WIN 2008 und stürzt manchmal ab; da er als Dienst läuft wird er zwar wieder gestartet, aber die Verbindungen vom Viewer müssen neu hergestellt werden.

Wird der Server auf dem Kundenrechner mehrmals gestartet geht in der Regel nichts mehr in Sachen Fernwartung, ein Neustart des Kundenrechners ist dann nötig.

jaenicke 24. Okt 2014 12:19

AW: VNC Viever in Anwendung einbauen ?
 
Zitat:

Zitat von Pet04 (Beitrag 1277263)
beim Comp. kommt der Fehler sppcryptd120 nicht gefunden.

Einfach den Eintrag aus required entfernen. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.

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