mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 09:11:42 +00:00
[SHELL32_APITEST] Add RealShellExecuteEx testcase (#6647)
Follow-up to #5849. JIRA issue: CORE-19278 - Add closewnd.cpp, closewnd.h, and RealShellExecuteEx.cpp files. - In closewnd.cpp, close newly-opened windows. - Add RealShellExecuteEx testcase.
This commit is contained in:
parent
ad748b0b3b
commit
436cfa94c9
6 changed files with 257 additions and 67 deletions
90
modules/rostests/apitests/shell32/closewnd.cpp
Normal file
90
modules/rostests/apitests/shell32/closewnd.cpp
Normal file
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* PROJECT: ReactOS API tests
|
||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||
* PURPOSE: Close windows after tests
|
||||
* COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
|
||||
#include "shelltest.h"
|
||||
#include "closewnd.h"
|
||||
|
||||
void FreeWindowList(PWINDOW_LIST pList)
|
||||
{
|
||||
free(pList->m_phWnds);
|
||||
pList->m_phWnds = NULL;
|
||||
pList->m_chWnds = 0;
|
||||
}
|
||||
|
||||
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
|
||||
{
|
||||
if (!IsWindowVisible(hwnd))
|
||||
return TRUE;
|
||||
|
||||
PWINDOW_LIST pList = (PWINDOW_LIST)lParam;
|
||||
SIZE_T cb = (pList->m_chWnds + 1) * sizeof(HWND);
|
||||
HWND *phWnds = (HWND *)realloc(pList->m_phWnds, cb);
|
||||
if (!phWnds)
|
||||
return FALSE;
|
||||
phWnds[pList->m_chWnds++] = hwnd;
|
||||
pList->m_phWnds = phWnds;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void GetWindowList(PWINDOW_LIST pList)
|
||||
{
|
||||
pList->m_phWnds = NULL;
|
||||
pList->m_chWnds = 0;
|
||||
EnumWindows(EnumWindowsProc, (LPARAM)pList);
|
||||
}
|
||||
|
||||
HWND FindNewWindow(PWINDOW_LIST List1, PWINDOW_LIST List2)
|
||||
{
|
||||
for (SIZE_T i2 = 0; i2 < List2->m_chWnds; ++i2)
|
||||
{
|
||||
HWND hWnd = List2->m_phWnds[i2];
|
||||
if (!IsWindowEnabled(hWnd) || !IsWindowVisible(hWnd))
|
||||
continue;
|
||||
|
||||
BOOL bFoundInList1 = FALSE;
|
||||
for (SIZE_T i1 = 0; i1 < List1->m_chWnds; ++i1)
|
||||
{
|
||||
if (hWnd == List1->m_phWnds[i1])
|
||||
{
|
||||
bFoundInList1 = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!bFoundInList1)
|
||||
return hWnd;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define TRIALS_COUNT 8
|
||||
|
||||
void CloseNewWindows(PWINDOW_LIST List1, PWINDOW_LIST List2)
|
||||
{
|
||||
INT cDiff = List2->m_chWnds - List1->m_chWnds;
|
||||
for (INT j = 0; j < cDiff; ++j)
|
||||
{
|
||||
HWND hWnd = FindNewWindow(List1, List2);
|
||||
if (!hWnd)
|
||||
break;
|
||||
|
||||
for (INT i = 0; i < TRIALS_COUNT; ++i)
|
||||
{
|
||||
if (!IsWindow(hWnd))
|
||||
break;
|
||||
|
||||
SwitchToThisWindow(hWnd, TRUE);
|
||||
|
||||
// Alt+F4
|
||||
keybd_event(VK_MENU, 0x38, 0, 0);
|
||||
keybd_event(VK_F4, 0x3E, 0, 0);
|
||||
keybd_event(VK_F4, 0x3E, KEYEVENTF_KEYUP, 0);
|
||||
keybd_event(VK_MENU, 0x38, KEYEVENTF_KEYUP, 0);
|
||||
Sleep(100);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue