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/)
-   -   innovaphone direkt ansteuern (https://www.delphipraxis.net/155560-innovaphone-direkt-ansteuern.html)

MacGuyver 28. Okt 2010 17:32

innovaphone direkt ansteuern
 
Moin Leute :hi:

wir haben jetzt IP-Telefonie in der Firma. Ich kann in meiner jetzigen Konfiguration nur das Programm "innovaphone SoftwarePhone" verwenden. Für das Bisschen, das ich telefoniere reicht das auch. Man kann über Strg+V eine Telefonnummer aus der Zwischenablage einkopieren und nur noch abheben. Auch schön. Man kann auch eine Nummer über die Tastatur eingeben und wählen. Schön wäre es, wenn ich von einer Delphi-Applikation aus eine Nummer übertragen und abheben könnte.

Ich habe mir das Handle des Fensters herausgesucht und mal WM_KEYDOWN und WM_KEYUP geschickt, klappt leider nicht. Wenn ich WM_CLOSE schicke, will sich das Programm beenden. Das richtige Handle habe ich folglich.

Kann mir da jemand helfen?


Stefan

MacGuyver 29. Okt 2010 14:00

AW: innovaphone direkt ansteuern
 
Moin,

ich habe etwas gefunden:

Delphi-Quellcode:
procedure TFormMain.TimerStartTimer(Sender: TObject);
var
   lNr : string;
   lH,
   lHform : THandle;
   lZ : Integer;
   lWert : Byte;
begin
   TimerStart.Enabled := False;
   lH := 0;
   lHform := 0;
   repeat
      lHform := FindWindowEx(0,lHform,nil,'innovaphone SoftwarePhone');
      lH := 0;
      if lHform > 0 then
      begin
         lH := FindWindowEx(lHform, 0, nil, 'Telefon');
      end;
   until (lHform = 0) or (lH > 0);
   if lH > 0 then
   begin
      lH := FindWindowEx(lH, 0, nil, 'Telefon');
   end;
   if lH > 0 then
   begin
      lH := FindWindowEx(lH, 0, 'AfxWnd70s', nil);
   end;
   if ParamCount = 0 then
   begin
      lNr := ClipBoard.AsText;
   end
   else
   begin
      for lZ := 1 to ParamCount do
      begin
         lNr := lNr + ParamStr(lZ);
      end;
   end;
   lNr := StringReplace(lNr,'+49','0',[]);
   lZ := 1;
   while lZ <= Length(lNr) do
   begin
      if lNr[lZ] in ['0'..'9'] then
      begin
         Inc(lZ);
      end
      else
      begin
         Delete(lNr,lZ,1);
      end;
   end;
   if Copy(lNr,1,9) = '<eigene externe Nummer>' then
   begin
      Delete(lNr,1,9);
   end;
   if Length(lNr) > 4 then
   begin                              
      lNr := '0' + lNr;
   end;
   if lH > 0 then
   begin
      if isIconic(lHform) then
      begin
         SetForegroundWindow(lHform);
         ShowWindow(lHform,SW_RESTORE);
      end;
      for lZ := 1 to Length(lNr) do
      begin
         lWert := Ord(lNr[lZ]) - Ord('0');
         PostMessage(lH
                    ,WM_KEYDOWN
                    ,lWert + 96
                    ,0);
      end;
   end
   else
   begin
      ShowMessage('Handle für innovaphone nicht gefunden!');
   end;
   Close;
end;
Das Ding startet über einen Timer eben durch und beendet sich wieder.
Damit interne Gespräche nicht über Außerhalb laufen, habe ich die Stelle <eigene externe Nummer> eingefügt.

Für eine Doku hatte ich leider keine Zeit, ist nur eine interne Geschichte.


Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 Uhr.

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