Это мое самое первое приложение на C ++. У меня нет абсолютно никакого опыта в программировании приложений на C ++ или Windows, поэтому любые отзывы и помощь приветствуются. Пожалуйста, дайте мне знать, если я делаю какие-либо ошибки или не следую рекомендациям в моем коде.
Я пытаюсь написать программу на C ++, которая воспроизводит поведение WIN + D
сочетание клавиш, но влияет только на окна на мониторе с помощью мыши.
Несмотря на проверку IsWindowVisible()
и IsIconic()
, есть некоторые системные окна, которые свернуты и развернуты, что приводит к странным сбоям, таким как:
- Все значки на рабочем столе свернуты, и появляется серая полоса
- Откроется пустой экземпляр Microsoft Edge
- Приложение Windows Settings появляется из ниоткуда
Код для свертывания окон:
static std::stack<HWND> minimizedWindowPointers;
Monitors monitors;
RECT activeMonitorRect;
static BOOL CALLBACK windowEnumerator(HWND w, LPARAM l){
if(!IsWindowVisible(w) || IsIconic(w) || getWindowTitle(w).size() == 0) return true;
RECT r;
GetWindowRect(w, &r);
if(doRectsIntersect(r, activeMonitorRect)){
SendMessage(w, WM_SYSCOMMAND, SC_MINIMIZE, 0);
minimizedWindowPointers.push(w);
}
return true;
}
void minimizeWindowsOnActiveMoniter(){
if(monitors.getRectOfMonitorWithPointer(&activeMonitorRect)) return;
EnumDesktopWindows(NULL, windowEnumerator, NULL);
areWindowsMinimized = true;
}
void maximizeWindowsOnActiveMoniter(){
HWND w;
for(int i = minimizedWindowPointers.size(); i > 0; i--){
w = minimizedWindowPointers.top();
minimizedWindowPointers.pop();
if(IsIconic(w)){
SendMessage(w, WM_SYSCOMMAND, SC_RESTORE, 0);
std::wcout << "MAXIMIZING: " << getWindowTitle(w) << std::endl;
}
}
areWindowsMinimized = false;
}
Я использую Windows 10 Pro с Visual Studio 19 Preview.