GetActiveObject und Administrator Modus

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

GetActiveObject und Administrator Modus

Beitrag von Josh »

Hallo Leute,

hat jemand von euch eine Erklärung für mich, warum GetActiveObject nicht mehr funktioniert, wenn ich 'Administrator Modus für Windows Vista anfordern' in den Compileroptionen aktiviert habe?

Code: Alles auswählen

EnableExplicit

Define ClsId.i
Define App  .i

CoInitialize_(0)

;Prüfung Unicode
If #PB_Compiler_Unicode = 0
  MessageRequester ("", "Unicode muss aktiviert sein")
  End
EndIf

;KlassenId
If CLSIDFromProgID_(@"Excel.Application", @ClsId)
  MessageRequester ("", "Excel nicht installiert")
  End
EndIf

;Verbindung zur Application
If GetActiveObject_(@ClsId, 0, @App)
  MessageRequester ("", "Excel muss geöffnet sein")
  End
EndIf
Danke
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: GetActiveObject und Administrator Modus

Beitrag von NicTheQuick »

Vielleicht weil der Administrator kein Excel-Objekt geöffnet hat, sondern nur der Normaluser?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: GetActiveObject und Administrator Modus

Beitrag von Danilo »

Bild

Win7 64bit, PB 4.61 x86, Office 2010 Enterprise,
egal ob "Administrator Modus für Windows Vista anfordern" aktiviert oder nicht
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: GetActiveObject und Administrator Modus

Beitrag von Josh »

NicTheQuick hat geschrieben:Vielleicht weil der Administrator kein Excel-Objekt geöffnet hat, sondern nur der Normaluser?
Hmm, sieht wirklich so aus, als ob dann die ROT vom Administrator verwendet wird. Wenn Excel auch mit Administratorrechten geöffnet wird, dann funktioniert es wieder korrekt. Ein wenig seltsam, ich dachte, dass das Programm dann normal im User läuft und nur Adminrechte bekommt.
Danilo hat geschrieben:Win7 64bit, PB 4.61 x86, Office 2010 Enterprise,
egal ob "Administrator Modus für Windows Vista anfordern" aktiviert oder nicht
Das ist ja interressant. Ich verwende Win7 64bit, getestet mit PB 4.60 64 und 86 und da läuft es ganz normal ab. Allerdings verwende ich noch immer eine uralte Officeversion aus 2002. Ich habe das ganze extra auf Excel geändert, da das wohl die meisten am PC haben. Verwendet wird das bei mir für ein CAD System, dort habe ich es auf einem Uraltsystem (auch ca. 10 Jahre) und einer topaktuellen Version ohne Probleme getestet.

@Danilo: kannst du bitte testen, ab wo der Fehler auftritt?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: GetActiveObject und Administrator Modus

Beitrag von Danilo »

Josh hat geschrieben:@Danilo: kannst du bitte testen, ab wo der Fehler auftritt?
ClsId muß vom Typ CLSID sein, nicht Integer. CLSIDFromProgID_(@"Excel.Application", @ClsId) schreibt Sizeof(CLSID) Bytes an die
übergebene Speicherstelle, und da es bei Dir nur ein Integer war, schreibt es darüber hinaus über andere Variablen/Daten.

So läuft es dann auch ohne Crash:

Code: Alles auswählen

EnableExplicit

Define ClsId.CLSID
Define App  .i

CoInitialize_(0)

;Prüfung Unicode
If #PB_Compiler_Unicode = 0
  MessageRequester ("", "Unicode muss aktiviert sein")
  End
EndIf

;KlassenId
If CLSIDFromProgID_(@"Excel.Application", @ClsId)
  MessageRequester ("", "Excel nicht installiert")
  End
EndIf

;Verbindung zur Application
If GetActiveObject_(@ClsId, 0, @App)
  MessageRequester ("", "Excel muss geöffnet sein")
  End
EndIf

CoUninitialize_()
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: GetActiveObject und Administrator Modus

Beitrag von Josh »

Danilo hat geschrieben:ClsId muß vom Typ CLSID sein, nicht Integer.
Ups, wie peinlich :oops:
In meinem Code habe ich es richtig, aber hab das anscheinend beim rauskitzeln der relevanten Zeilen übersehen.
Antworten