Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Automatisch telefonieren mit Procall

Begonnen von Nabimba, Oktober 07, 2010, 13:45:36

⏪ vorheriges - nächstes ⏩

Nabimba

was soll ich sagen?
ich dachte, vielleicht habe ich irgendwas verändert und finde es nicht.
Dann bleibt es wohl ungelöst für mich.
Trotzdem danke

database

Nö,
wenn du die Codes so in deinem Formular stehen hast wie sie unten dargestellt sind, passt das schon.

Interessant wäre jedenfalls der Fehlergrund / Beschreibung, die erzeugt wird, wenn du auf den Button klickst, daher auch die kurze, sehr brutale Fehlerbehandlung , die ich dir reingestellt habe.
bzw. ob in den Verweisen was nicht mitkommt - und was auch interessant wäre - in welcher Routine der Fehler erzeugt wird.
Daher auch hier noch eine kleine Änderung:
Wir werden uns der Lösung schon nähern ...   ;)


Private Function GetOLPID() As Long

 On Error GoTo errhandle

 Dim WMI, Prozesse, Prozess
 Dim i As Long

 Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
 Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
 For Each Prozess In Prozesse
   If Prozess.Name = "OUTLOOK.EXE" Then
     GetOLPID = Prozess.ProcessID
     Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
     Exit Function
   End If
 Next
 Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
 
 Exit Function

errhandle:

MsgBox "Fehlernummer (Function): " & Err.Number & vbCrLf & _
       "Fehler (Function): " & Err.Description

End Function


Nabimba

oh, die Antworten wurden gleichzeitig geschrieben....und ich dachte, ihr gebt auf mit mir ;)
Ich komme leider erst wieder am Freitag dazu es zu testen. Ich melde mich dann wieder.
Ob ich die Befehle umbenenne überlege ich mir lieber noch mal.

@ DF6GL
ich habe meine umgearbeitete Version kopiert, in der Hoffnung, dass ich etwas fälschlichwerweise gelöscht habe...aber wenn es genau der anderen Version gleicht, freut es mich ja!!! ;)

database

Hmmm...

Zitatich habe meine umgearbeitete Version kopiert, in der Hoffnung, dass ich etwas fälschlichwerweise gelöscht habe
...möglicher weise ist dir aber gerade dabei waspassiert, der Code, so wie du ihn hier hereinkopiert hast, wurde NOCH NIE ausgeführt!
Das ist an der Schreibweise zu erkennen, beim Kompilieren wären nämlich die klein geschriebenen Schlüsselworte, Variablen und Objektnamen umgewandelt worden - if in If  Pid in PID usw.

Aber OK, lass dir ruhig Zeit und melde dich wieder wenn es für dich passt.

LG

Peter

Nabimba

Hallo,
Moin,
das mit dem "noch nie ausgeführt kommt vielleicht daher, dass ich den Code immer nochmal in Word sichere, damit ich mir ein "Handbuch" machen kann und es noch habe, falls beim Schreiben etwas verloren geht. Den Code in Access hatte ich ja wieder gelöscht, weil die Fehlermeldung die gesamte Tabelle blockiert hatte.

Aber was viel schlimmer ist, ich habe komplett den Faden verloren und verstehe gar nichts mehr...nachdem unsere Admins gestern irgendwas erneuert?, upgedatet ? oder so haben, ist mein Rechner mit einigen Macken erst beim zweiten mal in Schwung gekommen.

Und nachdem ich die Sachen wieder in den Codegenerator kopiert habe und im VBA-Editor unter Extras Verweise nach "nicht vorhanden" gesucht habe (es sind bei mir nur 2 markiert-Visual Basic for Appl. und Microsoft Access 1.0 object library...falls das der richtige Ort war?) habe ich keine Fehlermeldung mehr bekommen, sondern mein Outlook, welches offen war ist plötzlich zu sehen. Wenn outlook zu ist, bekomme ich einen Laufzeitfehler 5.

Ich habe ehrlich gesagt keine Ahnung mehr, wo und wann ich was anders gemacht habe und wo ich suchen muss. Dadurch wird es wohl nix mit der Lösung...ich schwenke die weiße Fahne.

database

#20
Hallo,

nana, mal langsam - aufgegeben wird ein Brief ...

Zitatweil die Fehlermeldung die gesamte Tabelle blockiert hatte
Fehlermeldungen blockieren nichts sondern weisen darauf hin, das etwas nicht stimmt. Die Ausführung von Code,
der den Fehler verursacht hat wird dabei unterbrochen, deshalb bleibt dann scheinbar alles stecken.

So, nun haben deine Admins was erneuert, geupdated oder sonst was -
Was meinen die Jungs zu deinem Problem - sie müssten ja das System in- und auswendig kennen?

Aber egal, wie auch immer.
Die Anwendung, die Access-Datenbank, mit der wir herumexperimentiert haben - hast DU diese selbst erstellt?
Hast du vor Beginn der Änderungen eine Kopie angelegt oder hast du an der Originaldatei herumgewerkelt?
Ist das eine reine Access 2003-Datei?

Ähmmmm...
ZitatUnd nachdem ich die Sachen wieder in den Codegenerator kopiert habe
...erklärst du mir bitte in kurzen verständlichen Worten was das ist oder du meinst - ein Codegenerator bei Access?  ??? ???

ZitatVisual Basic for Appl. und Microsoft Access 1.0 object library
Der Ort deiner Recherche war der richtige.

Bei Access 2003 sind standardmässig Visual Basic for Applications, Microsoft Access 11.0 Object Library und OLE Automation angehakt.
Ich habe nun die MusterLösung, mirt der ich den Code getestet habe in eine  virtuelle Maschine mit XP als Betriebssystem und einer Office 2003 Installation kopiert und durchprobiert.
Die läuft - ohne Fehler bis zu Übergabe der Nummer per F8 - wobei ich diese Funktionalität - wie schon beschreiben - nicht richtig testen kann, weil ich ja Procall nicht habe.

Ich glaube, dass durch die ganze kopiererei bei dir am System etwas verkorkst ist.
Hast du eine Kopie der DB gemacht bevor du damit begonnen hast was zu ändern dann hole dir diese Originaldatei wieder zurück und lege nochmal ein KOPIE davon an.
Das Experimentier-Exemplar kannst du dann wider löschen.

Wenn du wieder auf Ausgangsstatus bist melde dich hier nochmal, ich werde dann Schritt für Schritt mit dir die Änderungen durchführen.

Grüße
Peter

Beginner666

Hallo zusammen,

ich weiß das der Beitrag schon älter ist.  ;D

ich habe mir auch eine Datenbank erstellt und bin beim Suchen nach einer Einbindung von Procall auf euch gestoßen. Ich habe mir den Code entsprechend kopiert und auf meine Bedürfnise angepasst.
Ich habe allerdings nun das folgende Phänomen. Wenn ich die Telefonnummer markiere und dann auf den Button klicken, dann sehe ich kurz wie die Nummern-LED auf der Tastatur aus und wieder angeht. Outlook ist geöffnet und auch als Fenster zu sehen. Liegt nur noch der Browser im Vordergrund. Mit dem drücken des Buttons wird entsprechend Outlook in den Vordergrund gelegt. Aber die Nummer die ich markiert habe, wird nicht gewählt. Ich benutze 2 Monitore wobei die DB auf dem linken und Outlook auf dem Rechten Monitor sind. Als Betriebssystem läuft XP Pro mit SP3 und Office Pro 2003.

Ich hoffe ihr könnt mir weiterhelfen.
Gruß Tobias

Anbei noch der Code aus dem VB Script.

Private Function GetOLPID() As Long

 On Error GoTo errhandle

 Dim WMI, Prozesse, Prozess
 Dim i As Long

 Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
 Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
 For Each Prozess In Prozesse
   If Prozess.Name = "OUTLOOK.EXE" Then
     GetOLPID = Prozess.ProcessID
 Exit Function
   End If
 Next
 Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
 
 Exit Function

errhandle:

MsgBox "Fehlernummer (Function): " & Err.Number & vbCrLf & _
       "Fehler (Function): " & Err.Description

End Function
Private Sub Befehl35_Click()
   Dim nummer As String
   Dim PID As Long
   nummer = TelefonBeruflich
   PID = GetOLPID()
   If PID <> 0 Then
      AppActivate PID
      SendKeys nummer & "{F8}", True
   End If
  End Sub

database

Hallo,

wie schon in den Beiträgen oben erwähnt habe ich KEINE Möglichkeit die Funktionalität des Codes an ProCall zu testen,
Da ich das Ding nicht kenne und auch nicht besitze!

Aber:

setze mal einen Haltepunkt auf
Private Sub Befehl35_Click()

und führe diese Prozedur bis zu
AppActivate PID

mal mit F8 schrittweise aus.

Ist in der Variable 'nummer' was enthalten?


Wenn ja, dann klappt die Übergabe an ProCall bzw. Outlook nicht richtig.

Tja und genau da kann ich dann leider nicht mehr weiter helfen - ich hab, wie schon erwähnt - das Zeug nicht zur Verfügung!

Beginner666

Zitat von: database am April 05, 2011, 19:54:06
Hallo,

wie schon in den Beiträgen oben erwähnt habe ich KEINE Möglichkeit die Funktionalität des Codes an ProCall zu testen,
Da ich das Ding nicht kenne und auch nicht besitze!

Aber:

setze mal einen Haltepunkt auf
Private Sub Befehl35_Click()

und führe diese Prozedur bis zu
AppActivate PID

mal mit F8 schrittweise aus.

Ist in der Variable 'nummer' was enthalten?


Wenn ja, dann klappt die Übergabe an ProCall bzw. Outlook nicht richtig.

Tja und genau da kann ich dann leider nicht mehr weiter helfen - ich hab, wie schon erwähnt - das Zeug nicht zur Verfügung!

Wenn ich das richtig verstehe, dann muss ich der Variable Nummer den Feldnamen bzw. Steuerelementnamen angeben, in der meine Telefonnummer steht, die ich wählen möchte? Wenn das der Fall ist, dann lautet der Name TelefonBeruflich

Ich habe mal den Haltepunkt gesetzt, und den Code Schritt für Schritt durchlaufen lassen.
Sobald der Code auf den Abschnitt AppActivate PID läuft, springt der Code in die Funktion zur Ermittlung der PID von Outlook. Soweit habe ich das ganze verstanden. Sobald der Code dann an die folgende Stelle gelangt,

    If Prozess.Name = "OUTLOOK.EXE" Then
      GetOLPID = Prozess.ProcessID
      Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
      Exit Function
    End If
  Next


und dann auf das Next läuft, springt er wieder zurück auf zum Anfang auf If Prozess.Name = "OUTLOOK.EXE" Then

Was das ProCall angeht, kann man als Testversion installieren  ;)

Ich hoffe ich habe jetzt einen nicht allzu sehr alten Beitrag aus der Versenkung geholt und ihr könnt mir trotzdem weiterhelfen.
@Database du sagst ja selbst der Code bis zu dem Schritt wo die übergabe an Procall passieren soll funktionieren müsste, nur das du auf Grund fehlendes ProCall es nicht weiter testen kannst.

Gruß Beginner666

DF6GL

Hallo,

willst Du wirklich über Outlook die Telefonnummer übermitteln? bzw. ich denke, das ist de rfalsche Ansatz.  Ermittele besser die PID von Procall und übergibt dort die Nummer:


Public Function GetOLPID0(Nummer As String) As Long
  Dim WMI, Prozesse, Prozess, GetOLPID1 As Long
  Dim i As Long
  Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
  For Each Prozess In Prozesse
    If Prozess.Name = "ECtiClientOne.EXE" Then
      GetOLPID1 = Prozess.ProcessID
         AppActivate GetOLPID1
  Debug.Print Prozess.Name, Prozess.ProcessID

  SendKeys "{F6}" & Nummer & "{F4}", True
  Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
      Exit Function
    End If
  Next


  Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function




Beginner666

Ich denke das leuchtet ein das man das über die PID von ProCall macht.
Ich verstehe nur nicht warum du den SendKey Befehl oben eingebaut hast, dort ist doch kein Click Befehl eingetragen, oder verstehe ich das jetzt falsch?

Ich habe mein Code mal angepasst. Allerdings bekomme ich eine Fehlermeldung. Sub oder Function nicht definiert. Und zwar kommt die Fehlermeldung an der Stelle PID = PID = GetOLPID(). Ich denke mal das dort noch eine Zahl fehlt, da du ja in deinem Code mit GetOLPID 1 und 0 arbeitest. Ich habe dort beide Varianten eingebunden leider ohne Erfolg.

Der aktulle Code

Public Function GetOLPID0(nummer As String) As Long
  Dim WMI, Prozesse, Prozess, GetOLPID1 As Long
  Dim i As Long
  Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
  For Each Prozess In Prozesse
    If Prozess.Name = "ECtiClientOne.EXE" Then
      GetOLPID1 = Prozess.ProcessID
         AppActivate GetOLPID1
  Debug.Print Prozess.Name, Prozess.ProcessID
  Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
      Exit Function
    End If
  Next
  Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function
Private Sub Befehl35_Click()
    Dim nummer As String
    Dim PID As Long
    nummer = TelefonBeruflich
    PID = GetOLPID()
    If PID <> 0 Then
       AppActivate PID
       SendKeys "{F8}" & nummer, True
    End If
   End Sub


Gruß Beginner666

DF6GL

Hallo,

da hat alles nichts weiter zu sagen, habe nur auf die "Auslagerung" von Sendkeys verzichtet...


Ruf die Funktion (die am Besten noch umbenannt werden sollte, weil sie nichts mit OL zu tun hat)  einfach so auf:

Sub btnTelefonieren_Click()
GetOLPID0 "0999123654"
End Sub


Trotzdem ist sowas nicht stabil.  Vermutlich geht das Ganze ins Leere, wenn das ProCall-Fenster nicht geöffnet ist.


daolix

ZitatVermutlich geht das Ganze ins Leere, wenn das ProCall-Fenster nicht geöffnet ist.
War ja vom ursprünglichen Threadstarter auch so gewollt, wenn kein Outlook läuft dann mach nix.

Hab den Code mal geändert, so das ne Meldung kommt wenn die Tel-Soft nicht läuft.
Public Function Ich_Ruf_Dich_An(nummer As String) As Long
    Dim WMI, Prozess, Prozesse
    Dim SQL As String
       
    SQL = "Select ProcessId from Win32_Process WHERE Name like 'ECtiClientOne.EXE'"        'ECtiClientOne.EXE
    Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set Prozesse = WMI.ExecQuery(SQL)
    If Prozesse.Count = 0 Then
        MsgBox "Telefonsoftware 'ECtiClientOne' läuft nicht"
        GoTo Sub_ExitClean
    Else
        For Each Prozess In Prozesse
            AppActivate Prozess.ProcessID
            SendKeys "{F6}" & nummer & "{F4}", True
            Exit For
        Next
    End If

Sub_ExitClean:
    Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function


Und nun lautet der Aufruf in der Befehl35_Click Routine:

Private Sub Befehl35_Click()
    Dim nummer As String
    nummer = TelefonBeruflich
    Ich_Ruf_Dich_An nummer

end Sub


Ob der von DF6GL gepostete SendKey-befehl funktioniert kann ich nicht sagen da ich ebenfalls die Software nicht habe.

DF6GL

Hallo,

@daolix:


Bist Du sicher, dass der geänderte Code das tut, was er lt. Deiner Aussage sollte?



database

Hallo,

@Beginner666
Zitatkann man als Testversion installieren 
werde ich tunlichst vermeiden - was meinst du wie mein Rechner nach einiger Zeit aussehen würde ... ? :o