📄 win.c
字号:
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
static BOOL _Win_Enum( _LPWINDATA lpwsChild, BOOL bEnumChild, CALLBACKDATA * lpcd, LPARAM lParam )
{
_LPWINDATA lpwsNext;
BOOL bRetv = TRUE;
while( lpwsChild )
{
if( lpwsChild == NULL )
{
bRetv = FALSE;
SetLastError( ERROR_INVALID_HANDLE );
break;
}
lpwsNext = lpwsChild->lpwsNext;
//LeaveCriticalSection( &csWindow ); //2004-03-31, call by caller
if( lpcd->hProcess )
{
lpcd->dwArg0 = (DWORD)lpwsChild->hThis;
bRetv = Sys_ImplementCallBack4( lpcd, lParam );
}
else // inner call
bRetv = ((WNDENUMPROC)lpcd->lpfn)( lpwsChild->hThis, lParam );
//EnterCriticalSection( &csWindow );//2004-03-31, call by caller
if( bRetv == FALSE )
break;
if( bEnumChild &&
lpwsChild->lpwsChild &&
Win_IsWindow( lpwsChild->hThis ) )
{
bRetv = _Win_Enum( lpwsChild->lpwsChild, bEnumChild, lpcd, lParam );
}
if( bRetv == TRUE )
{ // if return TRUE, contine enumerate
if( lpwsNext )
{
if( Win_IsWindow( lpwsNext->hThis ) )
lpwsChild = lpwsNext;
else // retry
break;//lpws = hwndScreen.lpwsChild;
}
else
{
break;
}
}
else
break;
}
//LeaveCriticalSection( &csWindow );//2004-03-31, call by caller
return bRetv;//TRUE;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
static BOOL DoEnumWindow( _LPWINDATA lpwsChild, BOOL bEnumChild, CALLBACKDATA * lpcd, LPARAM lParam )
{
BOOL bRetv = FALSE;
if( Sys_CaptureException() == EXCEPTION_NO_ERROR )
{
bRetv = _Win_Enum( lpwsChild, bEnumChild, lpcd, lParam );
Sys_ReleaseException();
}
return bRetv;
}
// **************************************************
// 声明:BOOL WINAPI _Win_EnumChildWithProcess( HWND hParent, WNDENUMPROC lpEnumFunc, LPARAM lParam, HANDLE hProcess )
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 该函数只能被内部调用
// 引用:
//
// ************************************************
BOOL WINAPI _Win_EnumChildWithProcess( HWND hParent, WNDENUMPROC lpEnumFunc, LPARAM lParam, HANDLE hProcess )
{
_LPWINDATA lpws = _GetHWNDPtr( hParent );
CALLBACKDATA cb;
cb.hProcess = hProcess;
cb.lpfn = (FARPROC)lpEnumFunc;
//EnterCriticalSection( &csWindow );
LockCSWindow();
if( lpws == NULL )
lpws = hwndScreen.lpwsChild;
else
lpws = lpws->lpwsChild;
DoEnumWindow( lpws, TRUE, &cb, lParam );
//LeaveCriticalSection( &csWindow );
UnlockCSWindow();
return TRUE;
}
// **************************************************
// 声明:BOOL WINAPI _Win_EnumChildInside( HWND hParent, WNDENUMPROC lpEnumFunc, LPARAM lParam )
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 该函数只能被内部调用
// 引用:
//
// ************************************************
BOOL WINAPI _Win_EnumChildInside( HWND hParent, WNDENUMPROC lpEnumFunc, LPARAM lParam )
{
return _Win_EnumChildWithProcess( hParent, lpEnumFunc, lParam, NULL );
}
// **************************************************
// 声明:BOOL WINAPI Win_EnumChild( HWND hParent, WNDENUMPROC lpEnumFunc, LPARAM lParam )
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 该函数只能被系统调用,内部不能调用该函数
// 引用:
//
// ************************************************
BOOL WINAPI Win_EnumChild( HWND hParent, WNDENUMPROC lpEnumFunc, LPARAM lParam )
{
return _Win_EnumChildWithProcess( hParent, lpEnumFunc, lParam, GetCallerProcess() );
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
BOOL WINAPI Win_EnumTask( HTASK hTask, WNDENUMPROC lpEnumFunc, LPARAM lParam )
{
return TRUE;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
BOOL DoEnumTopLevelWindow( WNDENUMPROC lpProc, LPARAM lParam, HANDLE hOwnerProcess )
{
CALLBACKDATA cd;
BOOL bRetv;
cd.hProcess = hOwnerProcess;
cd.lpfn = (FARPROC)lpProc;
//EnterCriticalSection( &csWindow ); //有可能导致死锁
bRetv = DoEnumWindow( hwndScreen.lpwsChild, FALSE, &cd, lParam );
//LeaveCriticalSection( &csWindow );
return bRetv;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 该函数只能被内部调用
// 引用:
//
// ************************************************
BOOL WINAPI _Win_EnumInside( WNDENUMPROC lpEnumFunc, LPARAM lParam )
{
return DoEnumTopLevelWindow( lpEnumFunc, lParam, NULL );
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 该函数只能被系统调用,内部不能调用该函数
// 引用:
//
// ************************************************
BOOL WINAPI Win_Enum( WNDENUMPROC lpEnumFunc, LPARAM lParam )
{
return DoEnumTopLevelWindow( lpEnumFunc, lParam, GetCallerProcess() );
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
BOOL WINAPI Win_Flash( HWND hWnd, BOOL bInvert )
{
return FALSE;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
struct DOFIND{
LPCTSTR lpcClassName;
LPCTSTR lpcWindowName;
HWND hWnd;
};
static BOOL CALLBACK DoFind(HWND hWnd, LPARAM lParam)
{
_LPWINDATA lpws;
struct DOFIND * lpFind = (struct DOFIND *)lParam;
lpws = _GetHWNDPtr( hWnd );
if( lpFind->lpcClassName == NULL ||
stricmp( lpws->lpClass->wc.lpszClassName, lpFind->lpcClassName ) == 0 )
{
if( lpFind->lpcWindowName )
{
DWORD dwOldPerm = SetProcPermissions( ~0 ); //得到对进程的存取权限
if( lpws->lpWinText &&
stricmp( lpws->lpWinText, lpFind->lpcWindowName ) == 0 )
{
SetProcPermissions( dwOldPerm ); //恢复对进程的存取权限
lpFind->hWnd = hWnd;
return FALSE; // stop enmu
}
SetProcPermissions( dwOldPerm ); //恢复对进程的存取权限
}
else
{
lpFind->hWnd = hWnd;
return FALSE; // stop emu
}
}
return TRUE;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
HWND WINAPI Win_Find( LPCTSTR lpcClassName, LPCTSTR lpcWindowName )
{
struct DOFIND findData;
CALLBACKDATA cd;
cd.hProcess = NULL;
cd.lpfn = (FARPROC)DoFind;
findData.hWnd = NULL;
findData.lpcClassName = lpcClassName;
findData.lpcWindowName = lpcWindowName;
//EnterCriticalSection( &csWindow );
LockCSWindow();
DoEnumWindow( hwndScreen.lpwsChild, FALSE, &cd, (LPARAM)&findData );
//LeaveCriticalSection( &csWindow );
UnlockCSWindow();
return findData.hWnd;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
BOOL WINAPI Win_GetClientRect( HWND hWnd, LPRECT lpRect )
{
_LPWINDATA lpws;
lpws = (_LPWINDATA)_GetHWNDPtr( hWnd );
if( lpws )
{
lpRect->left = lpRect->top = 0;
lpRect->right = lpws->rectClient.right - lpws->rectClient.left;
lpRect->bottom = lpws->rectClient.bottom - lpws->rectClient.top;
return TRUE;
}
return FALSE;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
HWND WINAPI Win_GetDesktop( void )
{
return hwndScreen.hThis;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
HWND WINAPI Win_GetFocus( void )
{
LPGWEDATA lpgwe = GetGWEPtr( GetCurrentThreadId() );
if( lpgwe )
return lpgwe->hwndFocus;
return NULL;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
HWND WINAPI Win_GetParent( HWND hWnd )
{
_LPWINDATA lpws = (_LPWINDATA)_GetHWNDPtr( hWnd );
if( lpws )
{
if( lpws->lpwsParent )
return (lpws->lpwsParent->hThis);
}
return NULL;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
HWND WINAPI Win_GetNext( HWND hWnd, UINT wCmd )
{
_LPWINDATA lpwsWndRetv = NULL;
_LPWINDATA lpws = _GetHWNDPtr(hWnd);
if( lpws )
{
//EnterCriticalSection( &csWindow );
LockCSWindow();
if( lpws )
{
if( wCmd == GW_HWNDNEXT )
lpwsWndRetv = lpws->lpwsNext;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -