The SetThreadDesktop function assigns a desktop to the calling thread. All subsequent operations on the desktop use the access rights granted to hDesktop.
Опришник писал(а):The SetThreadDesktop function assigns a desktop to the calling thread. All subsequent operations on the desktop use the access rights granted to hDesktop.
Dim hOriginalThread&, _
hOriginalInput&, _
hNewDesktop&
hOriginalThread = GetThreadDesktop(GetCurrentThreadId)
hOriginalInput = OpenInputDesktop(0, False, DESKTOP_SWITCHDESKTOP)
hNewDesktop = CreateDesktop(имя_десктопа, 0, 0, 0, GENERIC_ALL, 0)
If hNewDesktop Then
Call SetThreadDesktop(hNewDesktop)
Call SwitchDesktop(hNewDesktop)
End If
Опришник писал(а):SetThreadDesktop - это не то(мне так кажется)
в эту функцию мы передаём манипулятор десктопа...но не как не манипулятор(или ещё что-нибудь) нити.
Опришник писал(а):В мсдн есть пример в котором показано как сделать десктоп, а на нём MessageBox...
Там для этого используются функции *WindowStation...
а ещё RpcImpersonateClient и RpcRevertToSelf...
Опришник писал(а):В общем с тем как сделать десктоп и показать его я разобрался:
...
А вот с остальным проблемы...
Опришник писал(а):Так же можно сделать поток, и указать при создании какому десктопу он принадлежит...Но чё-та не хочет CreateProcess делать нормально поток(на VB)...
tyomitch писал(а):WindowStation-ы то тут при чём?
Опришник писал(а):SetThreadDesktop работает нормально...
CreateProcess выдаёт ошибку, хотя поток создаётся
tyomitch писал(а):Ничего не понимаю... Покажи свой код, что ли? В вышеприведённом CreateProcess нету вовсе.
Public Type THREAD_DATA
hDesk As Long
szDesktopName As String * 20
End Type
Public Function Thread_Desktop(ByVal ThreadFunc&, td As THREAD_DATA)
Dim hOriginalThread&, _
hOriginalInput, _
hNewDesktop
hOriginalThread = GetThreadDesktop(GetCurrentThreadId())
hOriginalInput = OpenInputDesktop(0, False, DESKTOP_SWITCHDESKTOP)
hNewDesktop = CreateDesktop(td.szDesktopName, 0, 0, 0, GENERIC_ALL, 0)
If hNewDesktop Then
Call SetThreadDesktop(hNewDesktop)
Call SwitchDesktop(hNewDesktop)
td.hDesk = hNewDesktop
Dim tid&, _
hThread&
hThread = CreateThread(0, 0, ThreadFunc, td, 0, tid)
If hThread Then
Call WaitForSingleObject(hThread, INFINITE)
Call CloseHandle(hThread)
End If
Call SwitchDesktop(hOriginalInput)
Call SetThreadDesktop(hOriginalThread)
Call CloseDesktop(hNewDesktop)
End If
End Function
Опришник писал(а):Да, адрес с помощью AddressOf получаю....
Значит всё дело в функции...
tyomitch писал(а):CreateProcess - это зашифрованное название CreateThread?
tyomitch писал(а):Почему же только, ещё есть VB5 и VB.net
tyomitch писал(а):А тебе действительно нужно показывать окна одного процесса на нескольких десктопах сразу? Может быть, создавать по процессу на десктоп?
Опришник писал(а):tyomitch писал(а):А тебе действительно нужно показывать окна одного процесса на нескольких десктопах сразу? Может быть, создавать по процессу на десктоп?
Нет мне только на одном десктопе процесс нужен причём желательно единственный...
GSerg писал(а):Примечание: VB .NET работает на 98. Это писать проги .NET на 98 нельзя, но работать они там будут...
tyomitch писал(а):Опришник писал(а):tyomitch писал(а):А тебе действительно нужно показывать окна одного процесса на нескольких десктопах сразу? Может быть, создавать по процессу на десктоп?
Нет мне только на одном десктопе процесс нужен причём желательно единственный...
Тогда зачем вторую нить создаёшь?
Опришник писал(а):А может всё-таки многопоточность возможна
Опришник писал(а):Я подумал: а не всё равно ли винде на чём мы пишем прогу? И вообще я себе представляю многопоточность как очередь с приоритетами, где значения - это точки на которые нужно передовать управление... Если это так(кстати, так ли это?), то чё в vb-шном коде не так?
Опришник писал(а):tyomitch писал(а):Опришник писал(а):tyomitch писал(а):А тебе действительно нужно показывать окна одного процесса на нескольких десктопах сразу? Может быть, создавать по процессу на десктоп?
Нет мне только на одном десктопе процесс нужен причём желательно единственный...
Тогда зачем вторую нить создаёшь?
Просто у меня до-сих пор не появляются мои окна на десктопе имя_десктопа, поэтому вопрос ещё актуален...
Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 182