麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Delphi > 正文

防止應(yīng)用程序出現(xiàn)多個(gè)實(shí)例的通用單元-UniqueInstance.pas

2019-09-08 23:09:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
                                                                                                                                                       
                       

{ unit UniqueInstance;/t/t/t/t/t/t/t }
{/t/t/t/t/t/t/t/t/t      }
{ Check if previous application instance exists, if yes, the previous/t  }
{ instance will be active, and current instance will be terminate./t     }
{/t/t/t/t/t/t/t/t/t      }
{ written by savetime, http://savetime.delphibbs.com 2004/6/27/t/t }
{/t/t/t/t/t/t/t/t/t      }
{ Usage:/t/t/t/t/t/t/t/t       }
{   Include this unit to your delphi project, no more job to do./t       }
{/t/t/t/t/t/t/t/t/t      }
{ Important:/t/t/t/t/t/t/t/t   }
{   You must NOT remove the project line: Application.Initialize;/t      }
{/t/t/t/t/t/t/t/t/t      }
{ Notes:/t/t/t/t/t/t/t/t       }
{   This unit identify an application by it''s EXE file name. So, if you want   }
{   to specify another unique application name, you must change the value      }
{   UniqueApplicationName in CheckPriviousInstance procedure./t/t  }
{/t/t/t/t/t/t/t/t/t      }

unit UniqueInstance;

interface

uses Classes, SysUtils, Windows, Forms;

implementation

var
 UniqueMessageID: UINT;
 UniqueMutexHandle: THandle;
 PreviousWndProc: TFNWndProc;
 NextInitProc: Pointer;

function ApplicationWndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM;
 lParam: LPARAM): LResult; stdcall;
begin
 // Note: Use "<>" may boost application speed.
 if uMsg <> UniqueMessageID then
   Result := CallWindowProc(PreviousWndProc, hWnd, uMsg, wParam, lParam)
 else begin
   if IsIconic(Application.Handle) then Application.Restore;
   SetForegroundWindow(Application.Handle);
   Result := 0;
 end;
end;

procedure BringPreiviousInstanceForeground;
const
 BSMRecipients: DWORD = BSM_APPLICATIONS;
begin
 BroadcastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE,
   @BSMRecipients, UniqueMessageID, 0, 0);
 Halt;
end;

procedure SubClassApplication;
begin
 PreviousWndProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,
   Integer(@ApplicationWndProc)));
end;

procedure CheckPreviousInstance;
var
 UniqueApplicationName: PChar;
begin
 // Unique application name, default set to EXE file name,
 // you can change it to yourself.
 UniqueApplicationName := PChar(ExtractFileName(Application.ExeName));

 // Register unique message id
 UniqueMessageID := RegisterWindowMessage(UniqueApplicationName);

 // Create mutex object
 UniqueMutexHandle := CreateMutex(nil, False, UniqueApplicationName);

 // Create mutex failed, terminate application
 if UniqueMutexHandle = 0 then
   Halt
 // The same named mutex exists, show previous instance
 else if GetLastError = ERROR_ALREADY_EXISTS then
   BringPreiviousInstanceForeground
 // No previous instance, subclass application window
 else
   SubClassApplication;

 // Call next InitProc
 if NextInitProc <> nil then TProcedure(NextInitProc);
end;

initialization
 // Must use InitProc to check privious instance,
 // as the reason of Application hasn''t been created!
 NextInitProc := InitProc;
 InitProc := @CheckPreviousInstance;

finalization
 // Close the mutex handle
 if UniqueMutexHandle <> 0 then CloseHandle(UniqueMutexHandle);

end.


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 在线看免费观看日本 | 草妞视频| 欧美一级毛片美99毛片 | 小视频免费在线观看 | 久草在线资源观看 | 久久成人免费网站 | 香蕉久久久 | 亚洲视频精品在线 | 免费毛片在线 | 中文字幕www. | 成人国产精品一区 | 欧美韩国日本在线 | 人人看人人艹 | 海角在线观看91一区二区 | 亚洲视频成人 | 成人啪啪18免费网站 | 在线亚洲欧美 | 校花被肉干高h潮不断 | 717影院理论午夜伦八戒秦先生 | 国产精品久久久久久影视 | av噜噜噜噜 | 九九视频精品在线观看 | 国产在线精品一区二区 | 曰韩在线视频 | 精品久久www| 青青国产在线视频 | 国产乱色精品成人免费视频 | 精品国产91久久久久 | 神马久久蜜桃 | 日本中文字幕久久 | 欧美成人性生活片 | 成人国产视频在线观看 | 国产91porn| 国产精品视频导航 | 国产二区三区在线播放 | 中文字幕在线观看精品 | 毛片免费试看 | 校花被肉干高h潮不断 | 久久9色 | 欧美一区中文字幕 | 中文在线日韩 |