Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748

Обращение к другому рабочему столу

20.10.2011, 16:47. Показов 3392. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Знаете окошко Unlock Computer? Оно появляется после нажатия Ctrl + Alt + Del Enter. Окошко хорошее, да вот только одна проблемка - заслоняет оно фоту девушки прям по центру - не дело Решил его сдвинуть.
По простому FindWindow не получилось.
После выяснений узнал, что оно находится на другом рабочем столе - WinSta0Winlogon.
Притом, чтобы обратиться к этому рабочему столу необходимо запускать свое приложение как службу. Ну да ладно - не беда. Поставил nnCron и через него запустил. Но все равно, толка никакого. На рабочий стол другой переходить не хочет. Код следующий:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Main()
 
Dim handle As Long
Dim WinSta As Long, Desktop As Long, STD As Long
WinSta = OpenWindowStation("Winsta0", False, GENERIC_ALL)
SetProcessWindowStation WinSta
Desktop = OpenDesktop("default", 0, False, GENERIC_ALL)
STD = SetThreadDesktop(Desktop)
If STD = 0 Then MsgBox "GLE: " & GetLastError
MsgBox "Desktop: " & Desktop ' <---
handle = FindWindow(vbNullString, "Unlock Computer")
If handle > 0 Then SetWindowPos handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE
MsgBox "Handle: " & handle
Open "C:123.log" For Append As #1
Print #1, CStr(WinSta)
Print #1, CStr(Desktop)
Print #1, CStr(handle)
Close #1
 
CloseWindowStation WinSta
CloseDesktop Desktop
 
MsgBox "done"
End Sub
Выеделенный MsgBox должен быть НЕ видем на текущем рабочем столе, а должен быть виден только после нажатия Ctrl + Alt + Del. Однако, виден он на текущем рабочем столе (WinSta0Default).
Аналогичная программа, написанная на C сидящим рядом со мной человеком работает без проблем:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# include <windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance,
 
    HINSTANCE hPrevInstance,
 
    LPSTR lpCmdLine,
 
    int nCmdShow
 
)
 
{
 
      HWINSTA hWS = OpenWindowStation("Winsta0", FALSE, GENERIC_ALL);
 
      SetProcessWindowStation(hWS);
 
      HDESK hDT = OpenDesktop("Winlogon", 0, FALSE, GENERIC_ALL);
 
      SetThreadDesktop(hDT);
 
      MessageBox(0,"test","header",0); // <---
 
      return 0;
 
};
Выделенное собщение появляется там где надо, т.е. на другом рабочем столе.
Когда делаю проверку на ошибки, то вижу, что в STD (STD = SetThreadDesktop(Desktop)) кладется ноль, соответственно функция выполнилась неправильно, судя по MSDN (If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError).
Однако GetLastError тоже возвращает ноль!
В чем моя ошибка?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2011, 16:47
Ответы с готовыми решениями:

Путь к рабочему столу
Есть ли какой-нибудь &quot;общий&quot; путь к рабочему столу. Я имею ввиду, что бы путь годился на любом компьютере, а то если я создам программу...

Путь к рабочему столу
Пишу курсовую и столкнулся с 2мя проблемами. Прога будет делать сортировку рабочего стола, но как его найти? Мой вариант: прога копируется...

Альтернатива рабочему столу
Вот задался идеей создать альтернативный рабочий стол и возникла масса вопросов. Первый стоил лиделать его на билдере или же лучше на...

8
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
20.10.2011, 17:00  [ТС]
Извиняюсь, опечатался.
Вместо Desktop = OpenDesktop("[bold]default[/bold] ", 0, False, GENERIC_ALL) на самом деле там Desktop = OpenDesktop("[bold]Winlogon[/bold] ", 0, False, GENERIC_ALL).
Это уже потом после неудачи просто тестировали.
0
1 / 1 / 0
Регистрация: 25.05.2008
Сообщений: 232
23.10.2011, 08:44
НЕмного не по теме ) Можно открыть девушку в фотошопе и сдвинуть ее чуть в право или влево )
0
Messir
23.10.2011, 12:56
Цитата Сообщение от DjinnWalker
НЕмного не по теме ) Можно открыть девушку в фотошопе и сдвинуть ее чуть в право или влево )
Неспортивно-то как...
Да и какие-нибудь важные части тела терять не хочется...
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
23.10.2011, 12:57  [ТС]
Цитата Сообщение от DjinnWalker
НЕмного не по теме ) Можно открыть девушку в фотошопе и сдвинуть ее чуть в право или влево )
Неее) Это ламерский выход) Программеры мы или кто? ))))

и так, еще немного размышлений. Хотел еще в пятницу запостить, да времени не было
Посидели мы часик с Comanche в аське и вот что поняли...
Во-первых, ошибка действительно есть, но VB ее НЕ видит (в GetLastError).
При помощи отладчика человек выловил, что ошибка появляется 170-я: 170 The requested resource is in use. ERROR_BUSY.
Стали рыть дальше. Нашли следующее...
"error code 170 means that your application still has opened windows/hooks on its previous desktop, a simple solution is to call SetThreadDesktop as early as possible, in the constructor of your app class, for example."
И были удивлены - как это так... В программе нет НИ ОДНОЙ формы, а написано про какие-то окна и хуки.
Думали, что может все-таки ошибка в правах доступа. Попробовали MAXIMUM_ALLOWED вместо GENERIC_ALL. Никакого результата.
Стали искать скрытые окна.... и нашли две штуки... VBMsoStdCompMgr и ThunderRT6Main.
После рытья в MSDN оказалось, что VB для любого проекта создает по два скрытых окна, необходимых для отлова виндовых сообщений: "VBFocusRT6 and VBMsoStdCompMgr are hWnds created by the Visual Basic runtime for Microsoft-proprietary Windows Messages related to the operation of the runtime. They cannot be removed, but receive very few messages anyways. ThunderRT6Main is the "parent" hWnd -- if a Visual Basic form existed, this hWnd would pass messages from the other two proprietary hWnds to the forms (and trap some that forms shouldn''t get). These three hWnds cannot be removed and do not provide any performance bottlenecks."
Кильнуть их нельзя, т.к. без них ничего работать не будет. На другой десктоп их тоже нельзя перенести.
В результате пришли к выводу, что на VB это можно сделать только путем мультитрединга, т.к. первый тред изначально является неподходящим, т.к. в нём изначально ("автоматом") уже есть те самые два скрытых окна.
Будем надеяться, что эта информация кому-нибудь пригодится

[italic]С уважением, Alexey Spirin & Comanche.[/italic]
0
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
23.10.2011, 15:23
а флажок Unattended Execution не пробовали на своем экзешничке без формочек ставить?
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
23.10.2011, 16:04  [ТС]
Попробовал. Не помогает
0
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
23.10.2011, 16:54
видно VB для таких низкоуровневых вещей не совсем подходит
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
23.10.2011, 17:14  [ТС]
ну по всей видимости да... )
Вот думаю может мультитредингом попробовтаь заняться в свободное время... )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2011, 17:14
Помогаю со студенческими работами здесь

Доступ к Рабочему столу
Всем доброе время суток!!! Вот проблема я разрабатываю программу на VS C# и мне нужно узнать в путь в реестре для доступа к рабочему столу....

Путь к рабочему столу...
Как узнать путь к рабочему столу?

Подключением к удаленному рабочему столу
Всем привет! Весь день ломаю голову над данной проблемой: Есть домашний сервак под ОС 2008 R2, имеет всего 2 роли: Сервер приложений и...

Перемещение грида по рабочему столу
В гриде расположен рисунок и таймер, сам грид обтекает полностью по форме,я убрал рамку и фон формы, но как сделать ,чтоб грид перемещался...

Поиск пути к рабочему столу
Здравствуйте. Я просмотрел несколько тем на форуме с этой темой, но ни черта не понял. Может кто-нибудь показать, как можно найти путь к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru