vs2010下wh=::FindWindow(NULL,"360任务管理器");

时间:2021-09-16 22:28:56
HWND wh;
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,"360任务管理器");  
.
.
.
}

1>d:\documents\visual studio 2010\projects\llk\llk\llkdlg.cpp(172): error C2664: “FindWindowW”: 不能将参数 2 从“const char [22]”转换为“LPCWSTR”

在C++6.0下可以的啊,换成vs2010就不可以。这是why什么呢?

12 个解决方案

#1



wh=::FindWindow(NULL,_T("360任务管理器"));  

因为你的工程是用UNICODE编码了

#2


vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  

#3


引用 1 楼 zhuobattle 的回复:

wh=::FindWindow(NULL,_T("360任务管理器"));  

因为你的工程是用UNICODE编码了

6.0好用还是2010好用?

#4


引用 2 楼 CKnightx 的回复:
vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  


6.0好用还是2010好用?

#5


引用 3 楼 woyaodubo 的回复:
Quote: 引用 1 楼 zhuobattle 的回复:


wh=::FindWindow(NULL,_T("360任务管理器"));  

因为你的工程是用UNICODE编码了

6.0好用还是2010好用?

习惯了肯定是vs2010好用。功能更加强大,呵呵

#6


引用 2 楼 CKnightx 的回复:
vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

#7


引用 6 楼 woyaodubo 的回复:
Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~

#8


引用 7 楼 vipcxj 的回复:
Quote: 引用 6 楼 woyaodubo 的回复:

Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~



因为多个地方要用到"xxx",所以想定义一个,以后改起来也方便,不用多处修改。

#9


引用 8 楼 woyaodubo 的回复:
Quote: 引用 7 楼 vipcxj 的回复:

Quote: 引用 6 楼 woyaodubo 的回复:

Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~



因为多个地方要用到"xxx",所以想定义一个,以后改起来也方便,不用多处修改。

还有一楼用的_T也远比L好,_T是根据你的项目是否使用Unicode来决定到底是L还是没有L,你一股脑的用L,一旦什么时候你项目又变成多字节了,你就杯具了。你不能因为看到_T前面有个_,就觉得麻烦,人家就是这么设定的,看起来不好看,不代表功能就烂

#10


引用 9 楼 vipcxj 的回复:
Quote: 引用 8 楼 woyaodubo 的回复:

Quote: 引用 7 楼 vipcxj 的回复:

Quote: 引用 6 楼 woyaodubo 的回复:

Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~



因为多个地方要用到"xxx",所以想定义一个,以后改起来也方便,不用多处修改。

还有一楼用的_T也远比L好,_T是根据你的项目是否使用Unicode来决定到底是L还是没有L,你一股脑的用L,一旦什么时候你项目又变成多字节了,你就杯具了。你不能因为看到_T前面有个_,就觉得麻烦,人家就是这么设定的,看起来不好看,不代表功能就烂


不怕的,现在才开始学,等熟练一点再弄吧,我把Unicode编码的设置改成未设置了,暂时不存在转换的问题,依旧直接用PCHAR定义字符串。

#11


引用 6 楼 woyaodubo 的回复:
Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}


帅哥,,我对wh=::FindWindow(NULL,L(taskCaption)); 这句代码很无奈。

首先,L"xxx"是意思,是用Unicode对字符串“xxx”进行编码存储。而不是L和变量连用。

_T("xxx") 的结果,在Unicode字符环境下,是和L“xxx”是一样的结果。
你可以去看看_T的定义。

这不是照猫画虎,还是先把基础知识看看,切勿浮沙筑高楼

#12


引用 4 楼 woyaodubo 的回复:
Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  


6.0好用还是2010好用?


用什么无所谓,只是工具而已。

#1



wh=::FindWindow(NULL,_T("360任务管理器"));  

因为你的工程是用UNICODE编码了

#2


vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  

#3


引用 1 楼 zhuobattle 的回复:

wh=::FindWindow(NULL,_T("360任务管理器"));  

因为你的工程是用UNICODE编码了

6.0好用还是2010好用?

#4


引用 2 楼 CKnightx 的回复:
vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  


6.0好用还是2010好用?

#5


引用 3 楼 woyaodubo 的回复:
Quote: 引用 1 楼 zhuobattle 的回复:


wh=::FindWindow(NULL,_T("360任务管理器"));  

因为你的工程是用UNICODE编码了

6.0好用还是2010好用?

习惯了肯定是vs2010好用。功能更加强大,呵呵

#6


引用 2 楼 CKnightx 的回复:
vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

#7


引用 6 楼 woyaodubo 的回复:
Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~

#8


引用 7 楼 vipcxj 的回复:
Quote: 引用 6 楼 woyaodubo 的回复:

Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~



因为多个地方要用到"xxx",所以想定义一个,以后改起来也方便,不用多处修改。

#9


引用 8 楼 woyaodubo 的回复:
Quote: 引用 7 楼 vipcxj 的回复:

Quote: 引用 6 楼 woyaodubo 的回复:

Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~



因为多个地方要用到"xxx",所以想定义一个,以后改起来也方便,不用多处修改。

还有一楼用的_T也远比L好,_T是根据你的项目是否使用Unicode来决定到底是L还是没有L,你一股脑的用L,一旦什么时候你项目又变成多字节了,你就杯具了。你不能因为看到_T前面有个_,就觉得麻烦,人家就是这么设定的,看起来不好看,不代表功能就烂

#10


引用 9 楼 vipcxj 的回复:
Quote: 引用 8 楼 woyaodubo 的回复:

Quote: 引用 7 楼 vipcxj 的回复:

Quote: 引用 6 楼 woyaodubo 的回复:

Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}

因为L用错了,L只能和"XXX"搭配,1L已经帮你把现成的都写出来了,你何必要自己搞创新呢~



因为多个地方要用到"xxx",所以想定义一个,以后改起来也方便,不用多处修改。

还有一楼用的_T也远比L好,_T是根据你的项目是否使用Unicode来决定到底是L还是没有L,你一股脑的用L,一旦什么时候你项目又变成多字节了,你就杯具了。你不能因为看到_T前面有个_,就觉得麻烦,人家就是这么设定的,看起来不好看,不代表功能就烂


不怕的,现在才开始学,等熟练一点再弄吧,我把Unicode编码的设置改成未设置了,暂时不存在转换的问题,依旧直接用PCHAR定义字符串。

#11


引用 6 楼 woyaodubo 的回复:
Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  



为什么这样写又不行了呢?
HWND wh;
CONST PCHAR taskCaption="360任务管理器";
void CLlkDlg::OnStartOporate() {
   wh=::FindWindow(NULL,L(taskCaption));  
.
.
.
}


帅哥,,我对wh=::FindWindow(NULL,L(taskCaption)); 这句代码很无奈。

首先,L"xxx"是意思,是用Unicode对字符串“xxx”进行编码存储。而不是L和变量连用。

_T("xxx") 的结果,在Unicode字符环境下,是和L“xxx”是一样的结果。
你可以去看看_T的定义。

这不是照猫画虎,还是先把基础知识看看,切勿浮沙筑高楼

#12


引用 4 楼 woyaodubo 的回复:
Quote: 引用 2 楼 CKnightx 的回复:

vs现在默认是Unicode编码了。

现在需要用 wh=::FindWindow(NULL, L"360任务管理器");  


6.0好用还是2010好用?


用什么无所谓,只是工具而已。