Форум программистов, компьютерный форум, киберфорум
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. Показов 4362. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru