aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.RemoteDesktop/Input/MouseController.cs
blob: 295aca4b1ad48f97d9c04363ad2e733c7ce5bf4f (plain)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using WindowsInput;

namespace Tango.RemoteDesktop.Input
{
    public static class MouseController
    {
        [Flags]
        public enum MouseEventFlags
        {
            LeftDown = 0x00000002,
            LeftUp = 0x00000004,
            MiddleDown = 0x00000020,
            MiddleUp = 0x00000040,
            Move = 0x00000001,
            Absolute = 0x00008000,
            RightDown = 0x00000008,
            RightUp = 0x00000010
        }

        [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool SetCursorPos(int x, int y);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool GetCursorPos(out MousePoint lpMousePoint);

        [DllImport("user32.dll")]
        private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

        private static InputSimulator simulator;

        static MouseController()
        {
            simulator = new InputSimulator();
        }

        public static void SetCursorPosition(int x, int y)
        {
            SetCursorPos(x, y);
        }

        public static void SetCursorPosition(MousePoint point)
        {
            SetCursorPos(point.X, point.Y);
        }

        public static MousePoint GetCursorPosition()
        {
            MousePoint currentMousePoint;
            var gotPoint = GetCursorPos(out currentMousePoint);
            if (!gotPoint) { currentMousePoint = new MousePoint(0, 0); }
            return currentMousePoint;
        }

        public static void MouseEvent(MouseEventFlags value)
        {
            MousePoint position = GetCursorPosition();

            mouse_event
                ((int)value,
                 position.X,
                 position.Y,
                 0,
                 0)
                ;
        }

        public static void DoubleClick()
        {
            simulator.Mouse.LeftButtonDoubleClick();
        }

        public static void Scroll(int delta)
        {
            simulator.Mouse.VerticalScroll(delta);
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct MousePoint
        {
            public int X;
            public int Y;

            public MousePoint(int x, int y)
            {
                X = x;
                Y = y;
            }
        }
    }
}
span class="n">internal::ParseTable const TableStruct::schema[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { { NULL, NULL, 0, -1, -1, -1, -1, NULL, false }, }; const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(StubReadEmbeddedVersionRequest, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ }; static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(StubReadEmbeddedVersionRequest)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast<const ::google::protobuf::Message*>(&_StubReadEmbeddedVersionRequest_default_instance_), }; namespace { void protobuf_AssignDescriptors() { AddDescriptors(); ::google::protobuf::MessageFactory* factory = NULL; AssignDescriptors( "StubReadEmbeddedVersionRequest.proto", schemas, file_default_instances, TableStruct::offsets, factory, file_level_metadata, NULL, NULL); } void protobuf_AssignDescriptorsOnce() { static GOOGLE_PROTOBUF_DECLARE_ONCE(once); ::google::protobuf::GoogleOnceInit(&once, &protobuf_AssignDescriptors); } void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD; void protobuf_RegisterTypes(const ::std::string&) { protobuf_AssignDescriptorsOnce(); ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 1); } } // namespace void TableStruct::InitDefaultsImpl() { GOOGLE_PROTOBUF_VERIFY_VERSION; ::google::protobuf::internal::InitProtobufDefaults(); _StubReadEmbeddedVersionRequest_default_instance_._instance.DefaultConstruct(); ::google::protobuf::internal::OnShutdownDestroyMessage( &_StubReadEmbeddedVersionRequest_default_instance_);} void InitDefaults() { static GOOGLE_PROTOBUF_DECLARE_ONCE(once); ::google::protobuf::GoogleOnceInit(&once, &TableStruct::InitDefaultsImpl); } namespace { void AddDescriptorsImpl() { InitDefaults(); static const char descriptor[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { "\n$StubReadEmbeddedVersionRequest.proto\022\017" "Tango.PMR.Stubs\" \n\036StubReadEmbeddedVersi" "onRequestB\033\n\031com.twine.tango.pmr.stubsb\006" "proto3" }; ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( descriptor, 126); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "StubReadEmbeddedVersionRequest.proto", &protobuf_RegisterTypes); } } // anonymous namespace void AddDescriptors() { static GOOGLE_PROTOBUF_DECLARE_ONCE(once); ::google::protobuf::GoogleOnceInit(&once, &AddDescriptorsImpl); } // Force AddDescriptors() to be called at dynamic initialization time. struct StaticDescriptorInitializer { StaticDescriptorInitializer() { AddDescriptors(); } } static_descriptor_initializer; } // namespace protobuf_StubReadEmbeddedVersionRequest_2eproto // =================================================================== #if !defined(_MSC_VER) || _MSC_VER >= 1900 #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 StubReadEmbeddedVersionRequest::StubReadEmbeddedVersionRequest() : ::google::protobuf::Message(), _internal_metadata_(NULL) { if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) { protobuf_StubReadEmbeddedVersionRequest_2eproto::InitDefaults(); } SharedCtor(); // @@protoc_insertion_point(constructor:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) } StubReadEmbeddedVersionRequest::StubReadEmbeddedVersionRequest(const StubReadEmbeddedVersionRequest& from) : ::google::protobuf::Message(), _internal_metadata_(NULL), _cached_size_(0) { _internal_metadata_.MergeFrom(from._internal_metadata_); // @@protoc_insertion_point(copy_constructor:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) } void StubReadEmbeddedVersionRequest::SharedCtor() { _cached_size_ = 0; } StubReadEmbeddedVersionRequest::~StubReadEmbeddedVersionRequest() { // @@protoc_insertion_point(destructor:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) SharedDtor(); } void StubReadEmbeddedVersionRequest::SharedDtor() { } void StubReadEmbeddedVersionRequest::SetCachedSize(int size) const { GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); _cached_size_ = size; GOOGLE_SAFE_CONCURRENT_WRITES_END(); } const ::google::protobuf::Descriptor* StubReadEmbeddedVersionRequest::descriptor() { protobuf_StubReadEmbeddedVersionRequest_2eproto::protobuf_AssignDescriptorsOnce(); return protobuf_StubReadEmbeddedVersionRequest_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const StubReadEmbeddedVersionRequest& StubReadEmbeddedVersionRequest::default_instance() { protobuf_StubReadEmbeddedVersionRequest_2eproto::InitDefaults(); return *internal_default_instance(); } StubReadEmbeddedVersionRequest* StubReadEmbeddedVersionRequest::New(::google::protobuf::Arena* arena) const { StubReadEmbeddedVersionRequest* n = new StubReadEmbeddedVersionRequest; if (arena != NULL) { arena->Own(n); } return n; } void StubReadEmbeddedVersionRequest::Clear() { // @@protoc_insertion_point(message_clear_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) ::google::protobuf::uint32 cached_has_bits = 0; // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; _internal_metadata_.Clear(); } bool StubReadEmbeddedVersionRequest::MergePartialFromCodedStream( ::google::protobuf::io::CodedInputStream* input) { #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure ::google::protobuf::uint32 tag; // @@protoc_insertion_point(parse_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) for (;;) { ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); tag = p.first; if (!p.second) goto handle_unusual; handle_unusual: if (tag == 0) { goto success; } DO_(::google::protobuf::internal::WireFormat::SkipField( input, tag, _internal_metadata_.mutable_unknown_fields())); } success: // @@protoc_insertion_point(parse_success:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) return true; failure: // @@protoc_insertion_point(parse_failure:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) return false; #undef DO_ } void StubReadEmbeddedVersionRequest::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); } // @@protoc_insertion_point(serialize_end:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) } ::google::protobuf::uint8* StubReadEmbeddedVersionRequest::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); } // @@protoc_insertion_point(serialize_to_array_end:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) return target; } size_t StubReadEmbeddedVersionRequest::ByteSizeLong() const { // @@protoc_insertion_point(message_byte_size_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) size_t total_size = 0; if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { total_size += ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); } int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); _cached_size_ = cached_size; GOOGLE_SAFE_CONCURRENT_WRITES_END(); return total_size; } void StubReadEmbeddedVersionRequest::MergeFrom(const ::google::protobuf::Message& from) { // @@protoc_insertion_point(generalized_merge_from_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) GOOGLE_DCHECK_NE(&from, this); const StubReadEmbeddedVersionRequest* source = ::google::protobuf::internal::DynamicCastToGenerated<const StubReadEmbeddedVersionRequest>( &from); if (source == NULL) { // @@protoc_insertion_point(generalized_merge_from_cast_fail:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) ::google::protobuf::internal::ReflectionOps::Merge(from, this); } else { // @@protoc_insertion_point(generalized_merge_from_cast_success:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) MergeFrom(*source); } } void StubReadEmbeddedVersionRequest::MergeFrom(const StubReadEmbeddedVersionRequest& from) { // @@protoc_insertion_point(class_specific_merge_from_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; } void StubReadEmbeddedVersionRequest::CopyFrom(const ::google::protobuf::Message& from) { // @@protoc_insertion_point(generalized_copy_from_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) if (&from == this) return; Clear(); MergeFrom(from); } void StubReadEmbeddedVersionRequest::CopyFrom(const StubReadEmbeddedVersionRequest& from) { // @@protoc_insertion_point(class_specific_copy_from_start:Tango.PMR.Stubs.StubReadEmbeddedVersionRequest) if (&from == this) return; Clear(); MergeFrom(from); } bool StubReadEmbeddedVersionRequest::IsInitialized() const { return true; } void StubReadEmbeddedVersionRequest::Swap(StubReadEmbeddedVersionRequest* other) { if (other == this) return; InternalSwap(other); } void StubReadEmbeddedVersionRequest::InternalSwap(StubReadEmbeddedVersionRequest* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); swap(_cached_size_, other->_cached_size_); } ::google::protobuf::Metadata StubReadEmbeddedVersionRequest::GetMetadata() const { protobuf_StubReadEmbeddedVersionRequest_2eproto::protobuf_AssignDescriptorsOnce(); return protobuf_StubReadEmbeddedVersionRequest_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS // StubReadEmbeddedVersionRequest #endif // PROTOBUF_INLINE_NOT_IN_HEADERS // @@protoc_insertion_point(namespace_scope) } // namespace Stubs } // namespace PMR } // namespace Tango // @@protoc_insertion_point(global_scope)