Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.09.20;
Скачать: [xml.tar.bz2];

Вниз

Set|Get CursorPos при закрытом окне RDP   Найти похожие ветки 

 
ВладОшин ©   (2015-02-02 16:04) [0]

Автоматизировал одну программку, мышка ездит по окну, кликает.
Поставил на удаленке, захожу по RDP, запускаю - все работает.
Закрываю окно RPD, просто окно(на крестик жму:))
Не работает.

Стал логировать - вижу это:

код
 
 SetCursorPos(X, Y);
 tolog(Format("SetCursorPos %d %d",[X, Y]));
 GetCursorPos(pt);
 tolog(Format("GetCursor %d %d",[pt.X, pt.Y]));


вывод

SetCursorPos  1814 950
GetCursor  4233995 0


Не сталкивались? С ходу ничего не попалось что-то (вернее, немного не то попалось)


 
ВладОшин ©   (2015-02-02 16:06) [1]

еще записи
set
get

140 100
233995 0

90 160
233995 0


 
Дмитрий С ©   (2015-02-02 16:20) [2]

Можно виртуалку на удаленной машине создать и там так делать.

Ну либо имитировать мышь просто сообщениями.


 
junglecat ©   (2015-02-02 16:43) [3]

> GetCursor  4233995 0

логично. нет десктопа - нет курсора.
тут надо что-то типа mouse_event


 
brother ©   (2015-02-02 16:45) [4]

вроде уже обсуждалось, что при закрытом RDP нет контекста рабочего стола со всеми вытекающими...


 
Kilkennycat ©   (2015-02-02 17:04) [5]

странно. если на сервере сеанс пользователя открыт, то почему нет контекста? может, это только при том случае, когда сеанс RDP не подключается к рабочему сеансу, а создает новый?


 
brother ©   (2015-02-02 17:14) [6]

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


 
ВладОшин ©   (2015-02-02 17:46) [7]

mouse_event тоже не прошел

программка1, форма показывает куда нажали
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 tolog(DateTimeToStr(Now));
 tolog(Format("FormMouseDown %d %d",[X, Y]));
 tolog("******");

02.02.2015 17:38:21
FormMouseDown 104 124
******
02.02.2015 17:38:41
FormMouseDown 144 91

программка2
 tolog(DateTimeToStr(Now));
 tolog(Format("MoveCursor %d %d",[X, Y]));
 x := Round(x * (65535 / Screen.Width)) +1;
 y := Round(y * (65535 / Screen.Height)) +1;
 tolog(Format("MoveCursorAfter %d %d",[X, Y]));
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, x, y, 0, 0);

 mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
 mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);


02.02.2015 17:38:21
MoveCursor 108 147
MoveCursorAfter 5057 9176

02.02.2015 17:38:23
MoveCursor 107 184
MoveCursorAfter 5010 11485

02.02.2015 17:38:25
MoveCursor 105 129
MoveCursorAfter 4916 8052

пока смотришь - №1 получает клики, как закрыл - нет.


> закрытом RDP нет контекста рабочего стола со всеми вытекающими.
> ..

какая жаль.. а если надо? :)

>> Ну либо имитировать мышь просто сообщениями.
да я бы с радостью..
но там картинка, которая рисуется по канве, WindowExplorer показывает одно окно, типа TPanel  походу лежит, а там уже по x y вычисляется
А так то там кнопки нарисованы, но именно нарисованы


 
ВладОшин ©   (2015-02-02 17:55) [8]


> Дмитрий С ©   (02.02.15 16:20) [2]


> Можно виртуалку на удаленной машине создать и там так делать.

остается это похоже


 
Kilkennycat ©   (2015-02-02 18:58) [9]


> TPanel  походу лежит, а там уже по x y вычисляется
> А так то там кнопки нарисованы, но именно нарисованы

а послать сообщение панели, уже от ее координат плясая?


 
ВладОшин ©   (2015-02-02 20:48) [10]


> послать сообщение панели

можно попробовать, в принципе то..
виртуалку ради этого всего разворачивать не хотелось бы, конечно


 
han_malign ©   (2015-02-03 13:05) [11]


> на сервере сеанс пользователя открыт, то почему нет контекста?

SetCursorPos function
...
Remarks
The cursor is a shared resource. A window should move the cursor only when the cursor is in the window"s client area.

The calling process must have WINSTA_WRITEATTRIBUTES access to the window station.

The input desktop must be the current desktop when you call SetCursorPos. Call OpenInputDesktop to determine whether the current desktop is the input desktop. If it is not, call SetThreadDesktop with the HDESK returned by OpenInputDesktop to switch to that desktop.


Desktops
...
The desktops associated with the interactive window station, Winsta0, can be made to display a user interface and receive user input, but only one of these desktops at a time is active.
...
By default, there are three desktops in the interactive window station: Default, ScreenSaver, and Winlogon.

The Default desktop is created when Winlogon starts the initial process as the logged-on user. At that point, the Default desktop becomes active, and it is used to interact with the user.

Whenever a secure screen saver activates, the system automatically switches to the ScreenSaver desktop, which protects the processes on the default desktop from unauthorized users. Unsecured screen savers run on Winsta0\Default.

The Winlogon desktop is active while a user logs on. The system switches to the default desktop when the shell indicates that it is ready to display something, or after thirty seconds, whichever comes first. During the user"s session, the system switches to the Winlogon desktop when the user presses the CTRL+ALT+DEL key sequence, or when the User Account Control (UAC) dialog box is open.


- ну и вдогонку(для тех кому таки не лень выяснить сколько живет фокус ввода, DC и/или права доступа к нему(т.к. - как написано выше - Winsta0\Default создается один раз)):

WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSConnectState, ...)

   WTSActive,              // User logged on to WinStation
   WTSConnected,           // WinStation connected to client
   WTSConnectQuery,        // In the process of connecting to client
   WTSShadow,              // Shadowing another WinStation
   WTSDisconnected,        // WinStation logged on without client
   WTSIdle,                // Waiting for client to connect
   WTSListen,              // WinStation is listening for connection
   WTSReset,               // WinStation is being reset
   WTSDown,                // WinStation is down due to error
   WTSInit,                // WinStation in initialization


 
ВладОшин ©   (2015-02-04 13:14) [12]

пнятно. Значит, виртуалка.
Спасибо


 
junglecat ©   (2015-02-04 13:18) [13]

так а mouse_event + onmousedown не работает?


 
ВладОшин ©   (2015-02-04 14:52) [14]

нет


 
ВладОшин ©   (2015-02-04 14:56) [15]

да уже виртуалку "одмины" выделили, там юзер не разлогинивается, ходить по тимвьюверу/радмину. В общем, проверил - работает.
тут еще задачка нарисовалась :) надо подумать
Ладно, фиг с этим курсором, работает и хорошо, все равно временно



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2015.09.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
15-1421926934
Kerk
2015-01-22 14:42
2015.09.20
Вакансия


3-1305530024
Aybolit
2011-05-16 11:13
2015.09.20
Paradox 3.5


15-1422999005
Юрий
2015-02-04 00:30
2015.09.20
С днем рождения ! 4 февраля 2015 среда


15-1422357619
Kerk
2015-01-27 14:20
2015.09.20
Сжатие данных


15-1422873582
Дмитрий С
2015-02-02 13:39
2015.09.20
Как убрать "Возможно, эта программа установлена неправильно"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский