如何让一个应用程序只创建一次,在关闭前,如果双击它的图标只激活这程序的主窗体
解决方案 »
- 高手支持一下,delphi异步调用
- 如何让可拖动的Panel在一开始就显示出带关闭按钮的小条?100分伺候!
- 请问现在delphi最新版本时多少,到目前最好用得版本是哪一版?
- 怎样判断windows窗体中所有组件是否为tedit类型?(在线)
- 在数据库中插入图片
- 小鸟 SOS:~~~~~~它又找我麻烦,在用storedproc的时候!过路的都进来看一下吧
- bitmap是一个控件吗?不明白,书上怎么都没介绍
- 请问众位高手:怎么把windows的鼠标右键的菜单给屏蔽掉呢?
- 为何菜单会莫名其妙自动下拉?
- 可能不成立的一个问题
- 请高手赐教 Delphi7+Rave横向打印显示不了页脚
- 如何把一个内存区全赋值为0 ?
unit ZsSingleInstance;interfaceprocedure SingleInstance;implementationuses Windows, Messages, Forms;type
PShareMem = ^TShareMem;
TShareMem = record
AppHandle: THandle;
end;var
GMapFileHandle: THandle;
GShareMem: PShareMem;procedure InitMapFile;
const MAP_FILE_NAME = '{D96D0544-6ADB-408F-9EEF-D1694264C955}';// please change it to your own unique GUID
begin
// try to open file mapping
GMapFileHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, PChar(MAP_FILE_NAME));
// first run
if GMapFileHandle = 0 then begin
GMapFileHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(TShareMem), MAP_FILE_NAME);
GShareMem := MapViewOfFile(GMapFileHandle, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
if GShareMem = nil then CloseHandle(GMapFileHandle)
else GShareMem^.AppHandle := 0;// set previous app handle to 0 if first run
end
else begin// get previous instance shared mem
GShareMem := MapViewOfFile(GMapFileHandle, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
if GShareMem = nil then CloseHandle(GMapFileHandle);
end;
end;procedure SingleInstance;
var top_window: HWND;
begin
try
if GShareMem <> nil then begin
if GShareMem^.AppHandle = 0 then GShareMem^.AppHandle := Application.Handle
else begin
SendMessage(GShareMem^.AppHandle, WM_SYSCOMMAND, SC_RESTORE, 0);
top_window := GetLastActivePopup(GShareMem^.AppHandle);
if (top_window <> 0) and
(top_window <> GShareMem^.AppHandle) and
IsWindowVisible(top_window) and
IsWindowEnabled(top_window) then
SetForegroundWindow(top_window);// restore last active window
// terminate current instance
Halt(0);
end;
end;
except end;
end;initialization
try// open or create map file
InitMapFile;
SingleInstance;
except end;finalization
try// free map file
UnMapViewOfFile(GShareMem);
CloseHandle(GMapFileHandle);
except end;end.