das Programmbeispiel startet ein neues Desktop ohne Taskbar oder Desktopicons und startet ein externes Programm,
und das beste ist das man den neuen Desktop nicht mit dem Taskmangaer beenden kann sondern nur über das Fenster mit
dem neuen Desktopnamen, viel Spass!
Vielen Dank den Usern die mir hierbei geholfen haben
srod <-- english forum
ts-soft <-- english and german forum
Trond <-- english forum
uweb <-- german forum
friedhelm <-- german forum
falko <-- german forum
Code: Alles auswählen
#WINSTA_ALL = #WINSTA_ACCESSCLIPBOARD | #WINSTA_ACCESSGLOBALATOMS | #WINSTA_CREATEDESKTOP | #WINSTA_ENUMDESKTOPS | #WINSTA_ENUMERATE | #WINSTA_EXITWINDOWS | #WINSTA_READATTRIBUTES | #WINSTA_READSCREEN | #WINSTA_WRITEATTRIBUTES | #DELETE | #READ_CONTROL | #WRITE_DAC | #WRITE_OWNER
#DESKTOP_ALL = #DESKTOP_READOBJECTS | #DESKTOP_CREATEWINDOW | #DESKTOP_CREATEMENU | #DESKTOP_HOOKCONTROL | #DESKTOP_JOURNALRECORD | #DESKTOP_JOURNALPLAYBACK | #DESKTOP_ENUMERATE | #DESKTOP_WRITEOBJECTS | #DESKTOP_SWITCHDESKTOP | #STANDARD_RIGHTS_REQUIRED
#UOI_NAME = $2
Global m_sDesktop.s
m_sDesktop = Space(128)
Global cmdline$
cmdline$="C:\WINDOWS\system32\notepad.exe"
Global FontID1
FontID1 = LoadFont(1, "Arial", 22, #PB_Font_Bold)
Global startupinfo.STARTUPINFO
startupinfo\cb=SizeOf(STARTUPINFO)
startupinfo\lpReserved=#NUL
startupinfo\lpDesktop=#NUL
startupinfo\lpTitle=#NUL
startupinfo\dwX=#NUL
startupinfo\dwY=#NUL
startupinfo\dwXSize=#NUL
startupinfo\dwYSize=#NUL
startupinfo\dwXCountChars=#NUL
startupinfo\dwYCountChars=#NUL
startupinfo\dwFillAttribute=#NUL
startupinfo\dwFlags=#STARTF_USESHOWWINDOW
startupinfo\wShowWindow=#SW_SHOW
startupinfo\cbReserved2=#NUL
startupinfo\lpReserved2=#NUL
startupinfo\hStdInput=#NUL
startupinfo\hStdOutput=#NUL
startupinfo\hStdError=#NUL
Global process_information.PROCESS_INFORMATION
process_information\hProcess=#NUL
process_information\hThread=#NUL
process_information\dwProcessId=#NUL
process_information\dwThreadId=#NUL
;Global tSi.STARTUPINFO
;Show an error
Procedure Abort(s.s)
MessageRequester("", "Error: "+s.s)
Debug "Error: "+s.s
End
EndProcedure
Procedure.s GetDesktopName()
Protected hDesktop, lR, lSize, sBuff.s, iPos
hDesktop = OpenInputDesktop_(0, #False, #DESKTOP_READOBJECTS)
If hDesktop
lSize = (Len(m_sDesktop) + 1) * 2
sBuff=Space(lSize+1)
lR = GetUserObjectInformation_(hDesktop, #UOI_NAME, @sBuff, lSize, @lSize)
CloseHandle_(hDesktop) ; Should this be CloseDesktop_() ?
EndIf
ProcedureReturn sBuff
EndProcedure
;Check a result and ev. abort
Procedure Chk(a.l, s.s)
;If a is false, abort.
;If a is false and s contains an error message, show it before abort.
If Not(a)
If s.s
Abort(s.s)
Else
End
EndIf
EndIf
EndProcedure
hWinSta = OpenWindowStation_("WinSta0", 0, #WINSTA_ALL)
Chk( SetProcessWindowStation_(hWinSta) , "Failed to set window station")
hDefaultDesk = OpenDesktop_("Default", #DF_ALLOWOTHERACCOUNTHOOK, 0, #DESKTOP_SWITCHDESKTOP)
Chk(hDefaultDesk, "Failed to open default desktop")
hDesk = CreateDesktop_("My Desktop 2", 0, 0, #DF_ALLOWOTHERACCOUNTHOOK, #DESKTOP_ALL, 0)
Chk( hDesk, "Failed to create desktop")
SetThreadDesktop_(hDesk) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Chk( SwitchDesktop_(hDesk), "Failed to switch desktop")
If OpenWindow(1, 216, 0, 255, 165, "Test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(1))
TextGadget(1, 20, 70, 210, 30, "Test", #PB_Text_Center)
SetGadgetFont(1, FontID1)
EndIf
EndIf
m_sDesktop = GetDesktopName()
SetGadgetText(1,m_sDesktop)
tSi.STARTUPINFO
tSi\lpTitle = @m_sDesktop
tSi\lpDesktop = @m_sDesktop
tPi.PROCESS_INFORMATION
ret=createprocess_(#NUL,@cmdline$,#NUL,#NUL,#False,0,#NUL,#NUL,@tSi,@tPi)
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
EndIf
Until Event = #PB_Event_CloseWindow
;Delay(2000)
Chk( SwitchDesktop_(hDefaultDesk), "Failed to switch desktop")
SetThreadDesktop_(hDefaultDesk) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CloseDesktop_(hDesk)
CloseDesktop_(hDefaultDesk)
CloseWindowStation_(hWinSta)