基于Windows CE车载导航一体机一机多图的实现

其实网上这种所谓的一机多图的实现已经很多了,但是基本都是启动一个选择界面。然后选择要启动的导航。虽然很简单,但是有个缺点就是如果切换出去之后要想再返回导航需要重新启动选择界面。这个也太tm蛋疼了!

刚开始的时候是自己写了一个,但是由于编译器和开发环境的问题,导致最后的程序体积较大。并且机器内存本身有限,效果虽然可以但是在切换的时候有时候会出现那个加载导航的进度条看起来就非常蛋疼。如果有兴趣的话可以从此处下载源码进行编译你也可以自己进行修改,猛击此处下载源码!

效果视频如下(不是最新版,新版可以优化到3m左右,upx压缩到800k,如果要使用建议在启动导航之后自动退出选择器,可以有效的释放更多的内存):

如果没有启动导航,那么第一次启动的时候会启动选择界面,启动高德或者凯立德之后再次点启动导航将会自动切换到导航界面。导航退出之后再次切换将会继续启动选择界面。

另外一个办法就是网上流传的比较多的启动器,但是通过MortScript运行脚本同样可以达到这样的效果,当然如果不想使用脚本可以自己写一个小程序来判断导航进程或者窗口是否存在。

根据提示修改Run目录下的RUN.mscr脚本文件(代码还是非常容易理解的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
If(ProcExists("navione.exe"))
    RUN("\SDMMC\NaviOne\NaviOne.exe")
    Exit
EndIf
##如果进程中有凯立德就再运行一遍激活后结束脚本。
 
If(ProcExists("DSA.exe"))
    RUN("\SDMMC\DSA\DSA.exe")
    Exit
EndIf
 
If(ProcExists("mapbar.exe"))
    RUN("\SDMMC\mapbar\mapbar.exe")
    Exit
EndIf
 
##以上都一样的,有几个图就加几个,注意不同机器路径中卡名不同,需要更改。
 
 
RUN("\SDMMC\App\navi.exe")
    sleep(8000)
    Kill("navi.exe")
##以上地图都没开的话 运行一机多图,运行后8秒自动关闭一机多图。
##有些一机多图软件与脚本程序冲突必须关闭一机多图,否则不能再次运行脚本,并且关闭了也节省内存。
 
 
  If(ProcExists("navione.exe"))
        Exit
  EndIf
##如果进程中有了凯立德,证明操作者选中了kld,程序结束
 
  If(ProcExists("mapbar.exe"))
      Exit
  EndIf
 
  If(ProcExists("DSA.exe"))
      Exit
  EndIf
 
##以上又是一样的,有几个图就写几个。
 
 
   RUN("\StorageCard\mapbar\mapbar.exe")
## 如果运行到这里证明 8秒内没有选择 地图,自动运行图吧,这个可以根据喜好修改。
Exit

下载链接:http://pan.baidu.com/s/1ntshm21

 

You may also like

21条评论

    1. 建议不错,但是受限于车型,只有wince的,据说现在有的厂商开始做安卓的一体机了。不过这个东西以后不会在折腾wince的东西了。其实我是想直接把nexus7改造一下,或者ipad mini改造一下装上去,但是貌似硬件折腾起来比较蛋疼,还没想到什么比较好的办法。

  1. 终于看到能有价值的,不过下载按照说明修改好,装上CE里貌似没效果。不知道是我安装的路径问题还是其他原因呢。

    1. 里面的路径都是写死的,你需要去看下源代码,按照里面的路径配置导航路径,并且不同的wince启动之后的sd卡路径是不一样的,有的是mmd,有的是storeagecard,你要看下你的是什么路径。因为这些个路径是不怎么通用的,并且那些个导航的路径也是写死的。

  2. 按照源码的路径设定好导航程序,把MulityGPS文件夹和MulityGPS.EXE也改成了车载机默认的文件夹和程序名字,装到车机的内置盘。我装了善领、凯立德、图吧(都把个导航名字改成了写死的名字和路径了)。装在车机上各导航都可以在选择界面启动,但没有切换界面效果。
    然后尝试把所有导航(增加了道道通和高德)都安装在SD外置卡(因为内置盘容量小装不下),在所有能改的文件有路径的也改成了绝对路径把对应各导航,结果也是只能启动打开各导航,不能切换。
    尝试修改源码,无奈是小白中的小白,不成功~~ smile ,请指教~!

    1. 不是很明白,你为什么要在不同的导航之间切换?一旦导航启动了,就会占用gps端口,另外的导航即使能够启动也无法获取卫星信号。如果要切换导航,先关闭当前使用的导航才能切换到别的导航。我的那个切换效果是在另外的一个屏幕上操作的,所以你看不见,要退出当前的导航才能切换到另外的导航。

  3. 可能是我表述错误,我意思不是要同时开多个导航,也没必要(当然了,我实验过,同时打开几个导航运行都可以搜星的,只要设定各导航的虚拟端口)。
    我的意思是打开一机多图选择界面或在选择界面启动了导航之后,一机多图的选择窗口或导航的窗口就一直会在最前,按车机实体按钮或按方向盘上的功能按钮都不能切换到其他的窗口界面在最前面显示(如原厂的主页窗口、播放器窗口、蓝牙界面窗口、倒车显示窗口等。因为没装一机多图前,按功能键都可以切换各界面窗口的,装了一机多图后这些窗口都给覆盖了)。我的意思是安装一机多图,当启动了多图选择窗口或启动了导航之后,能否实现按功能键都可以切换到其他窗口。 *yes*

    1. 没发现你说的这个问题,本身那个导航一机多图是不会默认最前显示的。可能和你的一体机系统有关系。没有装这个东西之前,开启导航了能切换到其他的窗口么?

      1. 没有装一机多图之前,原机的都能切换各窗口显示,就把原车的导航单独替换成凯立德都显示正常(当然了,凯立德的文件夹名字和启动程序要改成原车导航默认的名字和路径才可以)。装了一机多图之后(网上找的其他一机多图都是这样),功能键可以切换原机设定的各项,但窗口都给一机多图的选择窗口或从一机多图选择窗口启动的导航窗口覆盖了(一直显示在最前)。
        另外,我原车的是华阳一体机,英文版。加装的一机多图程序若没有自带中文字体文件调用的话,中文显示就乱码。我尝试过添加字体到windows/font里,但无法保存。

        1. 我大概明白你的那个是什么情况了,使用MulityGPS_Fix 目录下的代码重新编译,主要区别是重新启动导航时窗口最前的实现方法,文件MulityGPS.lpr,

          GaodeHandle := FindWindow('Rousen',nil);   //窗口类名Rousen 窗口名ROUSEN
            if GaodeHandle <> 0 then begin
               MyGaodeFileName := ExtractFilePath(Paramstr(0)) +'AutonaviRouCE6.exe';
               StringToWideChar(MyGaodeFileName,MyWideGaodeFileName,length(MyGaodeFileName)+1);
               MyExecuteFile(MyWideGaodeFileName); //注意这里不要使用SetForegroundWindow();这个api,这样窗口就直接最前了,并且看起来你的脑残导航不会重新设置最前端的窗口,这就是问题的关键
               isNaviStarted := True;
            end;

          修改unit1.pas下面的代码如下,

          procedure TForm1.Image_gaode2Click(Sender: TObject);
          var
             MyGaodeFileName:string;
             MyWideGaodeFileName: array [0..256]of WChar;
          begin
             MyGaodeFileName := ExtractFilePath(Paramstr(0)) +'Autonavi1RouCE6.exe';
             if FileExists(MyGaodeFileName) then begin
                StringToWideChar(MyGaodeFileName,MyWideGaodeFileName,length(MyGaodeFileName)+1);
                MyExecuteFile(MyWideGaodeFileName);
                close; //去掉这一行的注释,这样启动导航之后导航选择器就会自动退出了,对每一个启动导航的地方都要添加这么一行。
             end;
          end;

          这样每次启动之选择器就自动退出了,再次启动的时候会直接调用检测功能。你可以先修改下试试。

  4. 折腾多次,无果~!!!可能是我车机系统的原因,凡是非原机程序和默认的路径,添加安装的导航窗口(一机多图程序都是)一直会在最前面,不受按钮、功能键控制。

    1. 好吧,远水救不了近火,哈哈。如果哪天你来青岛了说不定我可以帮你瞅瞅。哈哈

  5. 有个疑问,不知道会不会跟系统架构有关系呢?我的是MIPS系统架构的。

      1. 请教一个问题,用脚本设定倒计时,比如设定倒计时间为10天,倒计时为0时自动删除或覆盖某个文件或整个文件夹。能否帮我写一个这样的脚本?在此先行谢过。

  6. 我的测试无问题,也是运行后导航置顶,倒车影像,盲区影像,面板都不会显示,都被压在后面了。。求解决。。。QQ36067005

  7. 我觉得按导航键启动的是脚本程序,就会有这种绝对置前的效果,其它界面被压在后面而切换不出来,如果写成exe也许会解决这个问题,

  8. 你好,我想问下你几个问题,.
    针对我的机子,我怎样让程序执行?
    后台自执行还是编译成exe的文件

    1. 如果是用源代码,需要你自己编译成exe,如果是脚本的话就不需要编译了,本身就是可以执行的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注