Или просто, вручную:
foreach ($array as $key => $value){
if ($value == $target_value) {
unset($array[$key]);
}
}
Это самый безопасный из них, потому что у вас есть полный контроль над вашим массивом
Используйте GetTopWindow () и GetNextWindow () для просмотра окон в z-порядке.
] Однако не думайте, что это необходимо, GetWindowThreadProcessId () может вам помочь:
HWND FindMyTopMostWindow()
{
DWORD dwProcID = GetCurrentProcessId();
HWND hWnd = GetTopWindow(GetDesktopWindow());
while(hWnd)
{
DWORD dwWndProcID = 0;
GetWindowThreadProcessId(hWnd, &dwWndProcID);
if(dwWndProcID == dwProcID)
return hWnd;
hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
}
return NULL;
}
Ваше приложение не имеет HWND. Окно делает. У приложения может не быть окон или их может быть много, поэтому нет общей функции «Получить HWND приложения».
Очевидное решение - просто удерживать дескриптор, когда вы его получаете. Когда вы создаете окно, возвращается HWND. Сохраните это.
Это устарело для меня, но IIRC вы должны получить HWND как параметр в процессе окна. Вы можете сохранить его в глобальной переменной где-нибудь в начале.
Разве нельзя просто удерживать дескриптор, возвращаемый CreateWindow? Если нет, то почему?
Предположительно, ваш код вызывается кодом основного приложения, иначе какая польза от него? В этом случае я не понимаю, почему API вашего кода не может включать какой-либо способ информирования вас о дескрипторе главного окна приложения.
Как насчет имени вашего класса Windows? Всегда ли по-разному создается окно? В противном случае вы все равно могли бы использовать FindWindow ().
Как уже указывали другие
Но, возможно, ваш код находится в DLL, поэтому вы на самом деле не создавали окно верхнего уровня самостоятельно. Итак, что делать?
Я бы посоветовал следующее:
EnumWindows
для перечисления всех окон верхнего уровня. GetWindowLongPtr
, чтобы получить HINSTANCE для каждого окно верхнего уровня. Сравните это с HINSTANCE приложения, который вы можете получить с помощью GetModuleHandle (NULL)
. Если они идентичны, вы нашли свое главное окно. Edit: Вот код.
Вы можете внедрить DLL в поток, который обращается к user32.dll http://msdn.microsoft.com/en-us/library/ms821625.aspx