大家好!我的要求是一个程序一个实例运行.当我检测出有一个实例存在之后我要调用这个实例里的某些函数.请问这怎么才能调到.谢谢.
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.
var
MyCom : IP_FHC_Com;
begin
MyCom := CreateComObject(FHC_Com_TLB.CLASS_P_FHC_Com) as IP_FHC_Com;
MyCom.SendDataToPush_Future('AA49964', '0368519',0,'2330',0,1,53.4);
end;
參照一下
http://topic.csdn.net/u/20081007/10/607d9d37-4cf2-4f21-b64a-8cd621bcbb8f.html第4楼已回复。
没必要重复发贴,如果是为了多给分表示对问题的重视,完全可以用一个贴子来提问后加分即可。
handle可以通过findwindow等方法获取.
沒具體看樓主意思
//发现已经有实例创建,我怎么去调用它的一些函数呢?比如说我要调用这个实例的函数写在主窗体单元里.谢谢
BSMRecipients := BSM_APPLICATIONS; //BSMRecipients: DWORD;
BroadCastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE, @BSMRecipients,
UMI_USERMESSAGE, 0, 0); //UMI_USERMESSAGE是一个自定义消息,不明白可以查看自定义消息相关资料;
然后在主窗体处添加代码:
const
WM_WIS_FOUNDSERIAL = 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));
这样就能实现楼主的意愿。唯一一点就是如果想把已经创建的实例设置到前台,还需要其他处理。
WM_WIS_FOUNDSERIAL = WM_USER + $0101;
改成
UMI_USERMESSAGE = WM_USER + $0101;