boss key

/////

WORD m_wHotKeyMod = HOTKEYF_ALT;
WORD m_wHotKeyValue = 0x51;
if(m_wHotKeyValue && m_wHotKeyMod)
{
WORD vk_mod,vk_mod2;
vk_mod = m_wHotKeyMod;
vk_mod2 = 0;

if        (vk_mod == HOTKEYF_ALT)
vk_mod2 = MOD_ALT;
else if    (vk_mod == HOTKEYF_CONTROL)
vk_mod2 = MOD_CONTROL;
else if    (vk_mod == HOTKEYF_SHIFT)
vk_mod2 = MOD_SHIFT;
else if    (vk_mod == (HOTKEYF_CONTROL|HOTKEYF_ALT))
vk_mod2 = (MOD_CONTROL|MOD_ALT);
else if    (vk_mod == (HOTKEYF_CONTROL|HOTKEYF_SHIFT))
vk_mod2 = (MOD_CONTROL|MOD_SHIFT);
else if    (vk_mod == (HOTKEYF_ALT|HOTKEYF_SHIFT))
vk_mod2 = (MOD_ALT|MOD_SHIFT);
else if    (vk_mod == (HOTKEYF_CONTROL|HOTKEYF_ALT|HOTKEYF_SHIFT))
vk_mod2 = (MOD_CONTROL|MOD_ALT|MOD_SHIFT);
UnregisterHotKey(GetSafeHwnd(),3079);
if(0 == RegisterHotKey(GetSafeHwnd(),3079,vk_mod2,m_wHotKeyValue))
{
TRACE("%d\n",GetLastError());
}
}

//////////////////

LRESULT CTestBossDlg::OnHotKey(WPARAM/* wParam*/,LPARAM/* lParam*/)
{
m_boss?BossHideWindow():BossShowWindow();
m_boss = !m_boss;
return NULL;
}

list<HWND> lstStoringwnd;//global

bool ReadConfigFile(string szFileName,list<string>& s)
{
try{
string fullPath = szFileName;
TiXmlDocument document;
CXmlUtil::CreateDocumentFromFile(document, szFileName.c_str());  //从文件获取信息

TiXmlElement * rootElement = CXmlUtil::GetRootElement(document);
if (rootElement){
list<TiXmlElement* > lstApp;
if (CXmlUtil::GetChildElementsByTagName(rootElement,"app", lstApp)){
for (list<TiXmlElement * >::iterator p = lstApp.begin( );
p != lstApp.end( ); ++p) {
string curStr;
if (*p){
if (CXmlUtil::GetElementValue(*p,curStr)){
String2Lower(curStr);
s.push_back(curStr);
}
}
}
}
}
}
catch (string& e){
ASSERT(0);
return false;
}
return true;
}

void BossShowWindow()
{
for (list<HWND>::iterator p = lstStoringwnd.begin( );
p != lstStoringwnd.end( ); ++p){
::ShowWindow(*p,SW_SHOW);
}
lstStoringwnd.clear();
}

#include <Shlwapi.h>
void BossHideWindow()
{
list<string> s;
ReadConfigFile("test.xml",s);

typedef void (__stdcall *fun)(HWND,char*);
fun fun1 = NULL;
TCHAR* _dllname = _T("hwnd2name.dll");
ASSERT(PathFileExists(_dllname));
HMODULE _ = LoadLibrary(_dllname);
if(_)
fun1 = (fun)GetProcAddress(_,"GetProcessNameFromWnd");
else{
int n = GetLastError();
TRACE("%d",n);
ASSERT(0);
}

list<HWND> lstwnd;

FindFromHwnd(lstwnd);
for (list<HWND>::iterator p = lstwnd.begin( );
p != lstwnd.end( ); ++p) {
if(fun1){
char path[_MAX_PATH + 1];
fun1(*p,path);
string strpath(path);

//strpath = CStringUtil::CString2String(EraseSqual(CStringUtil::Std2CString(strpath)));
strpath = EraseSqual(strpath);
String2Lower(strpath);
if(IsInList(strpath,s)){
if(!IsInList(*p,lstStoringwnd)){
lstStoringwnd.push_back(*p);
::ShowWindow(*p,SW_HIDE);
}
}
}
}
}

CString  GetAppPath()
{
TCHAR _1[MAX_PATH];
GetCurrentDirectory(MAX_PATH,_1);
return (CString)_1;
}

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
//TCHAR szClassName[100];
list<HWND>* _ = (list<HWND>*)lParam;
if (::IsWindowVisible(hwnd)){
(*_).push_back(hwnd);
}
return TRUE;        // 继续枚举子窗口
}

void FindFromHwnd(list<HWND>& _)
{
::EnumWindows(EnumChildProc, (LPARAM)&_ );
}

///download

http://cid-cb7a152ebdc9f64e.office.live.com/embedicon.aspx/.Public/newTestBoss.zip

  1. No trackbacks yet.

Leave a comment