AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VNC Viever in Anwendung einbauen ?

Ein Thema von Pet04 · begonnen am 23. Okt 2014 · letzter Beitrag vom 24. Okt 2014
Antwort Antwort
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: VNC Viever in Anwendung einbauen ?

  Alt 24. Okt 2014, 09:10
Wo kann ich es herunterladen.

Habe die Version deines links oben benutzt.
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: VNC Viever in Anwendung einbauen ?

  Alt 24. Okt 2014, 09:57
Hallo

habe es nun gefunden.
beim Comp. kommt der Fehler sppcryptd120 nicht gefunden.
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: VNC Viever in Anwendung einbauen ?

  Alt 24. Okt 2014, 10:29
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.
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: VNC Viever in Anwendung einbauen ?

  Alt 24. Okt 2014, 10:39
gerne.

wurde ich mir gerne anschauen.

Kann man auch die Verbindungsparameter (IP Passwort) Voreinstellen ?
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: VNC Viever in Anwendung einbauen ?

  Alt 24. Okt 2014, 11:02
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;
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
540 Beiträge
 
Delphi 12 Athens
 
#6

AW: VNC Viever in Anwendung einbauen ?

  Alt 24. Okt 2014, 13:07
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.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#7

AW: VNC Viever in Anwendung einbauen ?

  Alt 24. Okt 2014, 13:19
beim Comp. kommt der Fehler sppcryptd120 nicht gefunden.
Einfach den Eintrag aus required entfernen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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 by Thomas Breitkreuz