vb中如何禁止重复运行程序,激活已打开程序至前台

vb中如何禁止重复运行程序,激活已打开程序至前台,第1张

Private Sub Form_Load()

If AppPrevInstance = True Then

MsgBox "程序已运行,请查看窗口是否最小化!!!", 48, "检测站车辆"

Unload Me '''''如果程序已打开则自动关闭。

End If

End Sub

目前iphone本身不支持后台运行程序(除了某些程序例如ipod和safari),如果你想后台运行程序,就请先将手机越狱,然后安装background即可。详情可去weiphone论坛搜索

电脑里的打印机程序想要改为自动启动的具体方法如下:

1、首先找到电脑桌面上“我的电脑”的图标,点击鼠标右键,打开“管理”的选项。

2、接着找到“服务和应用程序”这一选项,双击鼠标左键进入界面。

3、打开后如下图所示,继续点击进入“服务”页面。

4、然后找到"服务"页面中的”print sprooler“选项,点击鼠标右键进入"属性"页面。

5、进入“属性”页面后,点击“启动类型”,选择“自动”选项。

6、当“启动类型”显示为“自动”时,即证明已经成功将电脑里的打印机程序设置为自动启动。

强烈简易你直接改用AkelPad,这个软件就是一个扩展版的记事本,和记事本一样小巧,但是功能强大得多,在AkelPad的选项里就有一个设置“同一文件只打开一次”,而且AkelPad没有记事本不能默认最大化的毛病,外观看上去和记事本也没什么区别。当你同一文件打开第二次的时候,AkelPad没有提示,而是直接转到已经打开的窗口,不会打开第二次。

使用互斥对象让程序只运行一次

“怎么让我的程序在运行时不能重复打开?”经常在论坛上看到有朋友问这方面的问题。本文将比较详细的说明这一问题,并给出一个较为完善的解决方案。

尽管这已经不是一个新问题了,但这里还是简要的说明一下这种技术:这的确是一个相当有用的技术,可能你经常会注意到相当多的程序在运行之后当你再次点击运行时,它只是会回到原来的窗口,而不会运行两个程序。就如同你在运行delphi时,在外部点开另一个工程文件时,delphi只是会简单的将你的当前工程置换而不是运行两个delphi。这样的好处是显而易见的:你不必担心你的程序在某些情况下被别的软件恶意运行多次而吃光内存造成当机。下面我们做进一部的说明:

熟悉win32编程的朋友(特别是多线程编程),相信对互斥对象已经相当熟悉了,它常被用做线程间同步的技术手段。这里我们使用它来防止程序重复运行。我们只是简要的提一下互斥对象,并不做深入研究:互斥对象把第一次建立它的程序作为主程序,这样我们只用检测互斥对象是否已经有主程序就判断程序是否已经运行过,这里需要涉及到一个api函数:WaitForSingleObject该函数的第一个参数为用以检测的互斥对象,第2个参数的表示函数返回结果前的滞留时间,如果改函数返回wait_TimeOut就表明互斥对象已经有了一个主程序。修改了的工程文件代码如下:(注意:以下的代码都出现在工程文件中,而不是单元文件中,并且这里都在最简单的delphi默认建立的工程基础上修改)

var

myMutex:HWND;

begin

myMutex:=CreateMutex(nil,false,'hkOneCopy');// CreateMutex建立互斥对象,并且给互斥对象起一个唯一的名字。

if WaitForSingleObject(myMutex,0)<>wait_TimeOut then//程序没有被运行过

begin

ApplicationInitialize;

ApplicationCreateForm(TForm1, Form1);

ApplicationRun;

End;

End;

下面的工作是来完善这个程序,我们不仅希望程序可以不被重复运行,而且我们也希望当用户再次点击程序可执行文件时,已经运行的程序能够做出一些响应。在这里我们希望它能够变为最上层的活动窗口以提醒用户程序已经被运行。为了达到这个目的,我们必须先获得已经运行程序的窗口句柄,以便使用SetForeGroundWindow(handle)来使程序窗口最前并激活。为了得到这个句柄,我们必须使用windows枚举函数EnumWindows来遍历windows的窗口列表,该函数可以使用一个回调函数作为参数,并用这个回调函数来对每一个系统中的窗口进行调用直到最后一个窗口或回调函数返回false为止,这个回调函数规定有两个参数(handle,Cardinal,只用注意第一个handle参数它表示由枚举函数当前遍历到的窗口句柄)。我们只要编写这个函数并在其中不断的比较当前遍历到的窗口类名和我们的程序的主窗口类名,以及比较窗口可执行文件的名称和我们程序的名称直到找到相同的为止,将这时的窗口句柄保存下来就可以了,下面的代码加上了适当的注释:

function EnumWndProc(hwnd:Thandle;param:Cardinal):bool;stdcall;

//由于用于api回调函数,请使用windows传统的参数传递方式stdcall

var

ClassName,WinMoudleName:string;

WinInstance:THandle;

begin

result:=true;

SetLength(ClassName,100);

GetClassName(hwnd,pchar(ClassName),length(ClassName));//获得当前遍历窗口的类名

ClassName:=pchar(ClassName);//在字符串后加结束符,确定字符串结束

if ClassName=TForm1ClassName then//比较

begin

WinInstance:=GetWindowLong(hwnd,GWL_HINSTANCE);//获得当前遍历窗口的实例

setlength(WinMoudleName,100);

GetModuleFileName(WinInstance,pchar(WinMoudleName),length(WinMoudleName));

//获得当前遍历窗口的程序文件名

WinMoudleName:=pchar(WinMoudleName);

if WinMoudleName=MoudleName then//MoudleName为工程全局变量,自身程序的文件名

begin

FindHid:=hwnd;//FindHid为工程全局变量保存找到的句炳

result:=false;//找到以后就结束遍历

end;

end;

end;

下面是全部的工程文件:

var

hMutex,FindHid:HWND;

MoudleName:string;

begin

hMutex:=CreateMutex(nil,false,'hkOneCopy');

if WaitForSingleObject(hMutex,0)<>wait_TimeOut then

begin

……//略去的代码在前文

end

else

begin

SetLength(MoudleName,100);

GetModuleFileName(HInstance,pchar(MoudleName),length(MoudleName));

//获得自己程序文件名

MoudleName:=pchar(MoudleName);

EnumWindows(@EnumWndProc,0);//调用枚举函数

if FindHid<>0 then

SetForegroundWindow(FindHid);

end;

end

朋友,你好:

这很可能是二个原因:

第一个原因:就是散热器接触不良,也就是脱落了,虽然CPU风扇在扇,但同上于主板检测到散热跟不上,就开启自动保护,就会自动重启,反反复复。一般只要将散热器重新安装一下,一般就可以解决。

第二个原因:就是主板故障,也就是开机电路故障,导致电压无法正常加入而引起的反反复复重启,一般遇上这样的现象,只能修理主板即可。

希望对你有所帮助,祝你快乐 ~~

程序指电脑系统运行的主体软件,如果电脑出现电脑程序软件不能打开的情况,我们应该怎样处理呢下面是我收集的 电脑的应用程序无法打开的解决 方法 ,希望对你有所帮助。

电脑的应用程序无法打开的解决方法

01方法一:

可能是由于系统延迟,数据读取失败引起,可以尝试重新启动电脑。

02方法二:

如果重启电脑还是无法打开程序软件,那有可能是电脑中病毒了,可以尝试进行电脑杀毒。

打开360安全卫士,点击病毒查杀。

03进入后点击立即扫描,即可进行病毒查杀。

04方法三:

如果以上方法都不行,这可能是由于电脑系统问题,建议重装电脑系统。

打开360安全卫士,点击更多。

05进入后点击升级助手。

06d出框点击立即免费升级,即可重装电脑系统。

电脑的应用程序无法打开的解决方法相关 文章 :

1 如何解决Win7无法正常打开应用程序

2 应用程序无法正常启动的解决方法

3 电脑提示应用程序无法启动因为并行配置不正确怎么办

4 软件无法打开怎么办

5 win10打开软件时提示无法打开这个应用怎么办

6 电脑windows7无法启动的解决方法

以上就是关于vb中如何禁止重复运行程序,激活已打开程序至前台全部的内容,包括:vb中如何禁止重复运行程序,激活已打开程序至前台、我的iphone怎么不能开启两个程序、电脑里的打印机程序不能自动启动,每天开机打印机的程序都要手动开启,这个问题怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10099121.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存