首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么外部程序托盘图标的Hint

2012-02-05 
如何外部程序托盘图标的Hint一外部程序运行时,我可以获得该程序主窗体的句柄,该程序还有一个托盘图标,如何

如何外部程序托盘图标的Hint
一外部程序运行时,我可以获得该程序主窗体的句柄,该程序还有一个托盘图标,如何才能获得该托盘图标的Hint,并在另外一个程序中显示出来。 
  如果上述问题不能解决,可不可以将右下角所有托盘图标的Hint一起读出来,而不需要管哪个托盘图标是哪个应用程序的。 

  据我所知,一下代码可以获得任务栏时钟的Text。 

var 
  Wnd: THandle; 
begin
 Wnd:=FindWindow(′Shell_TrayWnd′,nil); 
 Wnd:=FindWindowEx(Wnd,HWND(0),′TrayNotifyWnd′,nil); 
 Wnd:=FindWindowEx(Wnd,HWND(0),′TrayCLockWClass′,nil); 
end;


[解决办法]
既然能找到Shell_TrayWnd的句柄,应该可以枚举其所有的子窗体吧
[解决办法]
很早以前写的一段代码,枚举托盘图标

Delphi(Pascal) code
  TTBBinfo = record    ttbb: TTBButton;    ttbbi: TBBUTTONINFO;    Text: array[0..256-1] of Char;    Icon: HICON;    bValid: boolean;    bVisible: BOOL;    bmp: TBitmap;  end;function GetTrayButtons():Integer;var  i,nCount: Integer;  Buffer: PChar;  PID: THandle;  hPRC: THandle;  dwRead: Cardinal;  ImageList: HIMAGELIST;begin  Result:=0;  GetWindowThreadProcessId(hToolBar, @PID);  hPRC:= OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, PID);  Buffer:= VirtualAllocEx(hPRC, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);  try    //FreeTTBBS;    nCount:= SendMessage(hToolbar, TB_BUTTONCOUNT, 0, 0);    SetLength(ttbbs,nCount);    for i:=0 to nCount-1 do    begin      FillChar(ttbbs[i].ttbb, SizeOf(ttbbs[i].ttbb),0);      WriteProcessMemory(hPRC, Buffer, @(ttbbs[i].ttbb), SizeOf(ttbbs[i].ttbb),dwRead);      SendMessage(hToolBar, TB_GETBUTTON, i, Integer(Buffer));      ReadProcessMemory(hPRC, Buffer, @(ttbbs[i].ttbb), SizeOf(ttbbs[i].ttbb), dwRead);      SendMessage(hToolBar, TB_GETBUTTONINFO, ttbbs[i].ttbb.idCommand, Integer(Integer(@Buffer[0]) + SizeOf(ttbbs[i].ttbb)));      ReadProcessMemory(hPRC, Pointer(Integer(@Buffer[0]) + SizeOf(ttbbs[i].ttbb)), @(ttbbs[i].ttbbi), SizeOf(ttbbs[i].ttbbi), dwRead);      SendMessage(hToolBar, TB_GETBUTTONTEXT, ttbbs[i].ttbb.idCommand, Integer(Integer(@Buffer[0]) + SizeOf(ttbbs[i].ttbb)+ Sizeof(ttbbs[i].ttbbi)));      ReadProcessMemory(hPRC, Pointer(Integer(@Buffer[0]) + SizeOf(ttbbs[i].ttbb)+ Sizeof(ttbbs[i].ttbbi)), @(ttbbs[i].Text[0]), SizeOf(ttbbs[i].Text), dwRead);      if Trim(ttbbs[i].Text)='' then        ttbbs[i].Text:='[NONAME]';      ImageList:= SendMessage(hToolbar, TB_GETIMAGELIST, 0, 0);      ttbbs[i].Icon:=ImageList_GetIcon(ImageList,ttbbs[i].ttbb.iBitmap,ILD_NORMAL);      ttbbs[i].bValid:=ttbbs[i].ttbb.iString<>-1;      ttbbs[i].bVisible:=not BOOL(SendMessage(hToolBar, TB_ISBUTTONHIDDEN, ttbbs[i].ttbb.idCommand, 0));    end;  finally    VirtualFreeEx(hPRC, Buffer, 0, MEM_RELEASE);    CloseHandle(hPRC);    Result:=nCount;  end;end; 

热点排行