Delphi如何获得窗口的名字?
就是获得我当前所有运行的窗口名,用来做老板键的。就比如,我桌面上有记事本、百度网页、和Q聊这几个窗口,就可以获取他们的名字,存入数组。...
就是获得我当前所有运行的窗口名,用来做老板键的。就比如,我桌面上有记事本、百度网页、和Q聊这几个窗口,就可以获取他们的名字,存入数组。
展开
展开全部
用WindowsAPI EnumWindows可以实现你想要的功能。
EnumWindows枚举所有窗口,用GetWindowText获得标题。
具体代码如下:
function EnumWndProc(hwnd: THandle; lParam: LPARAM): Boolean; stdcall;
var
wndTitle: array[0..255] of Char;
begin
//获取窗口名称
if GetWindowText(hwnd, wndTitle, 255) > 0 then
begin
//参数lParam转换为TStrings,添加窗口标题
TStrings(lParam).Add(wndTitle);
end;
//返回True则继续下一个窗口,否则停止
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
List: TStrings;
begin
List := Memo1.Lines;
EnumWindows(@EnumWndProc, Integer(List));
end;
EnumWindows枚举所有窗口,用GetWindowText获得标题。
具体代码如下:
function EnumWndProc(hwnd: THandle; lParam: LPARAM): Boolean; stdcall;
var
wndTitle: array[0..255] of Char;
begin
//获取窗口名称
if GetWindowText(hwnd, wndTitle, 255) > 0 then
begin
//参数lParam转换为TStrings,添加窗口标题
TStrings(lParam).Add(wndTitle);
end;
//返回True则继续下一个窗口,否则停止
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
List: TStrings;
begin
List := Memo1.Lines;
EnumWindows(@EnumWndProc, Integer(List));
end;
追问
是可以获取到了,但是许多无关重要的都获取上了,比如有很多的Defult IME 的记录,是怎么回事呢?怎么才能优化呢? 也很感谢你这次的回答。
追答
GetWindowText只是最普通的一个API,你还可以通过其他的API来获取更多的信息来进行筛选。
举个例子:GetWindowInfo函数可以获取窗口的许多信息,具体结构如下:
typedef struct {
DWORD cbSize;
RECT rcWindow; //窗口区域
RECT rcClient; //串口Client区域
DWORD dwStyle; //窗口样式
DWORD dwExStyle; //窗口扩展样式
DWORD dwWindowStatus; //WS_ACTIVECAPTION表示活动,否则为0
UINT cxWindowBorders; //边框宽度
UINT cyWindowBorders; //边框宽度
ATOM atomWindowType; //The window class atom (see RegisterClass).
WORD wCreatorVersion; //The Microsoft Windows version of the application that created the window
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
希望这个回答对你有用
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询