我有一个简单的周期,具有简单的窗口打印功能。
char temp[100], *currbuf= "", *currbuf2 = "";
while (1) {
GetWindowText(GetForegroundWindow(), temp, sizeof temp / sizeof *temp);
currbuf2 = temp;
if (currbuf2 != currbuf) {
currbuf = temp;
printf("\n\nWindow title: %s\n", temp);
};
};
问题是它仅打印第一个活动窗口的标题。 我想做的是每次更改活动窗口的标题。 如果没有if语句,它将运行良好(但仍会打印该活动窗口)。
答案 0 :(得分:2)
问题是它只打印第一个活动窗口的标题。
您需要比较字符串 contents ,而不是字符串 pointers :
char temp[100] = "", currbuf[100] = "";
while (1) {
GetWindowText(GetForegroundWindow(), temp, sizeof temp / sizeof *temp);
if (strcmp(currbuf, temp) != 0) {
strcpy(currbuf, temp);
printf("\n\nWindow title: %s\n", temp);
}
}
我想要做的是每次更改活动窗口时都显示其标题。
您应该使用SetWinEventHook()
来接收OS发出的EVENT_SYSTEM_FOREGROUND
通知,而不是使用不断轮询活动窗口的无限循环。不要轮询(除非是在开始挂接之前的第一次)。
void displayWindowTitle(HWND hWnd)
{
char temp[100] = "";
GetWindowText(hWnd, temp, sizeof temp / sizeof *temp);
printf("\n\nWindow title: %s\n", temp);
}
void CALLBACK MyHookCallback(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
displayWindowTitle(hwnd);
}
...
displayWindowTitle(GetForegroundWindow());
HWINEVENTHOOK hHook = SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, &MyHookCallback, 0, 0, WINEVENT_OUTOFCONTEXT);
...
UnhookWinEvent(hHook);