3242|7

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

windowsCE API函数 Findwindows重复执行的问题? [复制链接]

我在windows ce中设计一个程序间发消息的程序。就是一个程序向另外一个程序发送消息,通知它可以读取信息了。
但是程序在下面遇到难题,希望知道的朋友帮助,多谢了!!!

  1. ……
  2. // findwindow 是api函数
  3. [DllImport("coredll.dll")]
  4.         private static extern IntPtr FindWindow
  5.         (
  6.             string lpClassName,
  7.             string lpWindowName
  8.         );
  9. ……
  10. public void  SendMessageToPlc()
  11.         {
  12.             IntPtr hwndPlc = IntPtr.Zero;
  13.             hwndPlc = FindWindow(null,"UserDefineMessage"); //找userdefinemessage的窗口

  14.            if(hwndPlc!=IntPtr.Zero)
  15.             {
  16.                 // 发送消息
  17.                 SendMessage(hwndPlc, MY_MESSAGE1, 120, 220);
  18.             }      
  19.         }

复制代码



现在的问题是如果我打开UserDefineMessage的窗口(是另外一个程序的),那就能正常工作,如果我关闭另外那个程序
本程序执行到这里以后,就在 “hwndPlc = FindWindow(null,"UserDefineMessage");”这里重复执行,按f11也跳不到下面的句子。
那位高手知道哪里出问题了吧!请赐教!
此帖出自WindowsCE论坛

最新回复

好的,我把就是检查这个功能的源代码贴上来了! 希望能够帮我! 怎么给你源代码啊?  详情 回复 发表于 2009-8-6 22:04
点赞 关注
 

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在CE下,至少应该使用hwndPlc = FindWindow(null,L"UserDefineMessage");

Unicode编码!!!
此帖出自WindowsCE论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 91program 的回复:
在CE下,至少应该使用hwndPlc = FindWindow(null,L"UserDefineMessage");

Unicode编码!!!

不用加“L”也没有问题啊!难道我的重复执行是这个问题,我去看看!
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
你的代码没有问题,我这可以正确执行。建议你新建个简单的工程试下

另外,和unicode没有关系,如果你没有指定MarshalAs属性, string默认会marshal成UnmanagedType.LPTStr, 所以你这里应该是marshal成LPWSTR。 你可以在MSDN里搜“Default Marshaling for Strings”就知道了。
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 xdkui 的回复:
你的代码没有问题,我这可以正确执行。建议你新建个简单的工程试下

另外,和unicode没有关系,如果你没有指定MarshalAs属性, string默认会marshal成UnmanagedType.LPTStr, 所以你这里应该是marshal成LPWSTR。 你可以在MSDN里搜“Default Marshaling for Strings”就知道了。

谢谢这位朋友。我再测试一下,我也发现我的代码没有多大的问题!
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
以前的代码还是出问题,不能用。所以改变了一下思想。
既然获取这个窗口的句柄有问题,那我就想在获取之间来个判断以下是代码:
C# code
  public void  SendMessageToPlc()
        {
            IntPtr hwndPlc = IntPtr.Zero;
            IntPtr hMutex;
            int kk = 0;
            hMutex = CreateMutex(null, false, "UserDefineMessage"); //判断是
            kk=GetLastError();

            if (kk== ERROR_ALREADY_EXISTS)  //ERROR_ALREADY_EXISTS是常量183
            {
                hwndPlc =FindWindow(null, "UserDefineMessage");

               if (hwndPlc != IntPtr.Zero)
                {
                    SendMessage(hwndPlc, MY_MESSAGE1, 120, 220);
                }
            }
         
        }


可是还是出了以前的问题,本来的话,如果窗口没有打开,GetLastError()应该返回的不是183,
可是程序执行第一次好的,第二次以后就不行了。会返回183了,这样的话,就回到原来的问题了。
如果窗口没有打开,就停在hwndPlc =FindWindow(null, "UserDefineMessage");不断的执行这句
代码。
高手救救我啊!
此帖出自WindowsCE论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
有意思,你新建一个简单的可以重现的工程,然后发给我看看
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 xdkui 的回复:
有意思,你新建一个简单的可以重现的工程,然后发给我看看

好的,我把就是检查这个功能的源代码贴上来了!
希望能够帮我!
怎么给你源代码啊?
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表