С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
1

Переключение на новый десктоп

19.02.2011, 22:58. Показов 8098. Ответов 25

Author24 — интернет-сервис помощи студентам
Возникла необходимость сделать так, чтоб была активна только моя программа так, чтоб другие программы не могли получать фокус (как это делают всякие блокеры). Нарыл про функцию CreateDesktop() она даже работает, всё создается. Но! Моя программа остаётся на старом. В мсдн написано, что программа не должна иметь окон. Пробовал создание десктопа сунуть до Application->Initialize(); но опять же, ничего не происходит.
Как сие можно сделать так, что обойтись одним экзешником...

Знаю, выглядит, словно я собрался блокер писать, но это не так. если вкратце, то это курсовая по защите информации. Нужно реализовать программу, которая позволит работать на за винлоканом компе..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2011, 22:58
Ответы с готовыми решениями:

Десктоп-приложение на js
Здравствуйте. Надо было написать десктоп-приложение с картами, поэтому начал изучать api яндекс...

Десктоп корпус.
Посоветуйте десктопный(лежачий) корпус. БП не нужен.(но даже если модель продаётся только с БП всё...

Не включается десктоп
Добрый день, Решил почистить сис. блок, как обычно разобрал, почистил, собрал, но на этот раз он...

Синхронизация с десктоп приложением
Здравствуйте. Есть такая интересная задача. У нас есть некторое расписание, по которому запскается...

25
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
19.02.2011, 23:00 2
не пробовали просто сообщение потери фокуса обрабатывать?
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
19.02.2011, 23:16 3
Цитата Сообщение от ChinYan Посмотреть сообщение
Знаю, выглядит, словно я собрался блокер писать, но это не так. если вкратце, то это курсовая по защите информации. Нужно реализовать программу, которая позволит работать на за винлоканом компе..
- более приемлемое описание темы курсовой есть ?
0
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
20.02.2011, 11:44  [ТС] 4
не пробовали просто сообщение потери фокуса обрабатывать?
Если винлок поверх всех окон, то это не поможет.

более приемлемое описание темы курсовой есть
"Разработать программу, позволяющую устранить заражение ПК пользователя вредоносным объектом семейства Trojan.Winlock"
Из общения с преподом удалось выяснить, что нужно что-то вроде файлового менеджера, который будет работать при заболченном explorer.exe и позволит найти и удалить бяку и восстановить работоспособность стандартного explorer'а. С нахождением и удалением/восстановлением проблем нет, а вот с тем, чтоб бяка не мешала пока что нет подвижек...
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
20.02.2011, 11:50 5
если
с удалением/восстановлением проблем нет, а вот с тем, чтоб бяка не мешала пока что нет
- не мешала что, если вы уже все удалили/восстановили ?
0
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
20.02.2011, 11:52  [ТС] 6
Как я её удалю если голые задницы на весь экран и перебить их ничем не удаётся? Вот для этого и нужен новый десктоп. Задницы останутся на старом, и можно будет на новом найти их экзешник
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
20.02.2011, 14:59 7
ну, преподу я не удивляюсь, а ты не знал о существовании функций
CreateDesktop и CreateDesktopEx ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// автовыход через 5 секуннд
// для принудительного выхода из нового десктопа
// можно использовать ALT+CTRL=DEL
  HDESK olddeskhandle = GetThreadDesktop(GetCurrentThreadId());
  HDESK hDesktop = CreateDesktop(L"NewDesktop",NULL,NULL, 0, GENERIC_ALL, NULL);
  if(hDesktop) {MessageBox(NULL,L"Новый рабочий стол создан",L"Success",MB_OK);}
  if(!hDesktop) {MessageBox(NULL,L"Новый рабочий стол не создан",L"Error",MB_OK);}
  if (!SwitchDesktop(hDesktop)) {
    MessageBox(NULL,L"Невозможно переключиться",L"Error",MB_OK);
  }
  else {SwitchDesktop(hDesktop);}
  Sleep(5000);
  SwitchDesktop(olddeskhandle);
2
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
20.02.2011, 17:52  [ТС] 8
Я про сей способ знал, однако он не работает. Появляется окно, что стол создан и даже что-то переключается, но программа по-прежнему на старом.
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
20.02.2011, 17:55 9
знал он ... по имени темы этого не мкажешь.
покажи, как запускал программу ?
0
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
20.02.2011, 18:14  [ТС] 10
мб это из-за Win7 ?
В каком смысле "как запускал"? Скомпилил проект, нажал на кнопку - перешло на новый десктоп, а прога всё еще на старом.

знал он ... по имени темы этого не мкажешь.
Нарыл про функцию CreateDesktop() она даже работает, всё создается. Но! Моя программа остаётся на старом. В мсдн написано, что программа не должна иметь окон. Пробовал создание десктопа сунуть до Application->Initialize(); но опять же, ничего не происходит.
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
20.02.2011, 18:28 11
я пробовал тоже на Вынь7, программу - как запускал - какой код ? про кнопку я в курсе.

Добавлено через 2 минуты
Нарыл про функцию CreateDesktop()...
- запамятовал , да и давно это было ... мои извинения

Добавлено через 4 минуты
ага! ты решил, что прога автоматом вслед за десктопом !
0
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
20.02.2011, 18:43  [ТС] 12
ага! ты решил, что прога автоматом вслед за десктопом !
Если имелось в виду, что прога на новый перескочит - да, я на это рассчитывал.

Или перейти на новый можно только создав новый процесс?
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
20.02.2011, 18:48 13
Цитата Сообщение от ChinYan Посмотреть сообщение
Или перейти на новый можно только создав новый процесс?
- да
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
28
29
30
31
32
33
34
35
36
37
// автовыход через 10 секуннд
// для принудительного выхода из нового десктопа
// можно использовать ALT+CTRL=DEL
 
  HDESK oldHDesktop = GetThreadDesktop(GetCurrentThreadId());
  HDESK hDesktop = CreateDesktop(L"NewDesktop",NULL,NULL, 0, GENERIC_ALL, NULL);
 
  if(hDesktop) {MessageBox(NULL,L"Новый рабочий стол создан",L"Success",MB_OK);}
  if(!hDesktop)  {MessageBox(NULL,L"Новый рабочий стол не создан",L"Error",MB_OK);}
  if (!SwitchDesktop(hDesktop)) { // if (!SetThreadDesktop(DesktopHandle) || !SwitchDesktop(DesktopHandle))
    MessageBox(NULL,L"Невозможно переключиться",L"Error",MB_OK);
  }
  else {SwitchDesktop(hDesktop);}
 
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  ZeroMemory(&si, sizeof(STARTUPINFO));
  ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
  si.cb = sizeof(STARTUPINFO);
  si.lpDesktop = UnicodeString("NewDesktop").c_str(); // AnsiString для С++ Билдер 6
//  si.lpDesktop = NULL;
  si.dwFlags = STARTF_USESHOWWINDOW;
  si.wShowWindow = SW_SHOW; //DEFAULT; // SW_SHOW;
 
  UnicodeString path= "C:\\Windows\\notepad.exe";
  CreateProcess( NULL,
        path.c_str(),
        NULL, NULL, FALSE,
        CREATE_NEW_PROCESS_GROUP,
        NULL,
        NULL,
        &si,
        &pi );
//
  Sleep(5000);
  SwitchDesktop(oldHDesktop);
  CloseDesktop(hDesktop);
0
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
20.02.2011, 18:57  [ТС] 14
Ух ты. Спасибо. Теперь буду думать, как свою прогу туда отправить.

Возник ещё вопрос. Как удалить свой десктоп? Мусорить ведь нехорошо..
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
20.02.2011, 19:10 15
Цитата Сообщение от ChinYan Посмотреть сообщение
Ух ты. Спасибо.
Возник ещё вопрос. Как удалить свой десктоп? Мусорить ведь нехорошо..
-
C++
1
2
SwitchDesktop(oldHDesktop);
CloseDesktop(hDesktop);
- так при возвращении старого рабочего стола новый как бы закрывается
незаметное какое-то спасибо получилось

Добавлено через 1 минуту
Теперь буду думать, как свою прогу туда отправить.
- а шо тут думать -
C++
1
path= "путь\\к_вашему\\.exe";
1
2 / 2 / 0
Регистрация: 23.09.2010
Сообщений: 47
20.02.2011, 20:37  [ТС] 16
так при возвращении старого рабочего стола новый как бы закрывается
Видимо нет. Если два раза запустить, то там будут два блокнота. Мб. десктоп закрывается если там нет окон?
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
20.02.2011, 20:39 17
Вы закрываете стол, а блокнот надо закрывать ручками.
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
13.05.2011, 11:12 18
Хочу поднять старую тему.

Я тут пишу одно приложение, и хочу реализовать такую функцию:

Когда у пользователя компьютер в обычном режиме(рабочем) то окно программы появляется как и положено по умолчанию. Но вот когда пользователь блокирует комп(Не логофф, а просто винлок) то окно программы естественно прячется. а мне бы надо, что бы мое окно оказалось видимым даже в таком виде.

почитал в МСДН что за это отвечают 2 десктопа:

default - обычный рабочий стол.
Winlogon - как раз и есть тот десктоп.

можно ли как-то перекинуть форму на этот десктоп ?
_________________________
Точно знаю что такое возможно
потому как системная утилита shutdown.exe когда запущена показывается поверх всего, в каком бы состоянии небыл комп.
0
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 3
13.05.2011, 13:09 19
при чем Winlogon когда пользователь блокирует комп (Не логофф, а просто винлок) ?
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
13.05.2011, 13:29 20
да, именно блокирование компа.

логофф меня пока не интересует.
0
13.05.2011, 13:29
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2011, 13:29
Помогаю со студенческими работами здесь

Как обновить десктоп?
Нужно программно обновить десктоп. В IActiveDesktop не нашел ничего похожего. Пробовал через...

Какой десктоп выбрать?
Ребята, я вот подумал о том, что бы на Убунту помимо Гнома поставить Кеды. Изучил xfce, поразил...

Как с помощью Яндексс.Десктоп...
Господа! Налетаем? Как пользоваться десктопом, чтобы оптимизовать под Яндекс сайт?

Запуск десктоп приложения с браузера
Возникла необходимость запускать с браузера десктоп приложение под Виндоус. Более подробно. Есть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru