Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi TaskMgr Vista (https://www.delphipraxis.net/128102-taskmgr-vista.html)

stOrM 24. Jan 2009 07:37


TaskMgr Vista
 
Hallo,
ich wollte mal nachfragen, ob ggf. einer von euch mal versucht hat einen Task in Delphi 2009 unter Vista anzulegen?
Gestern hab ich mal dir TLB importiert und hab dann versucht, mit meinen nicht vorhandenen C Kenntnissen folgendes MSDN TimeTrigger Example nach Delphi umzubauen...

Leider wird mir beim Ausführen der letzten Zeile also:

Delphi-Quellcode:
IRegisteredTask *pRegisteredTask = NULL;
    hr = pRootFolder->RegisterTaskDefinition(
            _bstr_t( wszTaskName ),
            pTask,
            TASK_CREATE_OR_UPDATE,
            _variant_t(),
            _variant_t(),
            TASK_LOGON_INTERACTIVE_TOKEN,
            _variant_t(L""),
            &pRegisteredTask);
Immer die Fehlermeldung angezeigt: Der Parameter ist inkorekt ausgegeben.

Mein Umbau nach Delphi ist:

Delphi-Quellcode:
      // Unklar da RegisterTaskDefinition als ersten Param Path will und nicht TaskName wie im Beispiel!
      pRegisteredTask := pRootFolder.RegisterTaskDefinition(WideString('\'),
        pTaskDefinition,
        TASK_CREATE_OR_UPDATE,
        WideString(pszName),
        WideString(pszPwd),
        TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD,
        0);
Viele Grüße
Marc

Luckie 24. Jan 2009 09:31

Re: TaskMgr Vista
 
Der letzte Parameter müsste ein Zeiger auf einen Speicherbereich sein, weil dort die Funktion einen Rückgabewert reinschreibt.

stOrM 24. Jan 2009 09:36

Re: TaskMgr Vista
 
Zitat:

Zitat von Luckie
Der letzte Parameter müsste ein Zeiger auf einen Speicherbereich sein, weil dort die Funktion einen Rückgabewert reinschreibt.

Hi Luckie,
also ich hab das schon sooft umgestrickt, dass ich glaube das das Beispiel ansich fehlerhaft ist?
Auch mit dem letzten Parameter hasts nicht funktioniert, Fehlermeldung bleibt gleich leider.

Gruß
Marc

Luckie 24. Jan 2009 09:40

Re: TaskMgr Vista
 
Zeig mal den zugehörigen C Quellcode mit der Deklaration der Variablen.

stOrM 24. Jan 2009 09:42

Re: TaskMgr Vista
 
Zitat:

Zitat von Luckie
Zeig mal den zugehörigen C Quellcode mit der Deklaration der Variablen.

Also wie am Anfag der gesamte C Code ist hier zu finden:

TimeTrigger Example

ganz nach unten scrollen! :-)

Mr_G 24. Jan 2009 09:56

Re: TaskMgr Vista
 
Mal ne blöde Frage: Ich zähl bei dem C-Beispiel 8 Parameter, bei dir nur 7. Wie kommt denn das zustande?

stOrM 24. Jan 2009 10:02

Re: TaskMgr Vista
 
Zitat:

Zitat von Mr_G
Mal ne blöde Frage: Ich zähl bei dem C-Beispiel 8 Parameter, bei dir nur 7. Wie kommt denn das zustande?

Verdammt Gute Frage sogar!
Ich hab nur 7 zur Auswahl hier die da wäre:

Path
pDefinition
Flags
UserID
PassWord
LogOnType
sddl

:shock:

Aus der TLB

Delphi-Quellcode:
    function RegisterTaskDefinition(const Path: WideString; const pDefinition: ITaskDefinition;
                                    flags: Integer; UserId: OleVariant; password: OleVariant;
                                    LogonType: _TASK_LOGON_TYPE; sddl: OleVariant): IRegisteredTask; safecall;
[edit=mkinzler]Aufgefrischt wegen Cache-Fehler Mfg, mkinzler[/edit]

Mr_G 24. Jan 2009 10:08

Re: TaskMgr Vista
 
Hmm... Der letzte Parameter (ein out-Parameter) wird bei dir scheinbar als Result zurückgegeben. Nur wo kommt das eigentliche Return Value dann hin? Seltsam seltsam :gruebel:

Apollonius 24. Jan 2009 10:38

Re: TaskMgr Vista
 
Das passt schon. Dazu ist die Delphi-spezifische Aufrufkonvention Safecall da. Sie bewirkt, dass das Ergebnis in Wirklichkeit in einem Out-Parameter zurückgegeben wird. Die Fehlerprüfung mit dem eigentlichen Rückgabewert HResult erfolgt automatisch - im Fehlerfalle wird die Routine SafeCallErrorProc aufgerufen, was eine Exception auslöst, falls ComObj oder SysUtils eingebunden ist.

stOrM 24. Jan 2009 10:49

Re: TaskMgr Vista
 
Zitat:

Zitat von Apollonius
Das passt schon. Dazu ist die Delphi-spezifische Aufrufkonvention Safecall da. Sie bewirkt, dass das Ergebnis in Wirklichkeit in einem Out-Parameter zurückgegeben wird. Die Fehlerprüfung mit dem eigentlichen Rückgabewert HResult erfolgt automatisch - im Fehlerfalle wird die Routine SafeCallErrorProc aufgerufen, was eine Exception auslöst, falls ComObj oder SysUtils eingebunden ist.

Gut zu wissen! :-)
Gleich dreh ich durch!

Ok langer Kampf aber nun hab ichs endlich!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 Uhr.
Seite 1 von 2  1 2      

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