SetForegroundWindow无法在Windows Mobile 6.5上运行

时间:2014-01-27 11:43:04

标签: windows-mobile-6.5

我的应用程序上有自动注销功能。根据设置激活。当用户使用不同的用户名重新登录时,我必须处理现有的表单。

这是主要问题。 当用户从移动文件浏览器打开应用程序并使用不同的用户名重新登录时,应用程序将转到后台。文件浏览器出现在前面。

为了解决这个问题,我使用了coredll.dll的SetForegroundWindow 但它没有用。

我跟踪了当前的流程。并把它放到了全球的地方。

[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();       
}

任何建议或解决方案都会得到诚挚的接受。

1 个答案:

答案 0 :(得分: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);

设置你的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);
            }