程序是第一次运行,为什么FindWindow总是返回大于零的值 ( 积分: 50 )

  • 主题发起人 主题发起人 xiechong
  • 开始时间 开始时间
X

xiechong

Unregistered / Unconfirmed
GUEST, unregistred user!
var<br>&nbsp;&nbsp;H:&nbsp;HWND;<br>begin<br>&nbsp;&nbsp;H&nbsp;:=&nbsp;FindWindow('TfrmMain',&nbsp;nil);<br>&nbsp;&nbsp;if&nbsp;H&nbsp;&lt;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(0,&nbsp;'该程序已经有一个在运行中!',&nbsp;'运行',&nbsp;0);<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.Terminate;<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;Application.Initialize;<br>&nbsp;&nbsp;Application.CreateForm(TfrmMain,&nbsp;frmMain);<br>&nbsp;&nbsp;Application.Run;<br>end.<br><br>改用&nbsp;H&nbsp;:=&nbsp;FindWindow(nil,&nbsp;'窗口名称')也一样
 
IDE下也有一个这样的窗口(你设计时期生成的).所以最好用互斥对象来操作<br>var<br>&nbsp;&nbsp;hMutex:&nbsp;HWND;<br>begin<br>&nbsp;&nbsp;hMutex&nbsp;:=&nbsp;CreateMutex(nil,&nbsp;False,&nbsp;'你的程序名');<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;GetLastError&nbsp;=&nbsp;ERROR_ALREADY_EXISTS&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(0,&nbsp;'该程序已经有一个在运行中!',&nbsp;'运行',&nbsp;0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.Initialize;<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.CreateForm(TfrmMain,&nbsp;frmMain);<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.Run;<br>&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;ReleaseMutex(hMutex);<br>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hMutex);<br>&nbsp;&nbsp;end;<br>end;
 
你是想不让程序运行两个以上吧,<br>你判断这个窗体时,它已经创建了,所以返回值大于零,你这个判断要加在这个窗体还没有创建之前才行.
 
接受答案了
 
后退
顶部