SetForegroundWindow не работает на Windows Mobile 6.5

В моем приложении есть функция автоматического выхода из системы. Который активируется в зависимости от настроек. Когда пользователь повторно входит в систему с другим именем пользователя, мне приходится удалять существующую форму.

Здесь возникает основная проблема. Когда пользователь открывает приложение из браузера файлов на мобильном телефоне и повторно входит в систему с другим именем пользователя, приложение переходит в фоновый режим. Проводник появляется на переднем плане.

Чтобы преодолеть эту проблему, я использовал SetForegroundWindow из coredll.dll, но это не работает.

Я сделал трек текущего процесса. И поместил его в глобальное место.

[DllImport("coredll.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

if (_autoLogOff)
{
    if (cboUsers.Text != Globals.UserName)
    {
        List<frmAutoLogOff> openedForms = Globals.OpenedForms;
        for (int i = openedForms.Count - 1; i >= 0; i--)
        {
            if (openedForms[i] != null && openedForms[i].Name != "frmMenu1")
            {
                //openedForms[i].SuspendLayout();
                openedForms[i].Dispose();
            }
        }
    }

    SetForegroundWindow(currentProcess);
    Globals.UserName = cboUsers.Text;
    CDataAccess.ShowMessageForUser();       
}

Любое предложение или решение будут сердечно приняты.


person SKD    schedule 27.01.2014    source источник


Ответы (1)


Используйте FindWindow для SetForgroundWindow

// For Windows Mobile, replace user32.dll with coredll.dll
        [DllImport("coredll.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

Установите текст ur frmMainMenu1.cs, предположим, «MainMenu» и вызовите их в нужном месте.

public int FindWindow(string windowName, bool wait)
        {
            int hWnd = FindWindow(null, windowName).ToInt32();
            while (wait && hWnd == 0)
            {
                System.Threading.Thread.Sleep(500);
                hWnd = FindWindow(null, windowName).ToInt32();
            }

            return hWnd;
        }

И назовите это

int hWnd = FindWindow("MainMenu", wait);
            if (hWnd != 0)
            {
                return SetForegroundWindow((IntPtr)hWnd);
            }
person Ahmed Lutful Zamil    schedule 27.01.2014