| |
|
|
| ¡Hola Profaner...
Gibt lo una Möglichkeit una Programa beim Herunterfahren des Rechners como letztes final que se? |
|
|
| |
|
|
|
| ¿Te ha - el Reihenfolge bestimmen - en el Kernel el Prozessen el kill.app.mensaje envía?
Oder media Usted así algo como en lugar de Autostart Autoend?
Von beidem Sé que no como - wäre para mich aber trotzdem interessant ¿qué es exactamente ¿Quieres decir que.
Salve. |
|
|
| |
|
|
|
| Verstehe el Cuestión no tan completamente, con ~WM_QUERYENDSESSION en un Callback, kannste abfangen si Windows termina. Usted selber como letztes, höchstens como Service oder Skript en NT-Systemen. Yo glaube aber el trifft lo todavía no, oder ??? |
|
|
| |
|
|
|
| ~WM_QUERYENDSESSION es auch no el goldene vom Ei - como uno en NT-Systemen una QUERYENDSESSIONTimeout de 0 einstellen kann. Also sicher es solch Callback auch no umbedingt - auch si fast kein Schwein el QUERYENDSESSIONTimeout de 20.000 en 0 (ms) setzt.
Yo sin embargo habs getan.
Salve. |
|
|
| |
|
|
|
| [quote:0ca25bf230=iF]¿Te ha - el Reihenfolge bestimmen - en el Kernel el Prozessen el kill.app.mensaje envía? [/quote:0ca25bf230] ¡Hola IF...
Sí, genau. Das hängt u.a. de el Startreihenfolge el Prozesse de. Yo gehe veces bastante schwer su de, daß el nada oder sólo Trick va.
@Thomas... [quote:0ca25bf230] Verstehe el Cuestión no tan completamente, con ~WM_QUERYENDSESSION en un Callback, kannste abfangen si Windows termina. [/quote:0ca25bf230] Im Augenblick regelt el el Programa encima una Subclassing de ~WM_QUERYENDSESSION por una zweite EXE, el allein sólo para el Subclassing zuständig es. Yo quería veces schauen, si existe todavía irgendwelche otro Möglichkeiten son, como el Herunterfahren abzufangen. [quote:0ca25bf230] Usted selber como letztes, höchstens como Service oder Skript en NT-Systemen. Yo glaube aber el trifft lo todavía no, oder ??? [/quote:0ca25bf230] Exactamente en NT-Systeme es. Beim Herunterfahren des Systems se sí a cada Programa el ~WM_QUERYENDSESSION gesendet. Das Programa se necesariamente solange laufen, como Windows se ejecuta, el es wichtig! Wenn Yo irgendwie erreichen podría, daß el Prog bajo NT sólo como letztes el ~WM_QUERYENDSESSION erhält, podría Yo el Subclassing sparen y einiges sería algo sauberer durchlaufen... |
|
|
| |
|
|
|
Michael Wodrich | ¡Hola Andreas,
me schmiert de y a el Rechner de (con Prozessen überladen) y como me está aufgefallen:
Der FireFox es el letzte, el se verabschiedet, como Yo siempre mehrere Tabs offen habe. FireFox fragt ahora, si él wirklich final se. Wenn Yo el Cuestión en el Bildschirm lasse, entonces außer el Fuchs nichts mehr aktiv.
In Profano hay doch SetCloseMsg, vieleicht hilft el sí.
MfG Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 19.05.2005 ▲ |
|
|
|
|
| ¡Hola Michael...
SetCloseMsg fällt sowieso flach, como Yo a Tiempo XProfan besitze. FireFox dürfte el encima el Subclassing de ~WM_QUERYENDSESSION regeln - el möchte Yo no, como Yo en mi Programa entonces a viel incluso regeln müßte. |
|
|
| |
|
|
|
| Hola Thomas...
[quote:e3a546d485] Usted selber como letztes, höchstens como Service oder Skript en NT-Systemen. Yo glaube aber el trifft lo todavía no, oder ??? [/quote:e3a546d485] Eventuell trifft lo el doch. Bajo Windows9x wäre genau el el Solución (RegisterServiceProcess), como brauche Yo pero no. Ein weiteres Problema wäre, el mein Service una Ventana hätte. Yo podría me vorstellen, el NT como evtl. con el Zugriffsrechten algo streikt - como müßte Yo tal vez entonces una bischen tricksen... Leider Yo no blassen Schimmer, Yo bajo NT una Service installiere. ¿Puede du - oder sonst alguien - me tal vez en el Sprünge helfen? |
|
|
| |
|
|
|
| [quote:6298a5d2c1=AH] Leider Yo no blassen Schimmer, Yo bajo NT una Service installiere. ¿Puede du - oder sonst alguien - me tal vez en el Sprünge helfen?[/quote:6298a5d2c1] Hab Usted qué de el CodeArchiv para PureBasic rausgesucht. ¿Puede lo Usted primero ansehen, tal vez auch selber übertragen, ansonsten meldest Usted otra vez. Ist no schwer (para mich es XProfan schwerer ) KompilierenMarcaSeparación; English forum:
; Author: Richard Eikeland
; Date: 12. April 2003
; angepaßt an 3.93 ts-soft
; Apr. 12, 2003
; Converted to PB by Richard Eikeland
; This code is posted as is with out any waranties.
;
#SERVICE_WIN32_OWN_PROCESS = $10
#SERVICE_WIN32_SHARE_PROCESS = $20
#SERVICE_WIN32 = #SERVICE_WIN32_OWN_PROCESS + #SERVICE_WIN32_SHARE_PROCESS
#SERVICE_ACCEPT_STOP = $1
#SERVICE_ACCEPT_PAUSE_CONTINUE = $2
#SERVICE_ACCEPT_SHUTDOWN = $4
#SC_MANAGER_CONNECT = $1
#SC_MANAGER_CREATE_SERVICE = $2
#SC_MANAGER_ENUMERATE_SERVICE = $4
#SC_MANAGER_LOCK = $8
#SC_MANAGER_QUERY_LOCK_STATUS = $10
#SC_MANAGER_MODIFY_BOOT_CONFIG = $20
#STANDARD_RIGHTS_REQUIRED = $F0000
#SERVICE_QUERY_CONFIG = $1
#SERVICE_CHANGE_CONFIG = $2
#SERVICE_QUERY_STATUS = $4
#SERVICE_ENUMERATE_DEPENDENTS = $8
#SERVICE_START = $10
#SERVICE_STOP = $20
#SERVICE_PAUSE_CONTINUE = $40
#SERVICE_INTERROGATE = $80
#SERVICE_USER_DEFINED_CONTROL = $100
;#SERVICE_ALL_ACCESS = #STANDARD_RIGHTS_REQUIRED | #SERVICE_QUERY_CONFIG | #SERVICE_CHANGE_CONFIG | #SERVICE_QUERY_STATUS | #SERVICE_ENUMERATE_DEPENDENTS | #SERVICE_START | #SERVICE_STOP | #SERVICE_PAUSE_CONTINUE | #SERVICE_INTERROGATE |#SERVICE_USER_DEFINED_CONTROL
#SERVICE_DEMAND_START = $3
#SERVICE_ERROR_NORMAL = $1
;- SERVICE_CONTROL
#SERVICE_CONTROL_STOP = $1
#SERVICE_CONTROL_PAUSE = $2
#SERVICE_CONTROL_CONTINUE = $3
#SERVICE_CONTROL_INTERROGATE = $4
#SERVICE_CONTROL_SHUTDOWN = $5
;-SERVICE_STATE
#SERVICE_STOPPED = $1
#SERVICE_START_PENDING = $2
#SERVICE_STOP_PENDING = $3
#SERVICE_RUNNING = $4
#SERVICE_CONTINUE_PENDING = $5
#SERVICE_PAUSE_PENDING = $6
#SERVICE_PAUSED = $7
Global ServiceStatus.SERVICE_STATUS, hServiceStatus.l, SERVICE_NAME.s, Finish.l
Declare Handler(fdwControl.l)
Declare ServiceMain(dwArgc.l, lpszArgv.l)
Declare WriteLog(Value.s)
Procedure Main()
hSCManager.l
hService.l
ServiceTableEntry.SERVICE_TABLE_ENTRY
b.l
cmd.s
;Change SERVICE_NAME and app name as needed
AppPath.s = "C:DevPureBasicworkdirNTServiceMyService.exe"
SERVICE_NAME = "MyService"
cmd = Trim(LCase(ProgramParameter()))
Select cmd
Case "install" ;Install service on machine
hSCManager = OpenSCManager_(0, 0, #SC_MANAGER_CREATE_SERVICE)
hService = CreateService_(hSCManager, SERVICE_NAME, SERVICE_NAME, #SERVICE_ALL_ACCESS, #SERVICE_WIN32_OWN_PROCESS, #SERVICE_DEMAND_START, #SERVICE_ERROR_NORMAL, AppPath, 0, 0, 0, 0, 0)
CloseServiceHandle_(hService)
CloseServiceHandle_(hSCManager)
Finish = 1
Case "uninstall" ;Remove service from machine
hSCManager = OpenSCManager_(0, 0, #SC_MANAGER_CREATE_SERVICE)
hService = OpenService_(hSCManager, SERVICE_NAME, #SERVICE_ALL_ACCESS)
DeleteService_(hService)
CloseServiceHandle_(hService)
CloseServiceHandle_(hSCManager)
Finish = 1
Default
*sname.s = SERVICE_NAME
;Start the service
ServiceTableEntrylpServiceName = @SERVICE_NAME
ServiceTableEntrylpServiceProc = @ServiceMain()
b = StartServiceCtrlDispatcher_(@ServiceTableEntry)
WriteLog("Starting Service bResult=" + Str(b))
If b = 0
Finish = 1
EndIf
EndSelect
Repeat
Until Finish =1
End
EndProcedure
Procedure Handler(fdwControl.l)
b.l
Select fdwControl
Case #SERVICE_CONTROL_PAUSE
;** Do whatever it takes To pause here.
ServiceStatusdwCurrentState = #SERVICE_PAUSED
Case #SERVICE_CONTROL_CONTINUE
;** Do whatever it takes To continue here.
ServiceStatusdwCurrentState = #SERVICE_RUNNING
Case #SERVICE_CONTROL_STOP
ServiceStatusdwWin32ExitCode = 0
ServiceStatusdwCurrentState = #SERVICE_STOP_PENDING
ServiceStatusdwCheckPoint = 0
ServiceStatusdwWaitHint = 0 ;Might want a time estimate
b = SetServiceStatus_(hServiceStatus, ServiceStatus)
;** Do whatever it takes to stop here.
Finish = 1
ServiceStatusdwCurrentState = #SERVICE_STOPPED
Case #SERVICE_CONTROL_INTERROGATE
;Fall through To send current status.
Finish = 1
;Else
EndSelect
;Send current status.
b = SetServiceStatus_(hServiceStatus, ServiceStatus)
EndProcedure
Procedure ServiceMain(dwArgc.l, lpszArgv.l)
b.l
WriteLog("ServiceMain")
;Set initial state
ServiceStatusdwServiceType = #SERVICE_WIN32_OWN_PROCESS
ServiceStatusdwCurrentState = #SERVICE_START_PENDING
ServiceStatusdwControlsAccepted = #SERVICE_ACCEPT_STOP | #SERVICE_ACCEPT_PAUSE_CONTINUE | #SERVICE_ACCEPT_SHUTDOWN
ServiceStatusdwWin32ExitCode = 0
ServiceStatusdwServiceSpecificExitCode = 0
ServiceStatusdwCheckPoint = 0
ServiceStatusdwWaitHint = 0
hServiceStatus = RegisterServiceCtrlHandler_(SERVICE_NAME, @Handler())
ServiceStatusdwCurrentState = #SERVICE_START_PENDING
b = SetServiceStatus_(hServiceStatus, ServiceStatus)
;** Do Initialization Here
ServiceStatusdwCurrentState = #SERVICE_RUNNING
b = SetServiceStatus_(hServiceStatus, ServiceStatus)
;** Perform tasks -- If none exit
;** If an error occurs the following should be used for shutting
;** down:
; SetServerStatus SERVICE_STOP_PENDING
; Clean up
; SetServerStatus SERVICE_STOPPED
EndProcedure
Procedure WriteLog(Value.s)
sfile.s = "MyServiceLog.txt"
If OpenFile(0, sfile)
WriteStringN(Value)
CloseFile(0)
Else
If CreateFile(0,sfile)
WriteStringN(Value)
CloseFile(0)
EndIf
EndIf
EndProcedure
Main()
Weiß ahora bloß no qué el HL con el Code macht
Saludo thomas (ts-soft) |
|
|
| |
|
|
|
| Der Code se nix nutzen - como wirken sólo PureBasic-Befehle para el PureBasic-Compiler - y compiliert sí native.
In C++ z.B. ists eigendlich auch sólo una Projekteinstellung - en como Dienst a compilieren.
Salve. |
|
|
| |
|
|
|
| *.l son long *.s son cadena *.b son byte *hallo hierbei es es strukturen
#xxxx son konstanten
funktionen con _ al Ende son Api-funktionen
Saludo Thomas
|
|
|
| |
|
|
|
| [quote:676b84de14=iF]Der Code se nix nutzen - como wirken sólo PureBasic-Befehle para el PureBasic-Compiler - y compiliert sí native.
In C++ z.B. ists eigendlich auch sólo una Projekteinstellung - en como Dienst a compilieren.
Salve.[/quote:676b84de14]Como liegste algo verkehrt, denke Yo, son sólo API aufrufen con gefüllten Estructuras, sowie auswertung el übergebenen Commandos. Sollte machbar ser. Das Programa se sólo como Service registriert y reagiert entsprechen. Wenn AH se el angesehen ha, y meint lo könne así ir, voluntad Yo después de XProfan umsetzen, hoffe Yo
Saludo Thomas |
|
|
| |
|
|