Как убрать отклик на клавиши BackSpace и Пробел? - страница 3

 
Maxim Kuznetsov #:

пишет что библиотеки нет :-)

Не верю! Она есть. Не может быть что её нет.

 

Заумно всё таки целую DLL прикручивать. Нужно несколько строк с открытым вызовом функций Win API. Тем более буду выставлять в открытом доступе.

 
ROMAN KIVERIN #:

Заумно всё таки целую DLL прикручивать. Нужно несколько строк с открытым вызовом функций Win API. Тем более буду выставлять в открытом доступе.

"Несколько строк" WinAPI это в итоге будет несколько тысяч строк (апетит приходит во время еды, захочется разного) и как итог "ну его нафик" и переход как минимум на gui-тулкиты. Сырой WinAPI это жестокая вещь

делал разные пробы, эксперименты, gtk (тот который https://www.gtk.org/) вполне работает c MT. Можете его смотреть/пробовать. Там кстати и визуальный конструктор есть

The GTK Project - A free and open-source cross-platform widget toolkit
The GTK Project - A free and open-source cross-platform widget toolkit
  • The GTK Team
  • www.gtk.org
GTK is a free and open-source cross-platform widget toolkit for creating graphical user interfaces.
 
ROMAN KIVERIN #:

Здравствуйте Игорь. С Новым Годом.

Можно про это подробней? 

CDialog из MFC, который запущен в собственном CWinThread. В итоге окно получается запущено в независимом от терминала потоке. Передача данных от MQL к DLL - вызов extern функций DLL, от DLL к MQL - OnChartEvent(). Хотя Вы пишете:

Специальную DLL в которой будет вызываться это окно не очень хочется делать. На сколько я понимаю стандартными функциями Win API можно создавать окно и элементы управления. Это хотелось бы сделать. Задача простая, это маленькое окно с названием и текстовое поле. Всё больше ничего не надо. В идеале ещё кнопку закрытия.

Тогда мой вариант не пригодится.

 
Maxim Kuznetsov #:

"Несколько строк" WinAPI это в итоге будет несколько тысяч строк (апетит приходит во время еды, захочется разного) и как итог "ну его нафик" и переход как минимум на gui-тулкиты. Сырой WinAPI это жестокая вещь

делал разные пробы, эксперименты, gtk (тот который https://www.gtk.org/) вполне работает c MT. Можете его смотреть/пробовать. Там кстати и визуальный конструктор есть

Спасибо. Как говориться с мира по нитке. Очень благодарен. Правда мне лет на пять на десять разбираться. Тут одного только английского изучать и изучать чтобы понять что к чему. Хотя может всё бросить изучать английский и валить куда-нибудь в другую страну? :) Шутка :)

Думаю понял где теперь счастье искать:

void CreateMainWindow(){

 HWND hMainWnd=CreateWindow("Окно","Шапка",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,NULL);

 if (!hMainWnd) return FALSE;

 ShowWindow(hMainWnd,ss);

 UpdateWindow(hMainWnd);

 }

Надо написать вот такую функцию чтобы появилось окно. Уже будет от чего дольше оттолкнуться. Но без помощи опять не как. Может у кого-то давно написано и лежит без дела пропадает. А тут как раз есть возможность извлечь пользу.

Если написать и отладить счастье уже не за горами. Помогайте. Не дайте пропасть. :)

 

кстати про Gtk :-)

код на скорую руку :

#property copyright "Maxim A.Kuznetsov"
#property link      "https://www.luxtrade.tk"
#property version   "1.00"

#ifdef __MQL5__
#define CPTR ulong
#endif

#import "libgtk-4-1.dll"
   int  gtk_is_initialized();
   void gtk_init(int &,CPTR);
   CPTR gtk_window_new();
   void gtk_widget_show(CPTR);
#import
#import "libglib-2.0-0.dll"   
   void g_main_context_iteration(CPTR,int);
#import   

CPTR window=0;
int OnInit()
{
   EventSetMillisecondTimer(50);
   if (!gtk_is_initialized()) {
      int argc=0;
      PrintFormat("do gtk_init");
      gtk_init(argc,0);
   }
   window=gtk_window_new();
   gtk_widget_show(window);
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   EventKillTimer();
   
}

void OnTick()
{
   g_main_context_iteration(NULL,1);
}
void OnTimer()
{
   g_main_context_iteration(NULL,1);
}
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   g_main_context_iteration(NULL,1);
}

просто демонстрирует что подход работоспособен

но чтобы реально работало в "боевом режиме", надо довольно много дописывать. Надо вспомнить как gtk взаимодействует с отдельными нитями и ресурсами приложения. 

 
ROMAN KIVERIN #:

Пробовал искать никак ничего интересного не смог найти. Помогайте. :)

Ну если в гугле забанили - вот пара ссылок

https://www.cyberforum.ru/win-api/thread1793767.html

https://www.rsdn.org/article/baseserv/winhooks.xml

https://habr.com/ru/company/icl_services/blog/324718/

Глобальный хук клавиатуры (windows) - C++ WinAPI - Киберфорум
  • www.cyberforum.ru
Глобальный хук клавиатуры (windows) C++ WinAPI Решение и ответ на вопрос 1793767