4791|13

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

急问(关于GPS模块切换的问题) [复制链接]

急问:各位大侠,在一个应用程序里面通过创建进程打开GPS模块执行exe。
然后怎么样切换到应用程序界面上来了?
现在我可以通过按键来控制应用程序的几个模块,但是切换到GPS模块后,怎么样再切换到应用程序的模块?
下面是打开PGS模块的代码:
PROCESS_INFORMATION PInfo;
if(CreateProcess("XXXX\\XXX\\GPS.exe", NULL,
                NULL,NULL,FALSE,0,NULL,NULL,NULL,&PInfo))
        {

                WaitForSingleObject(PInfo.hProcess,INFINITE);
                CloseHandle(PInfo.hThread);
                CloseHandle(PInfo.hProcess);
        }

当然如果通过GPS上面的关闭按钮可以返回应用程序模块,但是我这里要求是不通过这个按钮返回。
比如随便进入GPS模块的任何一个界面,用好只要按切换按键就立即返回到应用程序模块,这个怎么处理呢?
需要枚举GPS模块中的窗口吗?

望大侠们指导下,谢谢!

最新回复

谢谢各位! 通过注册热键可以做到!  详情 回复 发表于 2009-5-21 13:55
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
WaitForSingleObject(PInfo.hProcess,INFINITE);
一直要等到GPS.exe退出了才会返回,所以要回到你的应用GPS。exe必须关闭
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
那这么说只能是用户点GPS软件上的关闭按钮才能回到应用程序,通过按键切换不可以实现吗?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 hsyouxishe 的回复:
那这么说只能是用户点GPS软件上的关闭按钮才能回到应用程序,通过按键切换不可以实现吗?


通过按键应该是可以的,可是按键在哪里?
如果有硬按键,很容易实现这个功能的。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
WaitForSingleObject(PInfo.hProcess,INFINITE); //表示一直等待。
可以用WaitForMultiObject来实现等待多个事件:一个是关闭事件,一个是按键事件。
这两个事件分别由另外两个线程监测动作并发出。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
现在关键点在于:驱动那边已经定制了一个按键用来切换各个模块的
比如按面板上面的按键 然后我的应用程序就可以收到这个按键消息
然后再按键收到的时候 做一个切换处理
应用程序对话框收到硬按键消息
BOOL CXXXDialog::PreTranslateMessage(MSG* pMsg)
{
     这里 按键消息处理。。。。
     定义一个变量
     static int wIndex = 0;
                        static int nResult=0;
                        wIndex ++;
                        if (wIndex >4)
                    {
                           wIndex = 1;
                     }
                        switch (wIndex )
                        {
                        case 1:
                              //这里打开应用程序模块1
                                break;
                        case 2:
                              //这里打开应用程序模块2
                                break;
                        case 3:
                             //这里打开应用程序模块3
                                break;
                        case 4:
//这里打开GPS模块就是刚刚上面的代码
{
PROCESS_INFORMATION PInfo;
if(CreateProcess("XXXX\\XXX\\GPS.exe", NULL,
NULL,NULL,FALSE,0,NULL,NULL,NULL,&PInfo))
{

WaitForSingleObject(PInfo.hProcess,INFINITE);
CloseHandle(PInfo.hThread);
CloseHandle(PInfo.hProcess);
}
}
                                break;
                        default:
                                break;
                        }
                }

        return CDialog::PreTranslateMessage(pMsg);
}

现在问题是GPS是另外单独的一个进程,现在要切换回去 怎么弄呢?按键按下的时候 GPS能够响应到吗?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
第一次按按键切换到GPS模块后,我再按按键就回不来了呀,现在我想又切换回来到应用程序模块1 。。 2。。。3 然后又4。。GPS模块 这样循环来弄,现在真的不知道怎么弄呢?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
现在真的是不知所措了!
现在的情况是:应用程序可以收到按键消息,但是一进入GPS进程后,就收不到消息了!
现在我想让GPS收到消息,怎么处理呢?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
if(CreateProcess("XXXX\\XXX\\GPS.exe", NULL,
NULL,NULL,FALSE,0,NULL,NULL,NULL,&PInfo))
{

WaitForSingleObject(PInfo.hProcess,INFINITE);
CloseHandle(PInfo.hThread);
CloseHandle(PInfo.hProcess);
}
}
break;

没看到while循环,那就无法真的WaitForSingleObject。

你的程序已经被GPS覆盖,处于后台运行,那么按键消息是被GPS先处理的。你的程序可以用钩子截获按键消息,或者定义全局快捷键,以此在后台时也能获取按键信息。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
但是我这里如果从GPS软件上点关闭按钮的话,是可以等到的WaitForSingleObject。任何就执行关闭句柄了!
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
{
PROCESS_INFORMATION PInfo;
if(CreateProcess("XXXX\\XXX\\GPS.exe", NULL,
NULL,NULL,FALSE,0,NULL,NULL,NULL,&PInfo))
{

WaitForSingleObject(PInfo.hProcess,INFINITE);
CloseHandle(PInfo.hThread);
CloseHandle(PInfo.hProcess);
}

只有进程结束后这个WaitForSingleObject才返回,所以GPS不退出,你的应用就处于阻塞状态的,整个消息响应都被阻塞了,不会响应别的按键的.
去掉这个waitforsingleobject就OK了.启动时应该先查找GPS的主窗口,在的话就直接showwindow,不在就Createprocess.
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

12
 
用热键来试试
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢各位!
楼上热键怎么处理?不太明白!
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

14
 
谢谢各位!
通过注册热键可以做到!
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表