Перечислите окна как alt-tab, делает

Самый простой способ - использовать функцию native Number:

var x = Number("1000")

Если это не работает для вас, то есть parseInt, унарный плюс, parseFloat с полом и Методы Math.round.

parseInt:

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

унарный плюс, если ваша строка уже имеет форму целого:

var x = +"1000";

, если ваш string является или может быть float, и вы хотите целое число:

var x = Math.floor("1000.01"); //floor automatically converts string to number

или, если вы собираетесь использовать Math.floor несколько раз:

var floor = Math.floor;
var x = floor("1000.01");

Если вы - тот тип, который забывает вставлять radix, когда вы вызываете parseInt, вы можете использовать parseFloat и обходить его, как вам нравится.

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

Интересно, что Math.round (например, Math.floor) будет преобразовывать строку в числовое преобразование, поэтому, если вы хотите округлить число (или если у вас есть целое число в строка), это отличный способ, может быть, мой любимый:

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)
27
задан Matt Hamilton 20 May 2009 в 22:14
поделиться

2 ответа

Raymond Chen ответил на это некоторое время назад
( https://devblogs.microsoft.com/oldnewthing/20071008-00/? p=24863):

Это на самом деле довольно просто, хотя едва что-либо Вы были бы в состоянии предположить самостоятельно.Примечание: Детали этого алгоритма являются деталью реализации. Это может измениться в любое время, не полагайтесь на него. На самом деле это уже изменилось с Зеркальным отражением и Flip3D; я просто говорю об окне Classic Alt+Tab здесь.

Для каждого видимого окна, идите по его цепочке владельца, пока Вы не найдете корневого владельца. Тогда обход отодвигает видимую последнюю активную всплывающую цепочку, пока Вы не находите видимое окно. Если Вы вернулись туда, где Вы запускаетесь, то помещенный окно в списке Alt+Tab. В псевдокоде:

BOOL IsAltTabWindow(HWND hwnd)
{
 // Start at the root owner
 HWND hwndWalk = GetAncestor(hwnd, GA_ROOTOWNER);

 // See if we are the last active visible popup
 HWND hwndTry;
 while ((hwndTry = GetLastActivePopup(hwndWalk)) != hwndTry) {
  if (IsWindowVisible(hwndTry)) break;
  hwndWalk = hwndTry;
 }
 return hwndWalk == hwnd;
}

Переходят по ссылке к записи в блоге Chen для получения дополнительной информации и некоторых угловых условий.

24
ответ дан Oleg 20 November 2019 в 06:11
поделиться

Спасибо Mike B. Пример из блога Raymonds указал на меня в корректном направлении.

существуют однако некоторые исключения, который должен быть сделан, средство рассылки Windows Live получило много взломов для создания теней под окнами и т.д., :@

Вот является моим полным кодом, использовали его в течение одного дня теперь, и havn't заметил любые различия от реальной вкладки высокого звука. Существует некоторый базовый код, не отправленный, но это не проблема, выясняющая, что это делает.:)

    private static bool KeepWindowHandleInAltTabList(IntPtr window)
    {
        if (window == Win32.GetShellWindow())   //Desktop
            return false;

        //http://stackoverflow.com/questions/210504/enumerate-windows-like-alt-tab-does
        //http://blogs.msdn.com/oldnewthing/archive/2007/10/08/5351207.aspx
        //1. For each visible window, walk up its owner chain until you find the root owner. 
        //2. Then walk back down the visible last active popup chain until you find a visible window.
        //3. If you're back to where you're started, (look for exceptions) then put the window in the Alt+Tab list.
        IntPtr root = Win32.GetAncestor(window, Win32.GaFlags.GA_ROOTOWNER);

        if (GetLastVisibleActivePopUpOfWindow(root) == window)
        {
            WindowInformation wi = new WindowInformation(window);

            if (wi.className == "Shell_TrayWnd" ||                          //Windows taskbar
                wi.className == "DV2ControlHost" ||                         //Windows startmenu, if open
                (wi.className == "Button" && wi.windowText == "Start") ||   //Windows startmenu-button.
                wi.className == "MsgrIMEWindowClass" ||                     //Live messenger's notifybox i think
                wi.className == "SysShadow" ||                              //Live messenger's shadow-hack
                wi.className.StartsWith("WMP9MediaBarFlyout"))              //WMP's "now playing" taskbar-toolbar
                return false;

            return true;
        }
        return false;
    }

    private static IntPtr GetLastVisibleActivePopUpOfWindow(IntPtr window)
    {
        IntPtr lastPopUp = Win32.GetLastActivePopup(window);
        if (Win32.IsWindowVisible(lastPopUp))
            return lastPopUp;
        else if (lastPopUp == window)
            return IntPtr.Zero;
        else
            return GetLastVisibleActivePopUpOfWindow(lastPopUp);
    }
11
ответ дан 20 November 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: