怎么模拟点击(或者其他方法)托盘图标
单击右键如下图然后点击消费查询。。
单击右键如下图然后点击消费查询。。
解决方案 »
- 如何获取鼠标双击桌面图标的名称?
- 通过ClientDateSet如何真正删除XML文件内记录.
- 在三层设计中为什么不能对 DBGridEH 的 Columns 进行编辑
- 请问在delphi中如何执行dos命令?
- 散分了!!!大家说说自己的情况!
- 这段存储过程如果放在前台用内嵌的SQL语句写该怎么写?
- 我用dcom做的三层程式为什么有此问题呀?
- 为什么执行完一个存储过程以后,在执行SQL语句就出错出错信息如下:
- 请问谁有关于自定义消息的范例程序
- 各位大哥大姐,小弟有一问题:有什么软件可以看到 EXE或DLL中的API啊?
- 程序想一直在最前方显示应该怎么做?
- delphi7环境下adodataset的一个讨论
var
h: THandle;
p: PTBBUTTON;
i: Integer;
b: _TBBUTTON;
hTray: Cardinal;
dw: Cardinal;
TrayPid: Cardinal;
TempPid: Cardinal;
IcoHwnd: Cardinal;
r: TRect;
point: TPoint;
begin
Result := False; hTray := FindWindow('Shell_TrayWnd', nil);
hTray := FindWindowEx(hTray, 0, 'TrayNotifyWnd', nil);
hTray := FindWindowEx(hTray, 0, 'SysPager', nil);
hTray := FindWindowEx(hTray, 0, 'ToolbarWindow32', nil);
GetWindowThreadProcessId(hTray, TrayPid);
h := OpenProcess(PROCESS_ALL_ACCESS, False, TrayPid);
p := VirtualAllocEx(h, nil, SizeOf(b) + SizeOf(r), MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); for i := 0 to SendMessage(hTray, TB_BUTTONCOUNT, 0, 0) - 1 do
begin
ZeroMemory(@b, SizeOf(b));
WriteProcessMemory(h, p, @b, SizeOf(b), dw);
SendMessage(hTray, TB_GETBUTTON, i, LPARAM(p));
ReadProcessMemory(h, p, @b, SizeOf(b), dw);
ReadProcessMemory(h, Pointer(b.dwData), @IcoHwnd, 4, dw);//返回到本地的结构中dwData成员表示托盘图标句柄所在的位置
GetWindowThreadProcessId(IcoHwnd, TempPid);
if TempPid = ProcessID then
begin
SendMessage(hTray, TB_GETITEMRECT, i, LPARAM(LPARAM(p) + SizeOf(b)));
ReadProcessMemory(h, Pointer(LPARAM(p) + SizeOf(b)), @r, SizeOf(r), dw);
Windows.ClientToScreen(hTray, point);
point.X := point.X + r.Left;
point.Y := point.Y + r.Top;
SetCursorPos(point.X, point.Y);//菜单弹出位置
{按下右键弹出菜单,不能松开右键,否则可能弹出系统任务栏菜单}
Result := (0 = SendMessage(hTray, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(r.Left, r.Top)));
Break;
end;
end; VirtualFreeEx(h, p, 0, MEM_RELEASE);
CloseHandle(h);
end;
问题如果解决请及时结帖:)
Result := (0 = SendMessage(hTray, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(r.Left, r.Top)));
下面加一行
Result := (0 = SendMessage(hTray, WM_RBUTTONUP, 0, MAKELPARAM(r.Left, r.Top)));