none
关于FindWindow的问题 RRS feed

  • 问题

  • 要查找窗口的句柄 可以 用 FindWindow()

    因为需要,在一个 sample.aspx页面中需要向一个"ConsoleWindowClass" 窗口发送一个消息

    但是在 sample.aspx.cs中的一段代码却不起作用,窗口句柄为0

    代码片段如下:

    using System.Runtime.InteropServices;

    public partial class sample : System.Web.UI.Page, IDisposable

    {

        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

       Intptr notificationhWnd=findWindow("ConsoleWindowClass","myname");//不起作用

       IntPrt testhWnd=FindWindow("ConsoleWindowClass",null);//可以得到aspnet_wp.exe的句柄

    }

     

     

    2011年5月9日 8:50

答案

  • ASPX 是用的非 Interactive Session 运行的,可能没有权限去跟 UI 交互的。这是初学者最容易出现的问题之一,比如 MessageBox 就无法在 ASPX.CS 中运行。
    Mark Zhou
    2011年5月10日 10:32
  • 您好,aspx的代码是运行在服务器端的,通常受到权限的制约。

    另外这样的架构搭建是有问题的,建议考虑加一个中介服务来传递信息。

    2011年5月10日 12:26
    版主

全部回复

  • 你好,FindWindow("ConsoleWindowClass",null) 中的第二个参数如果为null,那么将匹配任意名字的窗口(符合ConsoleWindowClass的)。我觉得是不是你的Window name不正确?建议你使用Spy++具体查看一下窗体的Name。

    另外, findWindow得大小写应该是你打错了吧。

    谢谢


    -Thanks -Shuhang Zhao
    2011年5月10日 5:58
  • ASPX 是用的非 Interactive Session 运行的,可能没有权限去跟 UI 交互的。这是初学者最容易出现的问题之一,比如 MessageBox 就无法在 ASPX.CS 中运行。
    Mark Zhou
    2011年5月10日 10:32
  • 您好,aspx的代码是运行在服务器端的,通常受到权限的制约。

    另外这样的架构搭建是有问题的,建议考虑加一个中介服务来传递信息。

    2011年5月10日 12:26
    版主
  • 不好意思,我的疏忽。的确如他所说。
    -Thanks -Shuhang Zhao
    2011年5月11日 0:57
  • 感谢诸位的热情回复,已经用消息队列解决问题,此问题是源于如果网站的会员有下订单,那么会有一个message到队列中,Messenger (一个windows 服务程序,另外开发)会监控这个队列,取出消息就会发送到已经登录的客户端,如果没有客户端登录就会放入到服务自己的队列中...
    2011年9月15日 1:33