大家好!我的要求是一个程序一个实例运行.当我检测出有一个实例存在之后我要调用这个实例里的某些函数.请问这怎么才能调到.谢谢.
var
MutexHandle: THandle;
begin
MutexHandle := CreateMutex(nil, False, '{8EC3899A-98E0-42DE-9925-C19008E6ED74}');
if (MutexHandle>0) and (GetLastError = ERROR_ALREADY_EXISTS) then begin
//发现已经有实例创建,我怎么去调用它的一些函数呢?比如说我要调用这个实例的函数写在主窗体单元里.谢谢
Halt;
end;
Application.Initialize;
Application.CreateForm(THaoDongMain, HaoDongMain);
Application.Run;
end.
var
MutexHandle: THandle;
begin
MutexHandle := CreateMutex(nil, False, '{8EC3899A-98E0-42DE-9925-C19008E6ED74}');
if (MutexHandle>0) and (GetLastError = ERROR_ALREADY_EXISTS) then begin
//发现已经有实例创建,我怎么去调用它的一些函数呢?比如说我要调用这个实例的函数写在主窗体单元里.谢谢
Halt;
end;
Application.Initialize;
Application.CreateForm(THaoDongMain, HaoDongMain);
Application.Run;
end.
解决方案 »
- 密码修改问题
- 有个那函数可以知道当前硬盘有多少个分区?
- 有关制作网络播放器的问题
- 50分,请各位高手解决新手的问题!!!!
- 这是个算法的问题?
- 谁知道*.awr格式的报表文件是用什么来编辑的?
- 散分,请教怎样快速熟悉 Delphi 的 IDE?
- 高手看看我写的这个简单的dll是怎么回事,在调用时提示无效的指针操作!
- 急救:用代理服务器上网,我的Foxmail和网络蚂蚁都不能正常工作,我拨号上网都没有问题,谢谢各位了。
- 我的邮件服务器告一段落,请大家帮忙测试,谢谢!
- 字符串操作时,函数insert(s1,s2,3)和关键字insert重复了?????急急急
- 刚才不知道怎么一次给高于100分.这次发个帖给3150379
简单点的一个sendmessage搞定
Delphi(Pascal) code
//发现已经有实例创建,我怎么去调用它的一些函数呢?比如说我要调用这个实例的函数写在主窗体单元里.谢谢
BSMRecipients := BSM_APPLICATIONS; //BSMRecipients: DWORD;
BroadCastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE, @BSMRecipients,
UMI_USERMESSAGE, 0, 0); //UMI_USERMESSAGE是一个自定义消息,不明白可以查看自定义消息相关资料;然后在主窗体处添加代码: const
UMI_USERMESSAGE = WM_USER + $0101;var
OldWProc: TFNWndProc;//接收并处理消息;
function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint): Longint; stdcall;
begin
result := 0;
if Msg = UMI_USERMESSAGE then //接收的广播消息,在此处理;
begin
//楼主的操作;
end;
else
Result := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);
end;initialization
OldWProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc)));finalization
if OldWProc <> nil then
SetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(OldWProc));这样就能实现楼主的意愿。唯一一点就是如果想把已经创建的实例设置到前台,还需要其他处理。
CSingleAppMutex = '{B6750F3B-0FBA-463e-8F0A-285B186C8F44}' ; //唯一打开标识if CheckOnlyRun(CSingleAppMutex) = False then Exit;
//检测是否此标识量已打开,没打开则打开
function CheckOnlyRun( AMutexName : String): Boolean;
begin
if OpenMutex(MUTEX_ALL_ACCESS ,false , PChar(AMutexName)) = 0 then
begin
Result := True;
CreateMutex(nil , true , PChar(AMutexName));
end
else Result := False;
end;试试看....