日期:2014-05-17  浏览次数:21210 次

FindWindow始终返回0
代码如下,我建立了一个test.txt文档并打开,然后运行程序,控制台始终返回0,,,,,Google Baidu找了半天都没有解决。

我的系统是win7,IDE是 MonoDevelop

C# code

using System;
using System.Runtime.InteropServices;

namespace SendMsgToWindow
{
    class MainClass
    {
        //[DllImport("USER32.DLL")]
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        public static extern IntPtr FindWindow (string lpClassName, string lpWindowName);
    
        //静态方法必须在静态方法中调用?
        private static void MyFindWindow (string wndName)
        {
            IntPtr ip = FindWindow (null, wndName);
            Console.WriteLine(ip.ToString());
            if (ip != IntPtr.Zero) {
                //找到句柄后,你就可以做你想做的事了,发送信息你可以用SendKeys;
                Console.WriteLine ("yes");
            }
        }

        public static void Main (string[] args)
        {
            MyFindWindow ("test.txt - 记事本");//
        }
    }
}




------解决方案--------------------
在VISTA/WIN 7下 FindWindow或FindWindowEX无法获取到窗体句柄
http://www.cnblogs.com/wuhenke/archive/2010/06/20/1761534.html
------解决方案--------------------
你给的参数不对,最安全的方式是用Visual Studio带的工具spy++找到你所需要的Window,看看对应的class和name是什么,对应更改你的调用代码就可以了。

静态方法无需在静态方法中调用,其他方法也可以的。
------解决方案--------------------
用SPY+确定标题对不对

------解决方案--------------------


你试一下只设置类名,或者只设置窗口名,或2个都设置看。
或者换换其他窗口试一试看呢。有时候和系统关系,出一些奇怪的问题。