468,491 Members | 2,079 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,491 developers. It's quick & easy.

CreateWindowStation

Does anyone have the vb code to use this function I have found the API
import for this but not the layout of the structures that need to be passed
to the routine. I'm also looking for vb versions of

- CreateWindowStation
- SetProcessWindowStation
- CreateDesktop
- SetThreadDesktop
- GetGUIThreadInfo

Any help would be great. VB.NET please.

Thanks
P :-)
Nov 20 '05 #1
5 4095
Paul,

Try this

Structure RECT
Public left, top, right, bottom As Integer
End Structure

Structure GUITHREADINFO
Public cbSize As Integer
Public flags As Integer
Public hwndActive As IntPtr
Public hwndFocus As IntPtr
Public hwndCapture As IntPtr
Public hwndMenuOwner As IntPtr
Public hwndMoveSize As IntPtr
Public hwndCaret As IntPtr
Public rcCaret As RECT
End Structure

Structure SECURITY_ATTRIBUTES
Public nLength As Integer
Public lpSecurityDescriptor As IntPtr
Public bInheritHandle As Boolean
End Strucure

Declare Auto Function CreateWindowStation Lib "user32.dll" (lpwinsta
As String, dwFlags As Integer, dwDesiredAccess As Integer, lpsa As
IntPtr) As IntPtr

Declare Function SetProcessWindowStation Lib "user32.dll" (hWinSta As
IntPtr) As Boolean

Declare Auto Function CreateDesktop Lib "user32.dll" (lpszDesktop As
String, lpszDevice As IntPtr, pDevmode As IntPtr, dwFlags As Integer,
dwDesiredAccess As Integer, lpsa As IntPtr) As IntPtr

Declare Function SetThreadDesktop Lib "user32.dll" (hDesktop As
IntPtr) As Boolean

Declare Function GetGUIThreadInfo Lib "user32.dll" (idThread As
Integer, ByRef lpgui As GUITHREADINFO) As Boolean

For CreateWindowStation and CreateDesktop, you can change the lpsa
parameter to ByRef lpsa As SECURITY_ATTRIBUTES if you actually want to
specify it (not pass NULL).

Mattias

--
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.
Nov 20 '05 #2
Thanks, I'll give the coding a go this week.

"Mattias Sjögren" <ma********************@mvps.org> wrote in message
news:%2******************@TK2MSFTNGP11.phx.gbl...
Paul,

Try this

Structure RECT
Public left, top, right, bottom As Integer
End Structure

Structure GUITHREADINFO
Public cbSize As Integer
Public flags As Integer
Public hwndActive As IntPtr
Public hwndFocus As IntPtr
Public hwndCapture As IntPtr
Public hwndMenuOwner As IntPtr
Public hwndMoveSize As IntPtr
Public hwndCaret As IntPtr
Public rcCaret As RECT
End Structure

Structure SECURITY_ATTRIBUTES
Public nLength As Integer
Public lpSecurityDescriptor As IntPtr
Public bInheritHandle As Boolean
End Strucure

Declare Auto Function CreateWindowStation Lib "user32.dll" (lpwinsta
As String, dwFlags As Integer, dwDesiredAccess As Integer, lpsa As
IntPtr) As IntPtr

Declare Function SetProcessWindowStation Lib "user32.dll" (hWinSta As
IntPtr) As Boolean

Declare Auto Function CreateDesktop Lib "user32.dll" (lpszDesktop As
String, lpszDevice As IntPtr, pDevmode As IntPtr, dwFlags As Integer,
dwDesiredAccess As Integer, lpsa As IntPtr) As IntPtr

Declare Function SetThreadDesktop Lib "user32.dll" (hDesktop As
IntPtr) As Boolean

Declare Function GetGUIThreadInfo Lib "user32.dll" (idThread As
Integer, ByRef lpgui As GUITHREADINFO) As Boolean

For CreateWindowStation and CreateDesktop, you can change the lpsa
parameter to ByRef lpsa As SECURITY_ATTRIBUTES if you actually want to
specify it (not pass NULL).

Mattias

--
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.

Nov 20 '05 #3
Hi.

The codes works great I can now create a new desktop and switch to this,
however the desktop shows blank with no icons and when I try to use the
CreateProcess API on open a new application on the desktop it says there was
an application fault. If I try CreateProceesWithLogon nothing happens. Any
ideas ?

Thanks
Paul

"Mattias Sjögren" <ma********************@mvps.org> wrote in message
news:%2******************@TK2MSFTNGP11.phx.gbl...
Paul,

Try this

Structure RECT
Public left, top, right, bottom As Integer
End Structure

Structure GUITHREADINFO
Public cbSize As Integer
Public flags As Integer
Public hwndActive As IntPtr
Public hwndFocus As IntPtr
Public hwndCapture As IntPtr
Public hwndMenuOwner As IntPtr
Public hwndMoveSize As IntPtr
Public hwndCaret As IntPtr
Public rcCaret As RECT
End Structure

Structure SECURITY_ATTRIBUTES
Public nLength As Integer
Public lpSecurityDescriptor As IntPtr
Public bInheritHandle As Boolean
End Strucure

Declare Auto Function CreateWindowStation Lib "user32.dll" (lpwinsta
As String, dwFlags As Integer, dwDesiredAccess As Integer, lpsa As
IntPtr) As IntPtr

Declare Function SetProcessWindowStation Lib "user32.dll" (hWinSta As
IntPtr) As Boolean

Declare Auto Function CreateDesktop Lib "user32.dll" (lpszDesktop As
String, lpszDevice As IntPtr, pDevmode As IntPtr, dwFlags As Integer,
dwDesiredAccess As Integer, lpsa As IntPtr) As IntPtr

Declare Function SetThreadDesktop Lib "user32.dll" (hDesktop As
IntPtr) As Boolean

Declare Function GetGUIThreadInfo Lib "user32.dll" (idThread As
Integer, ByRef lpgui As GUITHREADINFO) As Boolean

For CreateWindowStation and CreateDesktop, you can change the lpsa
parameter to ByRef lpsa As SECURITY_ATTRIBUTES if you actually want to
specify it (not pass NULL).

Mattias

--
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.

Nov 20 '05 #4
Paul,
Any ideas ?


No sorry, I don't have enough experience with these APIs so I'd have
to play with it some more before attempting to guess what may be
wrong.

Mattias

--
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.
Nov 20 '05 #5
Hi.

Write I've managed to get a new desktop and launch the process on the
desktop, the problem I'm having now is finding the window handle to the
newly spawned application. I've tried numerious examples of FindWindow etc
and it always returns 0. I think the problem is with the
SetDesktopThread(myNewDesktop) as this returns the following error

"The Following Windows Error Occured with SetThreadDesktop: 170 - The
requested resource is in use"

So I'm guessing this is why I cant find the window as the process thread is
not talking to the newly created desktop ?
Any ideas ?

PS: Sorted out the problem with the SwitchDesktop, as this can only be
called for the interactive window station so this works on WinSta0 and not
my newly created Window Station.

Thanks
Paul

"Mattias Sjögren" <ma********************@mvps.org> wrote in message
news:%2******************@TK2MSFTNGP11.phx.gbl...
Paul,
Any ideas ?


No sorry, I don't have enough experience with these APIs so I'd have
to play with it some more before attempting to guess what may be
wrong.

Mattias

--
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.

Nov 20 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.

By using this site, you agree to our Privacy Policy and Terms of Use.