关于Shell_NotifyIcon的错误,如何解决?(较难)(100分)

  • 主题发起人 主题发起人 fly_123
  • 开始时间 开始时间
F

fly_123

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个自动启动的windows服务中有如下代码:<br>procedure TfrmServer.AddIcon;<br>var<br> &nbsp;strError : string ;<br> &nbsp;dErr: dword ;<br>begin<br> &nbsp;if not NT351 then begin<br> &nbsp; //定义图标<br> &nbsp; &nbsp;with FIconData do begin<br> &nbsp; &nbsp; &nbsp;cbSize := SizeOf(FIconData);<br> &nbsp; &nbsp; &nbsp;Wnd := Self.Handle;<br> &nbsp; &nbsp; &nbsp;uID := $DEDC;<br> &nbsp; &nbsp; &nbsp;uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;<br> &nbsp; &nbsp; &nbsp;hIcon := Forms.Application.Icon.Handle;<br> &nbsp; &nbsp; &nbsp;uCallbackMessage := WM_MIDASICON;<br> &nbsp; &nbsp; &nbsp;StrCopy( szTip, PChar(Caption) );<br> &nbsp; &nbsp;end;<br> &nbsp; &nbsp;<br> &nbsp; &nbsp;if not Shell_NotifyIcon(NIM_Add, @FIconData) then begin<br> &nbsp; &nbsp; &nbsp;//如果在任务栏中添加图标失败,则记录相关信息<br> &nbsp; &nbsp; &nbsp;dErr := GetLastError ;<br> &nbsp; &nbsp; &nbsp;strError := SysErrorMessage( dErr );<br> &nbsp; &nbsp; &nbsp;strError := Format( '工具栏图标添加失败,错误号是:%d,错误消息是:%s!', [dErr, strError ]);<br> &nbsp; &nbsp; &nbsp;uGlobalFunc.RegisterExceptionInTextFile('','','', strError, '', '' );<br> &nbsp; &nbsp; &nbsp; end ;<br> &nbsp;end;<br>end;<br><br>这个程序可以以exe运行,也可以以服务方式运行,但是在每次重新启动windows时总是添加图标失败,我得到的错误信息号是:2,即:系统找不到指定的文件。<br><br>这是为什么?有没有关于该函数的各种错误的可能原因的文档,希望各位高手帮帮我!
 
你个程序是不是在系统桌面和任务栏出来前,运行的?,如果是,要注册一个消息,来得到任务栏显示,通知。再重新创建图标
 
我后来查了,确实是findwindow('progman',nil)失败,即找不到桌面,那么请问,我定义一个消息,如何让任务栏显示的时候可以通知到我呢?
 
在创建时注册任务栏通知消息:<br> &nbsp;MsgTaskbarRestart := RegisterWindowMessage('TaskbarCreated');<br>然后捕获应用程序消息,重新创建图标。<br>应该可以加分了吧
 
加分别急,我原来的代码中确实有这么一条代码,然后在wndproc接收该消息,接收到则添加图标,但是我还是有点不明白:<br> &nbsp; TaskBarCreated是系统消息吗?如果只是用户消息,凭什么windows在任务栏创建成功后会通知这个消息给我,这段代码<br> &nbsp; &nbsp;MsgTaskbarRestart := RegisterWindowMessage('TaskbarCreated');<br>只是注册一条消息而已,并没有把它和任务栏创建的时机联系起来
 
zjrivaldo,如果有兴趣,希望帮我解决一个很相关的问题,见问题:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3407442
 
RegisterWindowMessage('TaskbarCreated');<br>就是注册了一个系统任务栏创建消息,'TaskbarCreated'为系统保有的名字,详情可查阅MSDN。然后在wndproc接收该消息,接收到则添加图标.
 
'TaskbarCreated'不是随便取的一个名字
 
明白了,结帖
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部