获取程序在任务栏中按钮的位置的方法

本文介绍了一种获取程序在任务栏中按钮位置的方法,涉及发送消息TB_GETRECT、OpenProcess、VirtualAllocEx等操作。通过枚举按钮的TEXT信息,找到与进程和窗口同名的按钮ID,从而获取按钮位置。
摘要由CSDN通过智能技术生成

本人是上海同济大学软件学院的一个学生,在做一个期末项目的时候希望能够模拟“最小化”的一个动画效果,所以需要获得程序的任务栏按钮位置。但是从网上搜索的结果出乎意料的沮丧,好像真的没有一篇文章给出了完整的答案。所以今天努力了一下,给出一个正确的方法,代码直接就贴下面了用于交流。

 

由于按钮不是窗口,所以除非微软提供函数接口,否则我们无法得知任务栏是如何绘制的。

 

//头文件:

#include"Commctrl.h"

 

从网上看到,对一个TabButton(任务栏)可以发送以下消息(前题是有上述头文件)

TB_GETBUTTONTEXT

TB_GETBUTTONINFO

TB_BUTTONCOUNT

等等,但是http://topic.csdn.net/t/20030423/13/1697563.html这个文章只介绍了TB_BUTTONCOUNT,原因是什么呢?大家可以自己试一下,对着一个找到的任务栏窗口发送TB_GETBUTTONINFO有什么结果,我的结果是报了一个系统错误(从后面可以知道,是访问了一块没有被开辟的内存),然后任务栏重启(句柄被修改了,说明是重启过了)。

 

那么仔细看msdn

TB_GETRECT wParam = (W
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
获取任务栏打开的程序并将其顶置,可以使用Java的AWT和JNI(Java Native Interface)技术。 下面是一个简单的示例代码,可以实现获取任务栏打开的程序并将其顶置: ```java import java.awt.*; public class SetTopTaskbarWindow { public static void main(String[] args) { String windowTitle = "MyWindow"; // 要顶置的窗口标题 int hwnd = findWindow(windowTitle); // 获取窗口句柄 setWindowTop(hwnd); // 将窗口设置为顶置窗口 } // 查找窗口句柄 private static int findWindow(String windowTitle) { int hwnd = 0; hwnd = User32.INSTANCE.FindWindow(null, windowTitle); return hwnd; } // 将窗口设置为顶置窗口 private static void setWindowTop(int hwnd) { User32.INSTANCE.SetForegroundWindow(hwnd); } // 获取任务栏打开的程序并将其顶置 private static void setTopTaskbarWindow() { User32.INSTANCE.SetForegroundWindow(User32.INSTANCE.FindWindow("Shell_TrayWnd", null)); User32.INSTANCE.SetForegroundWindow(User32.INSTANCE.FindWindowEx(0, 0, "Button", null)); } } // 使用JNI调用Windows API interface User32 extends W32APIOptions { User32 INSTANCE = Native.load("user32", User32.class, DEFAULT_OPTIONS); boolean SetForegroundWindow(int hwnd); int FindWindow(String lpClassName, String lpWindowName); int FindWindowEx(int parent, int child, String className, String windowName); } ``` 需要注意的是,这段代码只能在Windows操作系统上运行,因为它使用了Windows API。如果要在其他操作系统上运行,需要使用相应的API。 `setTopTaskbarWindow()`方法,首先将任务栏(Shell_TrayWnd)窗口设置为顶置窗口,然后将任务栏上的第一个按钮Button)设置为顶置窗口,这样就可以获取任务栏打开的程序并将其顶置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值