::GetSystemMetrics(SM_CXSCREEN);
获取屏幕高
::GetSystemMetrics(SM_CYSCREEN);
使窗口随鼠标点击拖动
void OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point);
。。。。。。
SendMessage(WM_SYSCOMMAND, 0xF012, 0);
。。。。。。
}
去掉标题栏和系统菜单
::SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TRUE, NULL, 0);
SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE) & (~(WS_CAPTION | WS_BORDER)));
使窗口透明
LONG wndStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
if ((wndStyle & WS_EX_LAYERED) != WS_EX_LAYERED)
SetWindowLong(hwnd, GWL_EXSTYLE, wndStyle ^ WS_EX_LAYERED);
根据窗口属性更新窗口
void UpdateWndDisplay(CWnd *pWnd, CDC *pDesDC, CDC *pSrcDC)
{
if (pWnd == NULL || pDesDC == NULL || pSrcDC == NULL)
return;
CRect rect;
pWnd->GetWindowRect(&rect);
if ((GetWindowLong(pWnd->m_hWnd, GWL_EXSTYLE) & WS_EX_LAYERED) == WS_EX_LAYERED)
{
BLENDFUNCTION blend;
blend.BlendOp = 0;
blend.BlendFlags= 0;
blend.AlphaFormat= 1;
blend.SourceConstantAlpha = 255;
SIZE szWnd = {rect.Width(), rect.Height()};
POINT ptSrcPos = {0, 0};
POINT ptWndPos = {rect.left, rect.top};
pWnd->UpdateLayeredWindow(pDesDC, &ptWndPos, &szWnd, pSrcDC,
&ptSrcPos, 0, &blend, ULW_ALPHA);
}
else
{
pDesDC->BitBlt(0, 0, rect.Width(), rect.Height(), pSrcDC, 0, 0, SRCCOPY);
}
}
显示鼠标
void DoShowCursor(BOOL bShow)
{
static int count = 0;
if (bShow)
{
while(count < 0)
{
count = ShowCursor(TRUE);
}
}
else
{
while(count >= 0)
{
count = ShowCursor(FALSE);
}
}
}
屏幕键盘
void ScreenKeyboard()
{
HINSTANCE hlibrary;
typedef BOOL (__stdcall *f_Wow64DisableWow64FsRedirection)(LPVOID);
hlibrary = ::LoadLibrary(_T("Kernel32.dll"));
if (hlibrary != NULL)
{
f_Wow64DisableWow64FsRedirection p =
(f_Wow64DisableWow64FsRedirection)GetProcAddress(hlibrary, "Wow64DisableWow64FsRedirection");
typedef BOOL (__stdcall *f_Wow64RevertWow64FsRedirection)(LPVOID);
f_Wow64RevertWow64FsRedirection p1 =
(f_Wow64DisableWow64FsRedirection)GetProcAddress(hlibrary, "Wow64RevertWow64FsRedirection");
if(p && p1)
{
PVOID oldValue = NULL;
p(&oldValue);
ShellExecute(NULL, _T("open"), _T("osk.exe"), NULL, NULL, SW_SHOWNORMAL);
p1(oldValue);
}
else
{
ShellExecute(NULL, _T("open"), _T("osk.exe"), NULL, NULL, SW_SHOWNORMAL);
}
::FreeLibrary(hlibrary);
}
}
关闭进程
void KillProcess(CString strName)
{
DWORD aps[1024], cbNeeded, cbNeeded2, i;
TCHAR buffer[256];
BOOL killed;
HANDLE hProcess;
HMODULE hModule;
killed = FALSE;
EnumProcessesXP(aps, sizeof(aps), &cbNeeded);
for(i = 0; i < cbNeeded / sizeof(DWORD); ++i)
{
if(!(hProcess = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, FALSE, aps[i])))
{
continue;
}
if(!EnumProcessModulesXP(hProcess, &hModule, sizeof(hModule), &cbNeeded2))
continue;
GetModuleBaseNameXP(hProcess, hModule, buffer, 256);
if(lstrcmpi(buffer, strName.GetBuffer(0)) == 0)
{
if(TerminateProcess(hProcess, 0))
killed = TRUE;
CloseHandle(hProcess);
break;
}
CloseHandle(hProcess);
}
}