我正在创建一个显示活动前景窗口的C程序,但是我遇到了一个问题,如主题中所提到的,它会打印两次所有字符串(%s,new_window)。我已经阅读了很多关于这个printf问题的话题,但它们都没有对我有用。这是我的代码
int main() {
char window[256]= "hello";
char new_window[256] = "hello";
HWND handle = GetForegroundWindow();
GetWindowText(handle, window, 256);
//different
while(1){
HWND handle = GetForegroundWindow();
GetWindowText(handle, window, 256);
if(strcmp(window, new_window)) {
strcpy(new_window,window);
if (strcmp(window, new_window)){
printf("%s Active: \n", new_window);
fflush(stdout);
}
else {
printf("%s Active: \n", window);
fflush(stdout);
}
}
}
}
当我切换窗口(这里是netbeans和firefox)时的输出示例:
CLab - NetBeans IDE 8.2 Active: Active: ZeroDay - Mozilla Firefox Active: Active: CLab - NetBeans IDE 8.2 Active: Active: ZeroDay - Mozilla Firefox Active: Active: CLab - NetBeans IDE 8.2 Active:
我希望输出:
CLab - NetBeans IDE 8.2 Active: ZeroDay - Mozilla Firefox Active: CLab - NetBeans IDE 8.2 Active: ZeroDay - Mozilla Firefox Active: CLab - NetBeans IDE 8.2 Active:
答案 0 :(得分:1)
我真的不知道第二个strcmp(window, new_window)
如何等于 0 ,就像你之前做strcpy
一样。您似乎总是会进入else
声明。
我认为问题在于,在进入第二个if strcmp(window, new_window)
并打印出你想要的内容之后,你会在另一个循环中进行window = ""
所以你打印两次“Active:”。
尝试:
- 将第二个if更改为
if( !strcmp(window, new_window) && strcmp(window, ""))
- 删除其他。
醇>
修改:删除了导致if条件错误的!