hur.cn - 华软网

 热门搜索

有关handle的问题

  作者:未知    来源:网络    更新时间:2019/1/25
在application事件的open事件中加入以下剧本

if handle(this,true)<>0 then
messagebox("","程序已运行")
return
end if
但已启用的程序依然能够再启用,何故?
------华软网友回答------
一起学习,帮助以下:
For applications, the Handle function does not return a useful value when the previous flag is true. You can use the FindWindow Windows function to determine whether a Windows application is already running. FindWindow returns the handle of a window with a given title.
Declare FindWindow and SetForegroundWindow as global external functions:

PUBLIC FUNCTION unsignedlong FindWindow (long  &

   classname, string windowname) LIBRARY "user32.dll" &

   ALIAS FOR FindWindowA

PUBLIC FUNCTION int SetForegroundWindow (unsignedlong &

   hwnd) LIBRARY "user32.dll" ALIAS FOR  &

   SetForegroundWindowA

Then add code like the following to your application's Open event:

unsignedlong hwnd

 

hwnd = FindWindow( 0, "Main Window")

if hwnd = 0 then

   // no previous instance, so open the main window

   open( w_main )

else

   // open the previous instance window and halt

   SetForegroundWindow( hwnd )

   HALT CLOSE

end if
------华软网友回复------
if handle(this,true)<>0 then
messagebox("","程序已运行")
return
end if
判断已找开,你应该关闭啊,没关闭,他当然能够再找开罗
------华软网友回复------
建议不要照帮助上说的做,那个做法有bug的。
我是这样写的:

public boolean of_hasrun()
il_handle = createmutex(0, 1, is_appname)
if waitforsingleobject(il_handle, 0) > 0 then
return true  //
else
return false
end if

is_appname 是应用名,随便取值。il_handle 是我作其余用的.

当然啦,你还要先声名这些APIs:
Public Function long CreateMutex(long security, long hasOwner, string Name) library "kernel32.dll" alias for "CreateMutexA;Ansi"

Public Function long WaitForSingleObject(long hHandle, long dwMilliseconds) library "kernel32.dll" Alias for WaitForSingleObject

Public Function long CloseHandle(long hHandel) library "kernel32.dll"

Public Function long GetWindow(long hHandle, long wCmd) library "user32.dll"

当然最后要 CloseHandle(il_handle)。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。