Virtual desktop,python, win32service, Not enough storage is available
От: birst  
Дата: 07.02.13 13:08
Оценка:
Всем привет,
Сначала обрисую задачу для лучшего понимания. Мне необходимо запустить терминальную сессию или 1С не суть важно и эмулировать работу человека в этом окне, но с одним условием что бы оно было свернутым или его просто бы не было видно на экране. Т.е. грубо говоря, я сижу играю читаю бугагашки а в терминальном окне или в специально открытой программе "идет работа". Перелопатив инфу, понял что в свернутом окне не получится, надо брать фокус этого окна и "печатать" в него или шевелить мышкой в нем.
Прочитал про виртуальные десктопы, и насколько я понял это то что нужно. План приложение создает вирт десктоп, запускает там приложение и "работает". Такая вот идея.
Ну и начав пробовать столкнулся с некоторыми проблемами:
первая:
смотрел сюда сюда
при создании параметр DesiredAccess должен быть чем то таким тыц
при прописывании GENERIC_ALL выдает что такой параметр в модуле не определен, числовые(инт) значения не могу найти. Юзаю пока 0.
вторая проблема при запуске вываливается такая ошибка

wdsk = win32service.CreateDesktop('My Desktop', 0, 0, None) pywintypes.error: (8, 'CreateDesktop', 'Not enough storage is available to process this command.')

import win32api, win32con, win32gui, win32ui, win32service, os
wdsk = win32service.CreateDesktop('My Desktop', 0, 0, None)
PyHDESK.SwitchDesktop()
sleep(10)
PyHDESK.Close()


подскажите в чем может быть проблема ? и по концепту как думаете правильное направление выбрал ?
Заранее спасибо
Re: Virtual desktop,python, win32service, Not enough storage is available
От: ononim  
Дата: 07.02.13 18:14
Оценка:
B>подскажите в чем может быть проблема ?
Слишком много десктопов понасоздавали наверное. На практике после создания 3..6 десктопов с дефолтовым размером хипа новые не создаются пока не закроешь все старые ненужные десктопы — пока не прибьешь все апликухи, работающие на них. Причем самое интересное что винды начиная с висты заимели привычку запускать ctfmon.exe или чтото вроде этого на новосозданных десктопах, и пока их не покиляешь — десктоп не закроется и ресурсы с ним связанные не освободяцца

B>и по концепту как думаете правильное направление выбрал ?

Будут грабли. Если вы думаете что апликуха на неактивном десктопе позовет GetForegrounndWindow и получит некое (свое) окно — сильно ошибатесь
Как много веселых ребят, и все делают велосипед...
Re[2]: Virtual desktop,python, win32service, Not enough storage is available
От: birst  
Дата: 07.02.13 18:25
Оценка:
Здравствуйте, ononim, Вы писали:

B>>подскажите в чем может быть проблема ?

O>Слишком много десктопов понасоздавали наверное. На практике после создания 3..6 десктопов с дефолтовым размером хипа новые не создаются пока не закроешь все старые ненужные десктопы — пока не прибьешь все апликухи, работающие на них. Причем самое интересное что винды начиная с висты заимели привычку запускать ctfmon.exe или чтото вроде этого на новосозданных десктопах, и пока их не покиляешь — десктоп не закроется и ресурсы с ним связанные не освободяцца
Да, так и было, все прибил, сейчас закрываю десктоп в конце.
B>>и по концепту как думаете правильное направление выбрал ?
O>Будут грабли. Если вы думаете что апликуха на неактивном десктопе позовет GetForegrounndWindow и получит некое (свое) окно — сильно ошибатесь
хм, подскажите верный путь, если он есть конечно ?
Re[3]: Virtual desktop,python, win32service, Not enough storage is available
От: ononim  
Дата: 07.02.13 18:31
Оценка:
B>>>и по концепту как думаете правильное направление выбрал ?
O>>Будут грабли. Если вы думаете что апликуха на неактивном десктопе позовет GetForegrounndWindow и получит некое (свое) окно — сильно ошибатесь
B>хм, подскажите верный путь, если он есть конечно ?
Ну правильнее всего наверное было бы использовать терминальные возможности винды — создать нового юзера с отдельной сессией (fast user switching или терминальную сессию в серверной винде) и делать все там. Правда как залогинить программно и незаметно в FUS юзера я не скажу, но вы можете погуглить, вдруг ктото так делал)
Как много веселых ребят, и все делают велосипед...
Re[4]: Virtual desktop,python, win32service, Not enough storage is available
От: birst  
Дата: 08.02.13 09:22
Оценка:
Здравствуйте, ononim, Вы писали:

B>>>>и по концепту как думаете правильное направление выбрал ?

O>>>Будут грабли. Если вы думаете что апликуха на неактивном десктопе позовет GetForegrounndWindow и получит некое (свое) окно — сильно ошибатесь
B>>хм, подскажите верный путь, если он есть конечно ?
O>Ну правильнее всего наверное было бы использовать терминальные возможности винды — создать нового юзера с отдельной сессией (fast user switching или терминальную сессию в серверной винде) и делать все там. Правда как залогинить программно и незаметно в FUS юзера я не скажу, но вы можете погуглить, вдруг ктото так делал)
Спасибо, во время изучения инфы, пришел к такому решению.Использовать терминальную сессию в десктопной винде, делается заменой termsrv.dll, в бете был функционал такой, однако в релизе убрали оставив возможность работы только одного юзверя.Но добрые люди сохранили дллку с беты. Собственно солюшн логин под другим юзером на самого себя и делай что хочешь. Однако в mstsc есть проверочка, если винда не серверная он не коннектится(на серверной винде все отлично работает). Т.е. задача сводится к написанию своего простого как двери(без защиты,шифрования,проверок и т.п. на свой же комп логинимся, чего боятся) рдп клиента или что более правильно использованию Terminal Server RemoteApp (нам ведь нужно только одно приложение по сути, сам "имитатор бурной деятельности" который стартанет нужную аппликуху). Второй вариант не пробовал еще.
Re[5]: Virtual desktop,python, win32service, Not enough storage is available
От: ononim  
Дата: 08.02.13 11:08
Оценка:
есть опенсурсный виндотерминальный клиент
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.