当我调用 EnumWindows(EnumWindowsProc, 0); 时,我不断收到错误消息
它将我的 BOOL CALLBACK SelectionWindows::EnumWindowsProc(HWND hWnd, long lParam) 函数转换为参数。
我知道这与类和选择 Windows:: 有关,但我一生都无法弄清楚。
这是.h
#ifndef SELECTIONWINDOWS_H
#define SELECTIONWINDOWS_H
#include <windows.h>
#include "mainwindow.h"
#include <QWidget>
#include <iostream>
class selectionWindows : public QWidget
{
Q_OBJECT
public:
selectionWindows(MainWindow * w);
void selectionWindows::addWindows();
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lparam);
~selectionWindows();
private:
char buff[255];
};
以及我遇到困难的部分的剪辑:
BOOL CALLBACK selectionWindows::EnumWindowsProc(HWND hWnd, long lParam) {
if (IsWindowVisible(hWnd))
GetWindowTextW(hWnd, (LPWSTR) buff, 254);
return true;
}
void selectionWindows::addWindows() {
EnumWindows(EnumWindowsProc, 0); //Here is the error
for (int i = 0; i != 254; ++i) {
qDebug() << buff[i];
}
}
我已经包含了 windows.h 和 iostream
谢谢您的帮助!
枚举窗口需要一个自由函数或静态类成员作为Windows枚举过程。您不能传递非静态类成员。如果您需要从您的内部访问类实例Windows枚举过程,在调用中传递一个指向它的指针EnumWindows
. The lParam is
要传递给回调函数的应用程序定义的值。
这是一个示例实现:
class selectionWindows : public QWidget {
Q_OBJECT
public:
selectionWindows(MainWindow * w);
void selectionWindows::addWindows();
BOOL CALLBACK EnumWindowsProc(HWND hWnd);
static BOOL CALLBACK EnumWindowsProcStatic(HWND hWnd, LPARAM lParam);
~selectionWindows();
private:
char buff[255];
};
以下代码将实例指针传递给EnumWindows
API:
void selectionWindows::addWindows() {
EnumWindows(selectionWindows::EnumWindowsProcStatic, reinterpret_cast<LPARAM>(this));
// ...
}
哪里的EnumWindowsProcStatic
将调用转发到类实例:
BOOL CALLBACK selectionWindows::EnumWindowsProcStatic(HWND hWnd, LPARAM lParam) {
selectionWindows* p = reinterpret_cast<selectionWindows*>(lParam);
return p->EnumWindowsProc(hWnd);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)