VS2010中FindWindow()函数问题

来源:互联网 发布:js 引用怎么加时间戳 编辑:程序博客网 时间:2024/05/16 12:09

在练习Windows API 时,FindWindow函数时肯定会用到的,写一个简单的函数大家可以运行一下

#include<windows.h>                          //API函数的头文件
int main()
{
HWND wnd; //定义一个窗口句柄变量,用以存储找到的窗口句柄
wnd=FindWindow(NULL,"轱辘.txt - 记事本"); //获得窗口名为"无标题.txt - 记事本"的窗口句柄
SendMessage(wnd,WM_CLOSE,0,0); //调用SendMessage函数,发送一个WM_CLOSE(关闭)消息给wnd窗口句柄。
return 0;
}
当然你要保证,你有一个名字叫做"轱辘.txt - 记事本"的程序正在运行,此处要注意了“-”和".txt"以及“记事本”之间是有空格的偶。
当你点击运行时,会发现无法运行报错: error C2664: “FindWindowW”: 不能将参数 2 从“const char [22]”转换为“LPCWSTR”1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
这是因为vs用的是Unicode,需要在
"轱辘.txt - 记事本"前加上L或者_T才可以的,因为
"轱辘.txt - 记事本"是char*类型,而现在需要LPCWSTR类型,当然也可以用函数来转换:这里有链接(高人到处都是)
http://blog.csdn.net/zhouxuguang236/article/details/8761497
至于LPCWSTR是什么,我做一下百度得了(自己也学习一下):
LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。
该类型是如下声明的:
typedef const wchar_t* LPCWSTR;
因为在VS2005以后,编码方式默认为Unicode,部分函数在使用时默认调用Unicode方式(函数名+W,exp:MessageBox+W=MessageBoxW),而非ASNI方式(函数名+A,exp:MessageBox+A=MessageBoxA)。

0 0
原创粉丝点击