【发布时间】:2011-11-05 21:35:16
【问题描述】:
从我需要的 Win shell 执行命令
ShellExecuteA(NULL, "open", "http://stackoverflow.com", NULL, NULL, SW_SHOWNORMAL);
现在我正在学习 Forgers Win32 教程,我正在寻找防止在屏幕上打印垃圾所必需的 A 后缀。我知道这与我的操作系统默认的字符格式有关。如果我可以“规范化”我的操作系统,这可能是最好的解决方案,因为无论我在第二个示例中使用了多少 *A 函数,我都从 RegisterClassExA 返回 NULL(在下面复制了我添加的 *A 后缀的 lllototttsss)
#include <windows.h>
const wchar_t g_szClassName[] = L"myWindowClass";
// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{/*...*/
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, L"Window Registration Failed!", L"Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Step 2: Creating the Window...
return Msg.wParam;
}
我重新访问了上面的代码,使其类似于 Forgers(删除了 *A)并改用 L"" 字符串初始化器,但现在分配 const char g_szClassName[] = L"myWindowClass"; 时出现错误
错误 C2053:“g_szClassName”:宽字符串不匹配
将char 替换为wchar 会生成编译器错误消息,指出wchar 不是可识别的类型。
_编辑_
我认为L"" 字符串说明符是首选解决方案,也是我想要追求的解决方案,抱歉,如果我的问题似乎绕圈子,我愿意接受建议。
刚刚将该代码更新为我现在使用的代码,并删除了我无法访问的内容。
_编辑_
错误码是87,参数无效,所以我猜分配wchar_t参数( wc.lpszClassName = g_szClassName;)毕竟是不正确的... :@(
_编辑_
猜错了?! const LPCTSTR g_szClassName = L"myWindowClass"; 没有修复(或破坏)任何东西。
【问题讨论】:
-
正确示例的所有功劳归功于 Forger(除了我的系统的 fomr wchar_t),我错过了 wc.style 初始化,因为我的 Foxit pdf 阅读器一次只能复制粘贴一个屏幕,我错过了行。