回 帖 发 新 帖 刷新版面

主题:疯狂的VFPER之禁止程序多次执行

一晃真正用VFP写程序也已6年多了,大大小小也做了几十个系统,曾经有多少个日夜坐在电脑前敲打着空格、回车...,突然发现我在论坛上回贴的多,发贴的少,决定痛改前非:)...闲话少说,言归正传,我会陆续将我的部份VFP代码给大家分享(并不一定都是我的原创,有些是在其他VFPER的代码上改的)。



疯狂的VFPER之禁止程序多次执行,将以下的代码放在程序开始即可:
Public Handle
DECLARE INTEGER CreateFileMapping IN kernel32.DLL INTEGER hFile, ;
        INTEGER lpFileMappingAttributes,integer flProtect, ;
        INTEGER dwMaximumSizeHigh, INTEGER dwMaximumSizeLow, ;
        STRING lpName
DECLARE INTEGER GetLastError IN kernel32.DLL
DECLARE INTEGER CloseHandle IN kernel32.DLL INTEGER hObject
szname="hello"
Handle = CreateFilemapping(0xFFFFFFFF,0,4,0,128,szname)
If handle = 0
     Wait Windows "CreateFileMapping 失败 - LastError: " ;
        + Ltrim(Str(GetLastError()))
     Return
Endif
If Handle=0
   Messagebox("内存映谢文件创建失败!",46,"错误")
   Clear Events
   Return .F.
Else 
   If GetLastError()=183
      Messagebox("该应用程序已经运行!",16,"提示")
      Clear Events
      Return .F.
   Endif
Endif


回复列表 (共6个回复)

沙发

内存映射文件

板凳

呵呵,中手

3 楼

支持

4 楼

我还一时看不来这样的程序有什么用处? 程序既已运行,为什么还要去不断的启动它呢?

我倒有个问题,没有得到解决,看楼主是否有办法解决?

在表单中有一表格控件显示指定表的数据,当给表设置筛选条件后,表格中只显示满足筛选条件的记录,但当这个筛选条件表达式较为复杂时,在滚动显示表格内容时会有凝滞现象,据我估计可能是筛选表达式多次被执行,所以,能否有办法阻止它多次执行?

也许我的判断不对,大家一起讨论.

5 楼

我不使用Set Filter to 语句,因为确实存在很多问题。

我都是使用Select * 语句,把结果存放到临时表里面,然后Grid的数据源设置为别名。

这样做比较好。

不过有个细节的问题需要注意,每次重新计算后,Grid的数据源变动,会导致列头的设置失效。我的解决方案是在表单Init事件中,用一个ListBox自动保存列头数据(列头名称、列宽、字体等等),每次执行完毕数据更新之后,调用一段小程序,再把保存值恢复过来。

6 楼

有时候我们需要判断程序是否已经启动,如果已经启动再打开会出错(比如有的硬件控件程序)或者不允许多次打开,就需要这样的处理。
呵呵,楼上跟我说的有什么关系呀

我来回复

您尚未登录,请登录后再回复。点此登录或注册