我有一个WINAPI应用程序,我希望通过将文件拖放到我的应用程序的Icon上来启动它。
主窗口是用
创建的hWnd = CreateWindow("app-name",
"",
WS_OVERLAPPEDWINDOW
| WS_CLIPSIBLINGS
| WS_EX_ACCEPTFILES,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL);
并且有一个WndProc
static LRESULT CALLBACK
WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
DragAcceptFiles(hWnd, TRUE);
// etc (other controls and windows created here)
}
break;
case WM_DROPFILES:
{
char filename[MAX_PATH];
HDROP hDropInfo = (HDROP) wParam;
DragQueryFile(hDropInfo, 0, filename, MAX_PATH);
// etc open file...
}
break;
问题在于,当我将文件从资源管理器拖放到我的程序图标上时,该程序已启动,但我没有收到任何WM_DROPFILES消息。如果我将文件类型配置为"打开"也是如此。我的程序 - 它已经启动但没有收到WM_DROPFILES。
但是一旦程序初始化,我可以将一个文件拖放到它的一些窗口中,然后我按照预期得到WM_DROPFILES消息。
我做错了什么?
感谢您的建议!
BR Alfred
答案 0 :(得分:0)
如上所述,您可以使用lpCmdLine
函数的WinMain
参数:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// remove double quotes from filename with spaces
if( lpCmdLine[0] == '"' ) {
lpCmdLine++;
lpCmdLine[strlen(lpCmdLine)-1] = 0;
}
printf("%s\n",lpCmdLine);
// ...
}