GetModuleFileName替换GetCurrentDirectory打不开文件了?求问,谢谢

问题描述

GetModuleFileName替换GetCurrentDirectory打不开文件了?求问,谢谢

#include
#include //_T()

#define ID_LIST 1
#define ID_TEXT 2
#define MAXREAD 8192
#define DIRATTR (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM |
DDL_DIRECTORY | DDL_ARCHIVE | DDL_DRIVES)

#define DTFLAGS (DT_WORDBREAK | DT_EXPANDTABS | DT_NOCLIP | DT_NOPREFIX)
WNDPROC OldList;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ListProc(HWND, UINT, WPARAM, LPARAM);

RECT rect;
TCHAR szBuffer[MAX_PATH + 1];

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevINstance, LPSTR lPCmdLine, int nCmdShow)
{
static TCHAR szAppName[] = _T("head");
WNDCLASSEX WindowClass;
HWND hWnd;
MSG msg;

WindowClass.cbSize = sizeof(WNDCLASSEX);
WindowClass.style = CS_HREDRAW | CS_VREDRAW;
WindowClass.lpfnWndProc = WndProc;
WindowClass.cbClsExtra = 0;
WindowClass.cbWndExtra = 0;
WindowClass.hInstance = hInstance;
WindowClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
WindowClass.hCursor = LoadCursor(nullptr, IDC_ARROW);
WindowClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); //防止程序运行时,系统颜色改变,出现空值
WindowClass.lpszMenuName = nullptr;
WindowClass.lpszClassName = szAppName;
WindowClass.hIconSm = nullptr;

if (!RegisterClassEx(&WindowClass))
{
    MessageBoxEx(NULL, _T("This program requires windowsNT!"), szAppName,
        MB_ICONERROR, LANG_CHINESE_SIMPLIFIED);
    return 0;
}

hWnd = CreateWindowEx(
    WS_EX_STATICEDGE,//WS_EX_OVERLAPPEDWINDOW,
    szAppName,
    _T("head"),
    WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,   //
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    nullptr,
    nullptr,
    hInstance,
    nullptr
);

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

while (GetMessage(&msg, nullptr, 0, 0) == TRUE)
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

int             i, cxChar, cyChar;
HANDLE          hFile;
TCHAR           szFile[MAX_PATH + 1];
BYTE            buffer[MAXREAD];
static BOOL     bValidFile;
static HWND     hwndList, hwndText;
HDC             hdc;

PAINTSTRUCT     ps;

switch (message)
{

case WM_CREATE:

    cxChar = LOWORD(GetDialogBaseUnits());
    cyChar = HIWORD(GetDialogBaseUnits());
    rect.left = 20 * cxChar;
    rect.top = 3 * cyChar;

    hwndList = CreateWindowEx(
        WS_EX_STATICEDGE,//WS_EX_OVERLAPPEDWINDOW,
        _T("listbox"),
        nullptr,
        WS_CHILDWINDOW | WS_VISIBLE | LBS_STANDARD,         //LBS_STANDARD由LBS_NOTIFY、LBS_SORT、WS_VSCROLL、WS_BORDER组合
        cxChar,                                             //LBS_NOTIFY使父窗口收到消息
        cyChar * 3,
        cxChar * 13 + GetSystemMetrics(SM_CXVSCROLL),
        cyChar * 10,
        hwnd,
        (HMENU)ID_LIST,
        (HINSTANCE)GetWindowLongPtr(hwnd, GWL_HINSTANCE),  //((LPCREATESTRUCT)lParam)->hInstance,
        nullptr
    );

    GetModuleFileNameW(NULL, (LPWSTR)szBuffer,MAX_PATH + 1);               //Load current directry to buffer

// GetCurrentDirectory(MAX_PATH + 1, szBuffer);

    hwndText = CreateWindowEx(
        WS_EX_STATICEDGE,//WS_EX_OVERLAPPEDWINDOW,
        _T("static"),
        szBuffer,
        WS_CHILDWINDOW | WS_VISIBLE | SS_LEFT,
        cxChar,
        cyChar,
        cxChar * MAX_PATH,
        cyChar,
        hwnd,
        (HMENU) ID_TEXT,
        (HINSTANCE)GetWindowLongPtr(hwnd, GWL_HINSTANCE),  //((LPCREATESTRUCT)lParam)->hInstance,
        nullptr
    );

    OldList = (WNDPROC)SetWindowLongPtr(hwndList,GWL_WNDPROC,(LPARAM) ListProc);

    SendMessage(hwndList, LB_DIR, DIRATTR, (LPARAM) _T("*.*"));
    return 0;

case WM_SIZE:

    rect.right = LOWORD(lParam);
    rect.bottom = HIWORD(lParam);
    return 0;

case WM_SETFOCUS:
    SetFocus(hwndList);
    return 0;

case WM_COMMAND:
    if (LOWORD(wParam) == ID_LIST && HIWORD(wParam) == LBN_DBLCLK)  //Scan ID和通知码
    {
        if (LB_ERR == (i = SendMessage(hwndList, LB_GETCURSEL, 0, 0)))
            break;

        SendMessage(hwndList, LB_GETTEXT, i, (LPARAM) szBuffer);

        if (INVALID_HANDLE_VALUE != (hFile = CreateFile(szBuffer,GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0,nullptr)))
        {
            CloseHandle(hFile);
            bValidFile = TRUE;
            lstrcpy(szFile, szBuffer);

// GetCurrentDirectory(MAX_PATH + 1, szBuffer);

            GetModuleFileNameW(NULL, (LPWSTR)szBuffer, MAX_PATH + 1);

            if (szBuffer[lstrlen(szBuffer) - 1] != '')            //添加在主目录和子目录之间
                lstrcat(szBuffer, _T(""));
            SetWindowText(hwndText,lstrcat(szBuffer, szFile));
        }
        else
        {
            bValidFile = FALSE;
            szBuffer[lstrlen(szBuffer) - 1] = '';

            if (!SetCurrentDirectory(szBuffer + 1))   ?/
            {
                szBuffer[3] = ':';
                szBuffer[4] = '';
                SetCurrentDirectory(szBuffer + 2);
            }

            GetModuleFileNameW(NULL,(LPWSTR)szBuffer, MAX_PATH + 1);

// GetCurrentDirectory(MAX_PATH + 1, szBuffer);

            SetWindowText(hwndText, szBuffer);
            SendMessage(hwndList, LB_RESETCONTENT, 0 ,0);
            SendMessage(hwndList, LB_DIR, DIRATTR, (LPARAM)_T("*.*"));
        }
        InvalidateRect(hwnd, nullptr, TRUE);
    }
    return 0;

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);
if (!bValidFile)
{
DrawText(hdc, _T("---测验-123--"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
break;
}

    if (INVALID_HANDLE_VALUE == (hFile = CreateFile(szBuffer,GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)))
    {
        DrawTextW(hdc, (LPCWSTR)buffer, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        bValidFile = FALSE;
        break;
    }
    ReadFile(hFile, buffer, MAXREAD, (LPDWORD)(&i), NULL);
    CloseHandle(hFile);

    SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
    SetTextColor(hdc, GetSysColor(COLOR_BTNTEXT));
    SetBkColor(hdc, GetSysColor(COLOR_BTNFACE));

    DrawTextA(hdc< (LPCSTR)buffer, i, &rect, DTFLAGS);

// DT_WORDBREAK------- Lines are automatically broken between words if a word extends past the edge of the rectangle
// DT_EXPANDTABS------Expands tab characters. The default number of characters per tab is eight
// DT_NOCLIP----------Draws without clipping. DrawTextEx is somewhat faster when DT_NOCLIP is used.
// DT_NOPREFIX--------single line

// DrawTextEx(hdc, (LPWSTR)buffer, i, &rect, DTFLAGS, NULL);
EndPaint(hwnd, &ps);
return 0;

case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);

}

LRESULT CALLBACK ListProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_KEYDOWN && wParam == VK_RETURN)
SendMessage(GetParent(hwnd), WM_COMMAND, MAKELONG(1, LBN_DBLCLK), (LPARAM) hwnd);

return CallWindowProc(OldList, hwnd, message, wParam, lParam);

}

解决方案

直接对比两者返回的路径是否相同

解决方案二:

android 项目文件打不开的问题

时间: 2024-08-03 19:25:05

GetModuleFileName替换GetCurrentDirectory打不开文件了?求问,谢谢的相关文章

文件名称或者文件夹名称有空格的话,超链接就打不开文件

问题描述 原先有人问过同样的问题,我不知道详解,问题就是"在一个数据库中,检索出的文件路径是用超链接的形式显示出来的.如果文件名称或者文件夹名称有空格的话,超链接就打不开文件."求详解.先谢谢各位高手了! 解决方案 解决方案二:既然有空的话你可以不输出或者指定能找到文件的路径解决方案三:显示出的路径是经过转换的代码路径呀

perl-为什么打不开文件?。。

问题描述 为什么打不开文件?.. 要打开的txt文件和C++源文件放在同一个文件夹里,用相对路径打开的话应该只要输入文件名就行了,以前成功过,但现在不行了.另外用绝对路径也都打不开.请问有哪些可能的原因? 解决方案 会不会是文件名大小写错了?或者文件的扩展名被隐藏了,其实是text.txt.txt.还有就是txt应该放到生成的exe同一个目录才能像你这样用. 希望能帮到你. 解决方案二: ifstream in(""Text.txt""ios::in); 解决方案三

Win8如何设置鼠标点击打开文件夹的方法

  大家都知道,想要打开电脑中的文件只需要双击打开就可以了,很多人都觉得这是个很正常的事情,没有什么异样,但是不知道大家有没有发现,如果想要打开手机中的应用,仅需要单击就可以打开了,这就是不同之处.但是有没有什么方法可以让大家打开电脑文件的时候也只需要单击就可以呢?这样是不是比双击更加的方便呢?看似是个无关紧要的事情,但是还是有很多人会想要试试这样的方法是否可以实现.下面小编教大家Win8设置鼠标单击打开文件夹的技巧. Win8设置鼠标点击打开文件夹的方法如下 一.打开win8纯净版的桌面,然后

怎么在csdn设置头像 一直打不开文件 就是打不开文件 怎么打斗打不开

问题描述 怎么在csdn设置头像 一直打不开文件 就是打不开文件 怎么打斗打不开 一直打不开文件 就是打不开文件 怎么打斗打不开一直打不开文件 就是打不开文件 怎么打斗打不开一直打不开文件 就是打不开文件 怎么打斗打不开 解决方案 ue打不开文件怎么回事?如果打不开chm文件chm文件打不开 解决方案二: 要使IE浏览器先制作一张像素低一点的图像以便上传. 解决方案三: 问答底部,找一下客服问问

winrar密码-Winrar密码忘记找不开文件了

问题描述 Winrar密码忘记找不开文件了 有一个文件10年左右的,被用WINRAR压缩后设了密码,现在找不开了,用过这里的一个密码清除工具还是不行,现在来看看有没有大.侠能解决的 解决方案 如果是winrar 2.9或者更高版本(2001年以后),那么很不幸,没有什么"密码清除工具".winrar使用aes256算法对数据加密,目前来说,在数学上没有任何解密的可能. 你能做的只能是猜测.虽然有这样的软件,但是如果密码长度超过8位,或者6位但是包含特殊符号,基本没有找回的希望. 解决方

C#编程调试“报错Microsoft Jet 数据库库引擎打不开文件”

问题描述 C#编程调试"报错Microsoft Jet 数据库库引擎打不开文件" 5C 如题所示,用C#写了个程序,设计了一个从数据库中读取的表格,点一个按钮会下载成excel格式的文件,点按钮后报这个错误,系统是Windowsserver2003,数据库是oracle,office是2003的,之前在一个XP系统下调试没问题,后来在2003系统电脑上重新装了这些程序后就报错了,跪求大神们解答 解决方案 检查下是不是权限的问题,给你读写excel的文件夹分配everyone用户全部的权

用户-如何替换正在被下载的文件

问题描述 如何替换正在被下载的文件 问个比较糊涂的问题,麻烦各位大大指教!!我这服务器上有个200多M的文件需要提供给用户下载,如果现在有用户正在下载我的文件,而我删除了服务器中的文件,会怎样呢?如果我在这时替换了服务器上的文件,会不会导致正在下载的用户最终下载下来的文件出错? 解决方案 囧,你确定你能删除的了?答案是不会. 解决方案二: 没事,因为web服务器已经读取到内存. 但是,如果网络连接中断,用户再次试图下载,可能就出错了.

谁帮我分析下这些代码,我想替换链接地址怎么找文件位置,我是菜鸟,求帮助

问题描述 谁帮我分析下这些代码,我想替换链接地址怎么找文件位置,我是菜鸟,求帮助http://www.zyp369.com/member/login.php?gourl=http://www.zyp369.com/ask/这个页面,导航栏的地址,我想换掉,从首页进去点击导航,地址已经换好了,但是进入个人中心后,上面的地址还是不对,求帮忙

解决win10系统打不开文件夹闪退现象问题

打不开文件夹闪退可能是一些补丁或应用程序导致了我们排除一下最近安装了什么软件导致的问题了. 1.我们只要在电脑开始菜单中进入到"控制面板"之后再点击"卸载程序"选项,效果如下; 2.点击"查看已安装的更新"先,如下所示然后删除最近安装的应用了; 3.卸载最近安装的更新,然后重启电脑即可. 我们只要把它卸载之后然后再试一下是不是打开文件夹闪退问题就已经解决了,当然如果还是不行重启电脑看看.