有请高手......

S海鸥 2003-08-14 10:32:36
代码理解-------------
if CheckInstance('PURCHASE') then
Begin
…….
End;
-------------------------------------------------------------------------------
function CheckInstance(sApp : string) : boolean;
begin
UniqueAppStr := PChar(sApp);
MessageID := RegisterWindowMessage(UniqueAppStr);
if InitInstance then result := true
else result := false;
end;
-------------------------------------------------------------------------------
function InitInstance: boolean;
begin
MutHandle := OpenMutex(MUTEX_ALL_ACCESS,False,UniqueAppStr);
if MutHandle = 0 then begin
DoFirstInstance;
result := true;
end
else begin
BroadcastFocusMessage;
result := false;
end
end;
-------------------------------------------------------------------------------
procedure DoFirstInstance;
begin
SubClassApplication;
MutHandle := CreateMutex(Nil, False, UniqueAppStr);
if MutHandle = 0 then
MIError := MIError or MI_FAIL_CREATE_MUTEX;
end;
-------------------------------------------------------------------------------
procedure SubClassApplication;
begin
WPRoc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc)));
if WProc = Nil then MIError := MIError or MI_FAIL_SUBCLASS;
end;
-------------------------------------------------------------------------------
1.函数 CheckInstance('PURCHASE') 在此处的作用?
2.RegisterWindowMessage(UniqueAppStr); 有没有写到注册表中?
3. TFNWndProc(SetWindowLong(Appli…(@NewWndProc)))
TFNWndProc 是什么?(是不是强制类型转化,如是那是什么类型?)
4.OpenMutex(MUTEX_ALL_ACCESS,False,UniqueAppStr); 和
CreateMutex(Nil, False, UniqueAppStr);中 ,
提到互斥体对象, 怎样理解?

...全文
42 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
S海鸥 2003-09-20
  • 打赏
  • 举报
回复
1.函数 CheckInstance('PURCHASE') 在此处的作用?
答:先注册一个消息标识,然后将此标识作为一个互斥量返回句柄,在返回的时候对不同的情况做相应处理:如果此消息标识不是一个互斥量则创建,否则调用BroadcastFocusMessage----这个过程的代码不清楚,无法回答!


非常感谢你(FrameSniper)的提醒, 刚才没仔细看. 请版主扣elilor(elilor)2分,liqth(liqth)30分 加到 (FrameSniper).


FrameSniper 2003-09-20
  • 打赏
  • 举报
回复
楼上几个朋友说第一个问题的作用是检测是否有进程实例的说法完全不正确!
FrameSniper 2003-09-20
  • 打赏
  • 举报
回复
我都怀疑这个帖子是不是倒分啊!
liqth 2003-09-20
  • 打赏
  • 举报
回复
-------------------------------------------------------------------------------
1.函数 CheckInstance('PURCHASE') 在此处的作用?
2.RegisterWindowMessage(UniqueAppStr); 有没有写到注册表中?
3. TFNWndProc(SetWindowLong(Appli…(@NewWndProc)))
TFNWndProc 是什么?(是不是强制类型转化,如是那是什么类型?)
4.OpenMutex(MUTEX_ALL_ACCESS,False,UniqueAppStr); 和
CreateMutex(Nil, False, UniqueAppStr);中 ,
提到互斥体对象, 怎样理解?

解:
1.函数 CheckInstance('PURCHASE') 在此处的作用?
是否已经存在一份进程实例

2.RegisterWindowMessage(UniqueAppStr); 有没有写到注册表中?
没有写到注册表

3.TFNWndProc(SetWindowLong(Appli…(@NewWndProc)))
TFNWndProc 是什么?(是不是强制类型转化,如是那是什么类型?)
是强制类型转换


4. OpenMutex(MUTEX_ALL_ACCESS,False,UniqueAppStr); 和
CreateMutex(Nil, False, UniqueAppStr);中 ,
OpenMuteX仅仅是返回存在的互斥量句柄, 一般用于不允许有重复的实例运行.

FrameSniper 2003-09-20
  • 打赏
  • 举报
回复
1.函数 CheckInstance('PURCHASE') 在此处的作用?
答:先注册一个消息标识,然后将此标识作为一个互斥量返回句柄,在返回的时候对不同的情况做相应处理:如果此消息标识不是一个互斥量则创建,否则调用BroadcastFocusMessage----这个过程的代码不清楚,无法回答!

2.RegisterWindowMessage(UniqueAppStr); 有没有写到注册表中?
答:这个和注册表没有任何关系,仅仅是定义一个消息标识,以备将来作为互斥量使用或调用消息发送函数如SendMessage等来进行发送等操作

3. TFNWndProc(SetWindowLong(Appli…(@NewWndProc)))
TFNWndProc 是什么?(是不是强制类型转化,如是那是什么类型?)
答:这里是强制类型转换,但这个类型应该是你程序自定义类型,无类型申明的情况下无法判断!

4.OpenMutex(MUTEX_ALL_ACCESS,False,UniqueAppStr); 和
CreateMutex(Nil, False, UniqueAppStr);中 ,
提到互斥体对象, 怎样理解?
答:OpenMuteX仅仅是返回一个已存在的互斥量的句柄
CreateMuteX则是创建一个互斥量
所有对互斥量的维护都应该由程序员调用相应API函数手动维护!
S海鸥 2003-09-20
  • 打赏
  • 举报
回复
up
pankun 2003-08-14
  • 打赏
  • 举报
回复
2:没有写到注册表中。
3:是类型转化,@WPRoc := pointer(SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc)))也可以
4:互斥体对象在你上面这段程序中是为了检查进程是否已运行。互斥体对象还可以用在线程同步等上,看看API大全吧 :)
elilor 2003-08-14
  • 打赏
  • 举报
回复
1.检查是否已经存在一份进程实例;
2.不会
1. 什么是量产工具,有何作用?量是指批量的意思,即量产工具可以一次性生产出很多U盘,只要你的USB孔足够。   量产工具是针对U盘主控芯片进行操作的由厂商开发的低层软件,作用:   1)低格U盘   2)生产加密盘,启用加密功能(仅支持在第一个分区)   3)分区,可以生产只读分区,更改U盘介质类型(removabel 和 fixed)   4)量产出USB-CDROM,此作用可以做启动光盘(仅支持在第一个分区)   5)修改厂商等信息,制作个性化U盘(比如一插上U盘,右下角就显示"某某的U盘"或其他自设的内容)这点也常被黑心厂商利用来修改假冒U盘.   量产工具的英文简写是MP Tool,更详细一点是Mass Production Tool,表示大量生产的工具软件   2. 读卡器所组成的U盘能量产出CDROM吗?   不能,也许以后会有这样的读卡器。   3.移动硬盘能量产吗?   目前不能,芯邦在搞,据说明年会出来。   如果真出来这样的工具,CD\DVD销量可能要大大下降了。   4.所有U盘都能量产吗?   应该是的,就看有没有合适的量产工具放出。主控厂商肯定都有的。   5.如何判断U盘主控 ?   1) 用芯片精灵(ChipGenius)软件来检测   2) 最准确方法-拆盘,看主控芯片(一般是正方形较小的那块)上刻的型号.   6. 什么量产工具最好用?   都差不多,就看熟不熟练。   7. 使用量产工具要注意什么?   1)不要怕,大胆的弄,U盘不会坏的。   2)量产也有经常出错的时候,如U盘变成8M,再次进行。   8. 量产出的CD-ROM最大可以是多大?   不同版本,牌子不一样,我的4G的ICREATE的可以量产出1G多点。这个技术指标开发商不透露。   现在有些主控已经可以量产DVD了,可以达到4G   9. 量产工具版本越高越好吗?   不一定,还要看是不是支持你的U盘的类型。   10. 量产出的CDROM启动兼容性、速度怎样?   新主板几乎都可以,老主板有的USB-HDD或USB-ZIP都不行,但CDROM可以;如果主板支持USB2.0且打开“high speed”,U盘也支持USB2.0这个启动速度是很快的,用来安装WinXP就是一例   11. 不同的量产工具为什么不能通用?   主要区别在于不同厂家的主控芯片都有其保密的指令与函数,没法通用。   12. 为什么有的CDROM要以启动2次才可以成功   这个,有高手研究,说到这里,涉及到了BIOS内容,不同BIOS的处理情况不一样,我们这里没有这样的专家。当年BINBIN等CRACK VISTA的时候,BIOS专家出面,解决了不少问题,当然是针对AWARD的,至于AMI的,还没有这样的公开程序。如果从BIOS层面解决对 USBCDROM的识别问题,就太好了。   13. 从哪里可以得到量产工具?   1)从U盘厂家网站,一般主控开发商都给他们主控的。   2)从数码之家网站下载,更新很快,相当齐全   3)搜索网络,包括网络和这里   4)打电话或发EMAIL要   14. MP3、MP4等设备可以做启动盘吗?   硬件基本差不多,都可以的。一般只能做USB-HDD启动   15. 量产成CDROM后,剩余空间怎么用?   剩余空间会被识别成为一个独立的U盘,可以做成fixed盘,进一步分区;也可以为removable盘。剩余空间可以用来作启动,也可以当成普通U盘储存文件.   16. 量产工具可以在VISTA下运行吗?   可以   17. 如果测试量产出的CDROM成功了?   好多人量产完成后用几台机器试都无法启动,怎样确定是否成功呢?很简单,用虚拟机,启机时选择CDROM先启动就可以了,如果成功则量产没有问题   18. 关于CDROM的一个启动问题   碰到一个主板,首次USBCDROM启动没有问题,可是第二次,就不行了,停止了,说什么没有系统。解决方法就是在BIOS的BOOT顺序时重新设置USBCDROM为第一启动,保存一下BIOS   19.为什么量产工具不认U盘或量产时出错.   如插上去量产软件中没反应,或显示"下载代码时发现错误".有可能是量产工具与U盘主控不对应,建议拆开U盘看主控型号,重新下对应的量产工具.   如显示"闪存ID不符合" 之类的错误,建议下载更新版本含有新出闪存代码的量产工具.   20. 量产失败,无法用软件补救怎么办?   接到电脑上短接Flash芯片(一般是第29和第30引脚)直到电脑认出.   用专用工具修复

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧