Форум: "Прочее";
Текущий архив: 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
программка2tolog(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