Announcement

Collapse
No announcement yet.

Outlook Sicherheitsafrage umgehen (sorry ;o))

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Outlook Sicherheitsafrage umgehen (sorry ;o))

    Hallo Forum!

    Hat man einen ständigen Outlook abgleich laufen
    dann geht einem das minütliche Bestätigen der sicherheits Abfrage doch schnell auf die Nerven. Sicher ists auch nicht mehr, da man irgendwann ohne nachdenken klickt und Outlook eh nicht angibt, wer oder was zugreifen will.

    Also wollte ich es automatisieren, es gibt zwar schon ein Programm dafür aber die eigenen sind einem ja doch lieber ) Also zum Thema: Habe folgende enumWindow Routine und bekomme, das letzte kleine Stück nicht hin:
    <pre>
    function isOutlook(h:THandle):Boolean;
    var p : THandle;
    Buffer : Array[0..99] of char;
    begin
    GetWindowText(h, Buffer, 100);
    result := pos('outlook', lowercase(buffer)) > 0;
    if result then exit;
    p := GetWindowLong(h, GWL_HWNDPARENT);
    if p <> 0 then result := isOutlook(p);
    end;
    <p>
    function enumWins(Window: HWND; l:lparam): Boolean; StdCall;
    var
    Buffer : Array[0..99] of char;
    clBuffer : Array[0..99] of char;
    id : integer;
    begin
    Result:= True;
    FillChar(clBuffer, 99, #0);
    getClassName(window, buffer, 100);
    FillChar(Buffer, 99, #0);
    GetWindowText(Window, Buffer, 100);
    if (l = 0) and isOutlook(window) then begin
    if IsWindowVisible(window) then
    enumChildWindows(window, @enumWins, window);
    end else begin
    if (clBuffer = '') and (pos('&Zugriff gew', buffer) = 1) then begin
    if sendMessage(window, BM_GetCheck, 0 , 0) = BST_UNCHECKED then begin
    // sendMessage(window, BM_SETCHECK, BST_CHECKED , 0);
    sendMessage(window, WM_LBUTTONDown, 3, 5);
    sleep(10);
    sendMessage(window, WM_LBUTTONUp, 5, 3);
    end;
    //neuer Aufruf, da okay button ja zuerst gefunden sein könnte...
    enumChildWindows(l, @enumWins, l);
    end else if (clBuffer = '') and (pos('Ja', buffer) = 1) then begin
    inc(treffer);
    SetActiveWindow(l);
    mouse.Capture := l;
    enableWindow(l, true);
    setFocus(l);
    sendMessage(window, WM_LBUTTONDown, 3, 5);
    sleep(10);
    sendMessage(window, WM_LBUTTONUp, 5, 3);
    sleep(10);
    id := GetDlgCtrlID(window);
    sendMessage(l, WM_COMMAND, makelong(id, BN_CLICKED), window);
    end;
    end;
    end;
    </pre> Ihr seht ich habe schon eine Menge gebastelt und probiert ;( Also die Checkbox wird gecheckt, die Combobox wird dabei auch enabled (war bei einfacher BM_SETCHECKED Message nicht der Fall). Der OK Schalter wird aber immer munter gedrück, ohne das das Fenster sich schließt und weiterarbeitet. Man muss einmal mit der Maus irgendwohin klicken ( Taskleiste oder andere Anwendung reicht!), dann schliesst sich das Fenster und Outlook arbeitet fröhlich weiter. Woran liegts?

  • #2
    So weit funktioniert das ganze nun, jetzt aber folgendes Problem: Die routine läuft in einem eigenen Thread, erzeugt aus einem Outlook Com Addin. Bei Zugriff auf die Mapi, wird scheinbar Outlook incl. des Threads komplett gestoppt, so das es dann nicht funktioniert, alle Outlook eigenen Fenster werden automatisch bestätigt. Kann man das irgendwie umgehen, also den Thread weiterlaufen lassen? Oder kann man vielleicht die richtigen sender und empfänger von emails bekommen ohne über die mapi zu gehen? (Outlook liefert manchmal nur den Klartextnamen und schneidet die mailadresse raus..)

    Comment


    • #3
      Hallo!<br>
      Schreib Dir ein COM AddIn für Outlook.<br>
      Im Connect Ereignis übergibt Dir Outlook einen Verweis auf die laufende Outlook Application. Dieser wird von Outlook als sicher eingestuft. (Irgendwas mit Trusted ComAddIn)<br>
      Alle Anfragen, die über diese Verbindung laufen werden nicht mit der nervigen Sicherheitsabfrage "gestört"...<br>
      Das funktioniert natürlich nur bei gestartetem Outlook. Wenn Du Dir die Outlook Application selbst erzeugst hast Du sofort wieder die Sicherheitsabfragen.<br>
      BYE BERN

      Comment


      • #4
        Hmm, eigentlich mache ich genau das. Nein nicht eigentlich, sondern ich habe ein Com Addin und nutze die mir übergebene Outlook Instanz!! Die abfragen kommen trotzdem. Die Outlook Sicherheits abfragen kann ich auch inzwischen "selbst beantworten", nur wenn ich die Mapi brauche (Absender email adresse) wird scheinbar Outlook incl. meines extra Threads (aus dem AddIn erzeugt) angehalten, daher klappts damit immer noch nicht...

        Comment


        • #5
          Also...<br>
          Merkst Du dir wirklich die ursprünglich übergebene Instanz????<br>
          Neu erzeugen gilt nicht!<br>
          Da wir nicht mit dem eigentlichen AddIn arbeiten machen wir das ganze dann noch etwas anders. Das ComAddin erzeugt ein COM Objekt, das sich die übergebene Instanz "merkt" danach greift unsere Applikation auf diesen "Merker" zu und bezieht von dort die Outlook Instanz.<br>
          Klappt prima und keine Sicherheitsmeldungen mehr!<br>
          Wir versenden eMails aus unserer Appliaktion und lesen aus der Outlook Mail den Absender aus, da wir die eMails archivieren....<br>
          Vielleicht hilft: http://www.outlookit.org/Trusted_Code_-_Does_not_work_-704686-3574-a.html<br>
          BYE BERN

          Comment


          • #6
            Hmm, merkwürdig. Ich habe das gesamte Plugin nochmal durchsucht, es wird nirgendwo etwas neu erzeugt.. Vielleicht kommts auf die Version an? Werde mir den Link nochmal ansehen, danke schonmal dafür..

            Comment


            • #7
              So, wie das immer so ist standen nun x andere sachen an,. jetzt brennts aber wieder bei Outlook, weil ein Kunde es verwenden möchte, stöhn ;o)
              <pre><p>
              procedure TOutlPlugin.OnConnection(const Application: IDispatch;
              ConnectMode: ext_ConnectMode; const AddInInst: IDispatch;
              var custom: PSafeArray);
              begin
              OleOutl := application;
              showmessage('Init:'+oleOutl.GetNameSpace('Mapi').C urrentUser.name);
              </p></pre>
              Bereits dieser Code im OnConnection bringt die Sicherheitsabfrage. Scheinbar ist das ja auch normal, solange man das ganze nicht als Trusted Code deklariert hat (richtig?). Das wieder geht aber nur, mit Exchange Anbindung?! (richtig?) HAbe es über das AdmPack versucht, komme damit aber auch nicht weiter, der Aufruf der OutlookSecurity.oft funktioniert noch, anfangs kam aber bei Auswahl der Seite "Trusted Code" noch die Meldung, das auf diesem Rechner nicht alle Elemente verfügbar wären aber auch nachdem diese nicht mehr kam war genau wie vorher der Schalter "Add" ohne Funktion. Ich kann also nichts hinzufügen... Geht das auch irgendwie anders

              Comment


              • #8
                Hallo!<br>
                Nein Exchange ist keine Bedingung...<br>
                Hast Du UpdateRegistry in deinem Objekt überschrieben?
                <PRE>
                procedure TCOMAddInFactory.UpdateRegistry(Register: Boolean);
                var
                aTReg : TRegistry;
                sKey : String;
                aSL : TStringList;
                i : Integer;
                begin
                inherited;
                sKey := Format('\Software\Microsoft\Office\Outlook\AddIns\ %s', [PROGID]);
                if Register then
                begin
                aTReg := TRegistry.Create;
                try
                aTReg.OpenKey(sKey, True);
                aTReg.WriteString('FriendlyName', 'Avasis Outlook Startup');
                aTReg.WriteString('Description', 'Avasis Outlook Startup');
                aTReg.WriteInteger('LoadBehavior', 3);
                finally
                aTReg.Free;
                end;
                end
                else
                begin
                aTReg := TRegistry.Create;
                try
                aSL := TStringList.Create;
                try
                if aTReg.OpenKey(sKey, False) then
                begin
                aTReg.GetValueNames(aSL);
                for i := 0 to aSL.Count - 1 do
                aTReg.DeleteValue(aSL[i]);
                aTReg.CloseKey;
                aTReg.DeleteKey(sKey);
                end;
                finally
                aSL.Free;
                end;
                finally
                aTReg.Free;
                end;
                end;
                end;
                </PRE>
                Ist einfach abgeschrieben von Andreas Koschs Beipiel für ein COM AddIn.<br>
                BYE BERN

                Comment


                • #9
                  Jups, das habe ich drinn...

                  Daran alleine kanns aber ja auch eigentlich nicht liegen, "so einfach" das das Plugin selbst sagt: "Hey vertrau mir doch mal" wäre ja ne farce. Irgendwie, müsste aber doch zumindest doch der Anwender sagen können: Vertraue diesem Plugin und lass es mal machen...

                  Aber wie

                  Comment

                  Working...
                  X