Excel Makros von C++ aus aktivieren
-
Hallo zusammen,
ich habe ein Frage zum Zugriff auf Excel. Ich habe ein Programm geschrieben, welches eine Excel Datei öffnet (Vorlage) und darin Daten liest bzw. schreibt. Jetzt habe ich eine neue Exceldatei als Vorlage die aber Makros enthält. Nun muss jedes mal, wenn von C++ aus diese Datei geöffnet wird, erst der Dialog zur Abfrage "MAkro aktivieren / deaktivieren" mit dem "Aktivieren" Button bestätigt werden.
Weiß jemand wie man das von C++ aus steuern kann, heißt das akrivieren soll im Hintergurnd geschehen ohne Eingriff eines Nutzers?Ich weiß das man die Abfrage in den Sicherheitsrichtlinien bei Excel dekativieren kann, dies ist aber nicht möglich, da es sich um eine Firma handelt.
Vielen Dank für Eure Hilfe

Nontschew
-
Es ist also nicht erlaubt die Sicherheitsrichtlinien manuell zu deaktivieren, deshalb willst du sie automatisch deaktivieren? Was sagt dein Admin dazu?
Man könnte das Abfragefenster raussuchen und den Aktivieren-Button drücken. Ist mit WinApi sicherlich möglich. Such mal nach "Tastendruck simulieren" oder ähnlichem im Forum.
-
Hallo Morris,
vielen Dank für Deine Antwort. Ich will die Sicherheitsrichtlinien natürlich auch nicht automatisch deaktivieren!
Dein zweiter Ansatz ist so wie ich es mir vorstelle, ich will praktisch per Automatik den aktivieren Button drücken...Ein Beispiel für so etwas hast Du nicht zufällig?
Danke
Mirko
-
Die Einstellungen zur Makrosicherheit sind im Userspezifischen Teil der Registry hinterlegt, der den Admin in der Regel nicht weiter kümmert (Gruppenrichtlinien etc. mal aussen vor).
Folgende reg-Datei deaktiviert die Sicherheitsabfrage z.B. für Access und PowerPoint von Office 2000 bis 2003:Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\PowerPoint\Security] "Level"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Access\Security] "Level"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\PowerPoint\Security] "Level"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Access\Security] "Level"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Security] "Level"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\Security] "Level"=dword:00000001Und diese Keys kannst du auch mit TRegistry setzen, z.B. unmittelbar vor und nach dem Ausführen deiner Funktion.
Achte aber darauf, am Ende tatsächlich wieder den Ursprungszustand hergestellt zu haben. Das beinhaltet also zuerstmal das Erstellen einer Kopie des betreffenden Zweiges und anschliessend jede Menge Fehlerbehandlungsroutinen.
-
Jansens Ansatz, die Sicherheitsrichtlinie vorübergehend zu deaktivieren, ist sicherlich eleganter - würde ich zuerst probieren. Da poppt auch kein Fenster auf.
Beispiel hab ich keins. Mit EnumWindows kannst du aber alle Fenster durchsuchen. Wenn du das passende gefunden hast, sendest du ein entsprechendes Keyboard Event (keydown+keyup). Könnte sein, daß im WinAPI-Forum schon Beispiele sind. Vielleicht sogar in den FAQ.
-
Hallo Morris, hallo Jansen,
vielen Dank für Eure Hilfe. Habe gerade mal Jansens Ansatz ausprobiert, das funktioniert super...
Aber rein aus interesse werde ich das mit der API und dem Fenster suchen auch mal testen!Also vielen Dank!
Ich melde mich wieder wenn ich ein Problem habe
Ach so noch eine Frage an Euch Experten:
Ich suche einen guten Lehrgang um C# .NET zu erlernen. Kann mir jemand Hinweise geben welche Anbieter da gut sind? Problem ist das ich bisher alles in Borland gemacht habe, die Lehrgänge zu C# aber alle mit Visuell Studio laufen. Borland bietet doch in der neuen Version ebenfalls C# .NET an!?Nontschew