Форум программистов, компьютерный форум, киберфорум
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. Показов 4234. Ответов 4
Метки нет (Все метки)

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

На 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
Ответ Создать тему
Новые блоги и статьи
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер