Foxtable(狐表)用户栏目专家坐堂 → foxtable如何防止多次运行同一程序


  共有2040人关注过本帖树形打印复制链接

主题:foxtable如何防止多次运行同一程序

帅哥哟,离线,有人找我吗?
junqiyu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:12 积分:148 威望:0 精华:0 注册:2017/1/5 22:14:00
foxtable如何防止多次运行同一程序  发帖心情 Post By:2018/4/23 19:35:00 [显示全部帖子]

1、双击foxtable做的应用程序时,经常会运行多个实例
请问如何解决这个情况?
2、foxtable做的程序运行时,窗口经常会隐藏在其它应用窗口下面,导致误以为没有反应,如何使其始终topmost

 回到顶部
帅哥哟,离线,有人找我吗?
junqiyu
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:12 积分:148 威望:0 精华:0 注册:2017/1/5 22:14:00
  发帖心情 Post By:2018/4/23 20:13:00 [显示全部帖子]

防止多次运行的已经解决,在项目事件BeforeOpenProject中编辑如下代码即可:

'防止多次运行同一程序
'Imports System.Diagnostics 
If UBound(Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName)) > 0 Then
    e.Cancel = True
    e.HideSplashForm = True
    MessageBox.show("程序已运行,不允许再次启动.")
End If

第2个问题还是没有解决,希望大牛给解答

 回到顶部
帅哥哟,离线,有人找我吗?
junqiyu
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:12 积分:148 威望:0 精华:0 注册:2017/1/5 22:14:00
  发帖心情 Post By:2018/4/23 22:23:00 [显示全部帖子]

谢谢,请问如何解决第2个问题:
foxtable做的程序运行时,窗口经常会隐藏在其它应用窗口下面,导致误以为没有反应,如何使其始终topmost
我尝试了网上介绍的各种方法,还是不行,我的系统是win7
采用定时计划,定时使用SetWindowPos()置TOPMOST时,反而主窗口隐藏不见了,需双击任务栏foxtable图标窗口才能再次出现
定时计划中代码如下:
SetWindowPos(Process.GetCurrentProcess.MainWindowHandle, (-1), 0, 0, 1000, 600, &H40)

 回到顶部
帅哥哟,离线,有人找我吗?
junqiyu
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:12 积分:148 威望:0 精华:0 注册:2017/1/5 22:14:00
  发帖心情 Post By:2018/4/23 22:25:00 [显示全部帖子]

单个和组合试过如下的代码,均不能实现想要的结果:

SetWindowPos(Process.GetCurrentProcess.MainWindowHandle, (-1), 0, 0, 0, 0, &H3)

ShowWindow(Process.GetCurrentProcess.MainWindowHandle,5)

SetForegoundWindow(Process.GetCurrentProcess.MainWindowHandle)

BringWindowToTop(Process.GetCurrentProcess.MainWindowHandle)


 回到顶部
帅哥哟,离线,有人找我吗?
junqiyu
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:12 积分:148 威望:0 精华:0 注册:2017/1/5 22:14:00
  发帖心情 Post By:2018/4/24 0:17:00 [显示全部帖子]

代码在公共代码和定时计划里
我想要达到的目标是:即使其他应用程序窗口在上层,通过代码定时使foxtable程序窗口成为最顶层窗口
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:windowtopmost.foxdb

上传的代码例子,不知为何始终是最小化了foxtable的窗口,请版主帮着看看能否解决。
[此贴子已经被作者于2018/4/24 0:18:40编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
junqiyu
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:12 积分:148 威望:0 精华:0 注册:2017/1/5 22:14:00
  发帖心情 Post By:2018/4/24 11:09:00 [显示全部帖子]

有点甜,谢谢您耐心地回复。
basemainform.TopMost = True 能够实现我想要的效果,一直置顶,但采用了该代码还存在其它问题,例如:
1、整个程序响应变慢;
2、点击开发环境的某些对话框会出现不正常,例如点击 项目属性 ,其对话框不能完整显示出来,也关闭不了,整个应用程序也无法正常退出,只能通过任务管理器杀掉才能退出。
请帮助解决一下。

 回到顶部
帅哥哟,离线,有人找我吗?
junqiyu
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:12 积分:148 威望:0 精华:0 注册:2017/1/5 22:14:00
  发帖心情 Post By:2018/4/24 13:27:00 [显示全部帖子]

谢谢有点甜!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:windowtopmost.foxdb


basemainform.TopMost = True这句代码不应放在计划中执行,
我放在了BeforeOpenProject()里,大家千万别这样做,因为会导致所有foxtable对话框无法正常显示且无法恢复。
解决方案如下:
开发自己的代码,可以把自己所有的对话框也设置TopMost从而解决。
也可以在菜单中添加切换按钮,来回切换设置主窗口TopMost状态。见附件例子。

另外,foxtable论坛上有没有foxtable内部对象的说明文件,
例如basemainform在帮助文件里没有相关说明,
建议添加所有foxtable内部对象的说明文件。

 回到顶部