Windows2003-3790/windows/appcompat/shims/specific/ispeed.cpp

105 lines
2.2 KiB
C++
Raw Permalink Normal View History

2001-01-01 00:00:00 +01:00
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
ISpeed.cpp
Abstract:
The app doesn't handle directory/file names with spaces.
Notes:
This is an app specific shim.
History:
11/15/2000 maonis Created
--*/
#include "precomp.h"
#include "strsafe.h"
IMPLEMENT_SHIM_BEGIN(ISpeed)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(GetDlgItemTextA)
APIHOOK_ENUM_END
/*++
After we call GetDlgItemTextA we convert the long path name to the short path name.
--*/
UINT
APIHOOK(GetDlgItemTextA)(
HWND hDlg,
int nIDDlgItem,
LPSTR lpString,
int nMaxCount
)
{
UINT uiRet = ORIGINAL_API(GetDlgItemTextA)(hDlg, nIDDlgItem, lpString, nMaxCount);
if (uiRet)
{
CSTRING_TRY
{
// Check if the title is "iSpeed"
CString csTitle;
WCHAR * lpwszBuffer = csTitle.GetBuffer(7);
int nTitle = GetWindowTextW(hDlg, lpwszBuffer, 7);
csTitle.ReleaseBuffer(nTitle);
if (csTitle.CompareNoCase(L"iSpeed") == 0)
{
int nIndexSpace = csTitle.Find(L" ");
if (nIndexSpace >= 0)
{
CString csString(lpString);
// If the directory doesn't already exist, we create it so we can get the short path name.
if ((GetFileAttributesW(csString) == -1) && (GetLastError() == ERROR_FILE_NOT_FOUND))
{
if (!CreateDirectoryW(csString, NULL))
{
return 0;
}
}
csString.GetShortPathNameW();
StringCchCopyA(lpString,nMaxCount, csString.GetAnsi());
StringCchLengthA(lpString, nMaxCount, &uiRet);
}
}
}
CSTRING_CATCH
{
// Do Nothing
}
}
return uiRet;
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(USER32.DLL, GetDlgItemTextA)
HOOK_END
IMPLEMENT_SHIM_END