【问题标题】:If a server is locked - is it posible to send keys to sub client window?如果服务器被锁定 - 是否可以将密钥发送到子客户端窗口?
【发布时间】:2011-12-08 17:42:09
【问题描述】:

我的程序,找到任何子窗口,如果一个由 3 部分组成的应用程序显示一个错误框,那么我想关闭它.. 它工作正常,当服务器没有被锁定时。

代码:

[DllImport("user32", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private extern static bool PostMessage(IntPtr hwnd, uint msg, IntPtr WParam, IntPtr lParam);

    [DllImport("user32", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private extern static bool BringWindowToTop(IntPtr hwnd);

public static bool FocusWindowAndSendEnter(IntPtr hWnd)
{
    try
    { // hWnd = pointer to subwindow, like messagebox.

        uint WM_KEYDOWN = 0x0100;

       //Set focus
      var res1 =  BringWindowToTop(hWnd);

        //Send enter_Key 
      var res2 = PostMessage(hWnd, WM_KEYDOWN, (IntPtr)Keys.Enter, IntPtr.Zero);

      return (res1 == res2 == true);

    }
    catch (Exception ex)
    {
        Logger.LogException(MethodInfo.GetCurrentMethod().Name, ex);
    }

    return false;
}

如果服务器被锁定但正在运行,是否可以这样做?

【问题讨论】:

  • (如果看起来它不起作用)-是的,我已经尝试过了。
  • res1 == res2 == true?真的吗?为什么不res1 == res2 == true == true
  • 我可以使用 return (res1 && res2) - 它更易于阅读。

标签: c# winapi setfocus


【解决方案1】:

当计算机被锁定时,您可以做的事情非常有限 - 出于安全目的。我怀疑有没有办法解决这个问题,除非您停止计算机被锁定,或者首先停止显示消息框。

您试图用错误的方法解决问题。

找出有关该错误消息框的方法,并尽您所能防止这种情况发生。当 PC 被锁定时,不要期望有很多事情可以做。

【讨论】:

  • (好吧,消息框无法停止,它是第三方应用程序,为什么要尝试所有这些,但是是的,我认为它必须解锁)谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多