Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.07.2011
Сообщений: 3

Управление мышью в Windows Forms Aplication

22.07.2011, 01:06. Показов 4427. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, такую вещь.

На Visual 2010 c++ cоздается простейшее приложение: CLR->Windows Forms Aplication.
На форму вешается одна кнопка (Button). По нажатию кнопки нужно определить размер экрана
монитора, передвинуть мышь в определенную точку экрана (за пределы формы), нажать левую клавишу мыши, передвинуть мышь в другую точку, отпустить левую клавишу.

По определению размера экрана и управлению мышью нашел такой код:


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
#include <windows.h>
#include <stdio.h>
#include <winable.h>
 
int main(int argc, char* argv[])
{
    int xPos = 50;
    int yPos = 10;
    
    xPos = (xPos * (65535 / GetSystemMetrics(SM_CXSCREEN)));  
    yPos = (yPos * (65535 / GetSystemMetrics(SM_CYSCREEN)));
    // 0,0 - верхний левый угол, 65535,65535 - правый нижний угол, преобразовываем
    
    INPUT inp[3];
    memset(inp, 0, sizeof(inp));
 
    inp[0].type = INPUT_MOUSE;
    inp[0].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE ; // движение мышки
    inp[0].mi.dx = xPos;
    inp[0].mi.dy = yPos;
    
    inp[1].type = INPUT_MOUSE;
    inp[1].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN; // нажатие правой кнопки
    
    inp[2].type = INPUT_MOUSE;
    inp[2].mi.dwFlags = MOUSEEVENTF_RIGHTUP;  // отпускание правой кнопки
    
    SendInput(3, inp, sizeof(INPUT));
 
    getchar();
    return 0;
}




Но winable.h не находится, компилятор ругается и выполнять функции управления мышью и определения размера экрана не хочет.
Видимо, проблема в использовании CLR-приложения.
Как здесь можно реализовать указанные функции?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2011, 01:06
Ответы с готовыми решениями:

Aplication Windows Forms на C++
Подскажите, есть ли программы для создания Windows Forms на C++ , кроме C++ Builder , и Qt. Я хочу писать на чистом C++ без всяких...

создание Windows Forms Aplication
такой вопросик. Мне поставлена задача, сделать программу(калькулятор) используя &quot;Visual C++ 2005&quot;, но при этом не разрешается...

Windows Forms — Рисование мышью
Составил процедуру, связанную с событием MouseMove, с помощью которого можно рисовать на форме: procedure Form1.Drawing(sender:...

4
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
22.07.2011, 03:05
Ну так убери его, чтоб не ругался.
0
0 / 0 / 0
Регистрация: 22.07.2011
Сообщений: 3
22.07.2011, 08:13  [ТС]
Цитата Сообщение от Digit@ll Посмотреть сообщение
Ну так убери его, чтоб не ругался.
Убирал, все равно ругается. Если создать приложение типа Win32 Project, то функции определения размеров экрана проходят, проект компилируется без ошибок.
А вот в CLR не хочет.
Такое ощущение, что в CLR проблемы с подключаемыми модулями, компилятор находит ошибки в winUser.h и в windows.h.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.07.2011, 18:43
qvania, вы путаете управляемый C++ с неуправляемым. Используйте средства CLR http://msdn.microsoft.com/ru-r... ursor.aspx
0
0 / 0 / 0
Регистрация: 22.07.2011
Сообщений: 3
23.07.2011, 18:48  [ТС]
Сделал DllImport функции SendInput.
Вот отдельный h-файл с импортируемыми функциями и созданными необходимыми структурами.


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
[DllImport("user32.dll")]
extern int GetSystemMetrics(int);
enum class SystemMetricIndex {
    // Same values as those defined in winuser.h.
    SM_CXSCREEN = 0,
    SM_CYSCREEN = 1
};
 
typedef struct tagMOUSEINPUT {
    long      dx;
    long      dy;
    unsigned long     mouseData;
    unsigned long     dwFlags;
    unsigned long    time;
    unsigned long dwExtraInfo;
} MOUSEINPUT;
 
typedef struct tagINPUT {
    unsigned long type;
    MOUSEINPUT    mi;
    } INPUT;
 
MOUSEINPUT Move[2] = {{0,0,0x0001,0x8000 | 0x0001,1000,0}, 
{5000,5000,0x0001,0x8000 | 0x0001,1000,0}};
 
 
INPUT IMove[2] ={{0,Move[0]},{0,Move[1]}};
long sizinp = sizeof(INPUT);
 
 
    [DllImport("USER32.DLL")]
    extern unsigned int SendInput(unsigned int nInputs, 
        INPUT pInputs[],int cbSize);

Обработчик клика по кнопке в Form1.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 int hRes = GetSystemMetrics( safe_cast<int>(SystemMetricIndex::SM_CXSCREEN) );
 int vRes = GetSystemMetrics( safe_cast<int>(SystemMetricIndex::SM_CYSCREEN) );
                this->textBox1->Clear();
                String^ hR = gcnew String(hRes.ToString());
                String^ vR = gcnew String(vRes.ToString());
                
                StringBuilder ^ builder = gcnew StringBuilder();
                builder->Append(hR)->Append("\r\n")->Append(vR);
                String ^ sr = builder->ToString();
                this->textBox1->AppendText(sr);
 
                SendInput(2, IMove,sizinp);
 
                
                                
             }
Из двух действий из массива IMove выполняется только последнее, не работает задержка выполнения.
В объявленных структурах заменены типы DWORD, ULONG, ULONG_PTR, т.к. в c++\cli этих типов не существует.
Получается, если импортировать функцию из winApi, которая содержит в качестве параметра структуру, то ее нужно описывать самому, а типы заменять на "похожие".
Или есть способ импорта структур целиком?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2011, 18:48
Помогаю со студенческими работами здесь

Windows.Forms - Процедуры, цикл for и System.Windows.Forms.Button
Доброго времени суток. Есть WinForms программа: ... private ClickedButtonId, ClickedButtonX, ClickedButtonY:Integer; ...

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

Управление мышью
Помогите с написанием программы которая бы устанавливала мышь на определенные координаты которые я буду задавать.

Управление мышью
Всем привет! Кто-нибудь может подсказать, как сделать такую программу: пользователь запускает приложение и курсор мыши начинает...

Управление мышью и клавиатурой
Всем привет! Хочу сделать седующее: 1. В программе открывается окно; 2. Выделяем это окно (нужно узнать, какое именно окно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru