Exemplo n.º 1
0
unsigned __stdcall HideWindowProc(void * pParam)
{
	//dbview(L"enter HideWindowProc........................................");
	DWORD dwErr = 0;
	BOOL bRet = FALSE;
	NOTIFYICONDATA nid;
	
	
	WndAndHandle * pWH = (WndAndHandle*)pParam;
	

	wchar_t cDbgStr[256] = L"";
	wcscpy(cDbgStr,L"enter HideWindowProc......");
	wcscat(cDbgStr,pWH->cProcessName);
	wcscat(cDbgStr,L"..................................");

	dbview(cDbgStr);


	ShowWindow(pWH->hWnd,SW_HIDE);
	if(pWH->iHasTrayIcon == 1)
	{
		memset(&nid,0,sizeof(NOTIFYICONDATA));
		nid.cbSize = sizeof(NOTIFYICONDATA);
		nid.hWnd = pWH->trayicon.hwnd;
		nid.uID = pWH->trayicon.uID;
		{
			int iCommandId = pWH->iCommandId;
			HWND g_TrayWnd = FindTrayToolbarWindow();
			SendMessageW(g_TrayWnd,TB_HIDEBUTTON,WPARAM(iCommandId),
			(LPARAM)MAKELONG(TRUE,0));
			NOTIFYICONDATA nid2;
			memset(&nid2,0,sizeof(nid2));
			nid2.cbSize=sizeof(nid2);
			nid2.hWnd=nid.hWnd;
			nid2.uID=nid.uID;
			nid2.uFlags=NIF_STATE;
			nid2.dwState=NIS_HIDDEN;
			::SendMessage(g_TrayWnd,WM_SETREDRAW,(WPARAM)FALSE,0);
			Shell_NotifyIcon(NIM_MODIFY,&nid2);
			SendMessage(g_TrayWnd,WM_SETREDRAW,(WPARAM)TRUE,0);
		}
	}
  
	CloseHandle(g_arrayHide[pWH->iLink]);
	g_arrayHide[pWH->iLink] = NULL;


	memset(cDbgStr,0,256*sizeof(wchar_t));
	wcscpy(cDbgStr,L"leave HideWindowProc......");
	wcscat(cDbgStr,pWH->cProcessName);
	wcscat(cDbgStr,L"..................................");
	
	dbview(cDbgStr);
	return 100;
}
Exemplo n.º 2
0
void _UnflipFromTray(UINT i, UINT uCmd) {

	if (MyIsHungAppWindow(g_pWti[i].hwnd))
		return;

	DeleteTrayIcon(g_hwndMain, g_pWti[i].uID);
	if (IsWindow(g_pWti[i].hwnd)) {

		RECT rcTray = { 0 };

		if (g_pWti[i].fAnimate && uCmd == SC_RESTORE) {

			ANIMATIONINFO ai;
			ai.cbSize = sizeof(ANIMATIONINFO);
			ai.iMinAnimate = FALSE;
			SystemParametersInfo(SPI_GETANIMATION, sizeof(ANIMATIONINFO), &ai, FALSE);

			if (ai.iMinAnimate) {
				HWND hwndTray = FindTrayToolbarWindow();
				if (hwndTray) {
					GetWindowRect(hwndTray, &rcTray);
					rcTray.bottom = rcTray.top;
					rcTray.right = rcTray.left;
#pragma FIX_LATER(tray animation <-> taskbar pos)

					KillTimer(g_hwndMain, TIMER_SETANIMATION);
					ai.iMinAnimate = 0;
					SystemParametersInfo(SPI_SETANIMATION, sizeof(ANIMATIONINFO), &ai, FALSE);
					SetTimer(g_hwndMain, TIMER_SETANIMATION, 500, NULL);

					DrawAnimatedRects(g_hwndMain, IDANI_CAPTION, &rcTray, &g_pWti[i].rcWnd);
				}
			}
		}

		//ShowWindow(g_pWti[i].hwnd, SW_SHOW);
		SetWindowPos(g_pWti[i].hwnd, NULL, 0, 0, 0, 0, 
			SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
		if (uCmd == SC_RESTORE || uCmd == SC_CLOSE) {
			//ShowWindow(g_pWti[i].hwnd, SW_RESTORE);
			MySwitchToThisWindow(g_pWti[i].hwnd);
			if (uCmd == SC_CLOSE)
				PostMessage(g_pWti[i].hwnd, WM_SYSCOMMAND, SC_CLOSE, 0);
		}
	}
	if (i - 1 != g_cWti) {
		MoveMemory(g_pWti + i,  g_pWti + i + 1, 
			(g_cWti - i - 1) * sizeof(WNDTRAYINFO));
	}
	g_pWti[--g_cWti].hwnd = NULL;
}
Exemplo n.º 3
0
int GetProcessTrayIcon(DWORD lPID,TBBUTTON * pTB,TRAYDATA * pTrayData)
{
	HWND hTrayWnd = FindTrayToolbarWindow();

	DWORD dwPID = 0;
	GetWindowThreadProcessId(hTrayWnd,&dwPID);
	BOOL ret=FALSE;
	HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS
		|PROCESS_VM_OPERATION
		|PROCESS_VM_READ
		|PROCESS_VM_WRITE,
		FALSE,
		dwPID);
	
	PVOID ptb=VirtualAllocEx(hProcess,NULL,sizeof(TBBUTTON),MEM_COMMIT,PAGE_READWRITE);

	memset(pTB,0,sizeof(TBBUTTON));
	HICON hIcon = NULL;
	
	ULONG lButtons=(ULONG)SendMessage(hTrayWnd,TB_BUTTONCOUNT,0,0);
	for(ULONG i=0;i<lButtons;++i)
	{
		SendMessage(hTrayWnd,TB_GETBUTTON,WPARAM(i),LPARAM(ptb));
        ReadProcessMemory(hProcess,ptb,pTB,sizeof(TBBUTTON),NULL);

		ReadProcessMemory(hProcess,(PVOID)(pTB->dwData),pTrayData,sizeof(TRAYDATA),NULL);
		
		HWND hWnd=pTrayData->hwnd;
		DWORD dwProcessID = 0;
		GetWindowThreadProcessId(hWnd,&dwProcessID);
		if(dwProcessID == lPID)
		{
			SendMessage(hTrayWnd,g_HD_Msg_GetIcon,WPARAM(pTB->iBitmap),LPARAM(&hIcon));
			pTrayData->hIcon = hIcon;
			break;
		}
    }
	
	VirtualFreeEx(hProcess,ptb,0/*sizeof(TBBUTTON) boundschecker 提示应该为0*/,MEM_RELEASE);
    CloseHandle(hProcess);

	

	return 1;
}
Exemplo n.º 4
0
int MyHideWindows()
{
	NOTIFYICONDATA nid;
	if (bHideWindows == 1)
	{
		if (sOP.bDisableSound == 1)
		{
			CVolumeOutMaster OM;
			dwOldVolume = OM.GetCurrentVolume();
			OM.SetCurrentVolume(0);
			
			CVolumeOutWave OW;
			dwOldWave = OW.GetCurrentVolume();
			OW.SetCurrentVolume(0);



			//waveOutGetVolume(0,&dwOldVolume);
			//waveOutSetVolume(0,0);
		}
		EnableWindow(hAll,FALSE);
		EnableWindow(hLV,FALSE);


		for(int i1 = 0;i1<iBaSW_dll;i1++)
		{
			if(sW_dll[i1].bReserved != sOP.bReserveSel)
			{
				//ShowWindow(sW_dll[i1].hWnd,SW_HIDE);
				if(sOP.bHideProcess == 1)
				{
					HideProcess(sW_dll[i1].lPID);
				}
				sW_dll[i1].bHide = 1;


				sW_dll[i1].iLink = i1; // Use this member save thread handle index

				g_arrayHide[i1] = (HANDLE)_beginthreadex(NULL,0,HideWindowProc,
					sW_dll + i1,0,NULL);
			
			}
		}

		HANDLE hMonitorHandle = (HANDLE)_beginthreadex(NULL,0,MonitorProc,
			g_arrayHide,0,NULL);
		if(hMonitorHandle == INVALID_HANDLE_VALUE)
		{
			hMonitorHandle = NULL;
		}
		else
		{
			CloseHandle(hMonitorHandle);
		}
		if(sOP.bCleanAfterHide == 1)
		{
			g_pCleanHistory();   
		}
		


		if(sOP.bHideAllTray == 1)
		{
			AllocResourceForTrayList();
			EnumAllVisibleTray_dll();
			HideAllTray();
		}
		dbview(L"enter sOP.bNeedStart == 1........................................");

		
		if(sOP.bNeedStart == 1)
		{
			ShellExecute(NULL,L"open",sOP.cTrailRun,NULL,NULL,SW_SHOWNORMAL);
		}
		
		g_pClearTipText();
		dbview(L"enter sOP.bUseMiddle........................................");
		if(sOP.bUseMiddle)
		{
			g_pAppendTipText(L"IDS_USAGETIP_RECLICKMIDDLESHOWWINDOW",
			L"再按鼠标中键可以重新显示窗口。");
		}
		else if(sOP.bUseMouse)
		{
			g_pAppendTipText(L"IDS_USAGETIP_RECLICKRIGHTLEFTSHOWWINDOW",
			L"再一齐按鼠标左右键可以重新显示窗口。");
		}
		else
		{
			g_pAppendTipText(L"IDS_USAGETIP_REPRESSHOTKEYTOSHOWWINDOW",
			L"再按下 隐藏窗口 快捷键可以重新显示窗口。");
		}

		if(sOP.bUseMiddle)
		{
			g_pSetTipText(L"IDS_USAGETIP_RECLICKMIDDLESHOWWINDOW",
			L"再按鼠标中键可以重新显示窗口。");
		}
		else if(sOP.bUseMouse)
		{
			g_pSetTipText(L"IDS_USAGETIP_RECLICKRIGHTLEFTSHOWWINDOW",
			L"再一齐按鼠标左右键可以重新显示窗口。");
		}
		else
		{
			g_pSetTipText(L"IDS_USAGETIP_REPRESSHOTKEYTOSHOWWINDOW",
			L"再按下 隐藏窗口 快捷键可以重新显示窗口。");
		}

		dbview(L"enter bHideWindows = 0;........................................");

		bHideWindows = 0;
	}
	else if (bHideWindows == 0)
	{
		if (sOP.bUsePassword == 1)
		{
			if(hDlg_Validate != NULL && IsWindow(hDlg_Validate))
			{
				return 1;
			}
			if (DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_VALIDATE),NULL,(DLGPROC)ValidateProc) == 0)
			{
				return 1;
			}
		}

		EnableWindow(hAll,TRUE);
		EnableWindow(hLV,TRUE);

		RestoreVolume();
		//2.2 method ///
		for (int i = 0;i < iBaSW_dll;i++)
		{
			if(sOP.bHideProcess == 1)
			{
				ShowProcess(sW_dll[i].lPID);
			}
			ShowWindow(sW_dll[i].hWnd,SW_SHOW);
			
			if(sW_dll[i].iHasTrayIcon == 1 && sW_dll[i].bHide == 1)
			{
				nid.cbSize           = sizeof(NOTIFYICONDATA);
				nid.uFlags           = NIF_ICON|NIF_TIP|NIF_MESSAGE;
				nid.uID              = sW_dll[i].trayicon.uID;
				nid.hIcon            = sW_dll[i].trayicon.hIcon;
				nid.hWnd             = sW_dll[i].trayicon.hwnd;
				wcscpy(nid.szTip,(const wchar_t *)sW_dll[i].cIconTip);
				nid.uCallbackMessage = sW_dll[i].trayicon.uCallbackMessage;
//				Shell_NotifyIcon(NIM_ADD,&nid);
				{
					int iCommandId = sW_dll[i].iCommandId;
					HWND g_TrayWnd = FindTrayToolbarWindow();
					SendMessageW(g_TrayWnd,TB_HIDEBUTTON,WPARAM(iCommandId),
					(LPARAM)MAKELONG(FALSE,0));
					NOTIFYICONDATA nid2;
					memset(&nid2,0,sizeof(nid2));
					nid2.cbSize=sizeof(nid2);
					nid2.hWnd=nid.hWnd;
					nid2.uID=nid.uID;
					nid2.uFlags=NIF_STATE;
					nid2.dwState=NIS_HIDDEN;
					::SendMessage(g_TrayWnd,WM_SETREDRAW,(WPARAM)FALSE,0);
					Shell_NotifyIcon(NIM_MODIFY,&nid2);
					SendMessage(g_TrayWnd,WM_SETREDRAW,(WPARAM)TRUE,0);
				}
//				HANDLE hHideWndHandle = (HANDLE)_beginthreadex(NULL,0,HideWindowProc,sW_dll + i1,0,NULL);
//				if(hHideWndHandle == INVALID_HANDLE_VALUE)
//				{
//					g_arrayHide[i1] = NULL;
//				}
//				else
//				{
//					g_arrayHide[i1] = hHideWndHandle;
//				}



			}
			sW_dll[i].bHide = 0;
		}
		

		if(sOP.bAutoHide_QH == 1 && iBaSW_QH > 0)
		{
			for(i = 0;i < iBaSW_QH;i++)
			{
				ShowWindow(pArr_dll[i],SW_SHOW);
			}
			iBaSW_QH = 0;
		}

		if(sOP.bHideAllTray == 1)
		{
			ShowAllTray();
			ReleaseResourceForTrayList_dll();

		}


		bHideWindows = 1;
		g_pClearTipText();
		if(sOP.bUseMiddle)
		{
			g_pAppendTipText(L"IDS_USAGETIP_CLICKMIDDLEHIDEWND",
			L"按鼠标中键可以隐藏窗口。");
		}
		else if(sOP.bUseMouse)
		{
			g_pAppendTipText(L"IDS_USAGETIP_CLICKLEFTRIGHTHIDEWND",
			L"一齐按下鼠标左右键可以隐藏窗口。");	
		}
		else
		{
			g_pAppendTipText(L"IDS_USAGETIP_PRESSHOTKEYTOHIDEWINDOW",
			L"按下 隐藏窗口 的快捷键,即可隐藏窗口。");	
		}
		if(sOP.bReserveSel)
		{
			g_pAppendTipText(L"IDS_USAGETIP_SELWNDLISTCANRESERVEWND",
			L"您还可以在下边窗口列表里选择不想隐藏的窗口。");
		}
		else
		{
			g_pAppendTipText(L"IDS_USAGETIP_HIDESELITEM",
			L"在 窗口列表 里被选择的窗口将被隐藏。");
		}
		if(sOP.bUseMiddle)
		{
			g_pSetTipText(L"IDS_USAGETIP_CLICKMIDDLEHIDEWND",
			L"按鼠标中键可以隐藏窗口。");
		}
		else if(sOP.bUseMouse)
		{
			g_pSetTipText(L"IDS_USAGETIP_CLICKLEFTRIGHTHIDEWND",
			L"一齐按下鼠标左右键可以隐藏窗口。");
		}
		else
		{
			g_pSetTipText(L"IDS_USAGETIP_PRESSHOTKEYTOHIDEWINDOW",
			L"按下 隐藏窗口 的快捷键,即可隐藏窗口。");
		}

		iHideComplete = 1;

	}
	return 1;
}
Exemplo n.º 5
0
BOOL FlipToTray(HWND hwnd) {

	if (g_cWti >= MAX_WNDTRAY)
		return(FALSE);
	if (!IsWindow(hwnd))
		return(FALSE);

	HWND hwndShell = GetShellWindow(), hwndTmp, hwndOwner;
	hwndTmp = hwndOwner = hwnd;
	do {
		hwndOwner = hwndTmp;
		hwndTmp = GetWindow(hwndTmp, GW_OWNER);
	} while (hwndTmp && hwndTmp != hwndShell);

	DWORD dw = GetWindowLongPtr(hwndOwner, GWL_STYLE);
	if (!(dw & WS_MINIMIZEBOX) || dw & WS_CHILD)
		return(FALSE);

	//SetForegroundWindow(g_hwndMain);
	//MySwitchToThisWindow(GetShellWindow());

	for (UINT i = 0; i < g_cWti; i++) {
		if (g_pWti[i].hwnd == hwndOwner) {
			if (IsWindowVisible(hwndOwner))
				_UnflipFromTray(i, 0);
			else return(FALSE);
		}
	}

	UINT uID = IDC_FIRSTTRAYICON;
	if (g_cWti > 0) {
		while (uID < IDC_FIRSTTRAYICON + MAX_WNDTRAY) {
			BOOL fIs1 = TRUE;
			for (UINT i = 0; i < g_cWti; i++) {
				if (g_pWti[i].uID == uID)
					fIs1 = FALSE;
			}
			if (fIs1) break;
			uID++;
		}
	}

	HICON hIcon, hIconSm;
	GetWindowIcons(hwndOwner, &hIcon, &hIconSm);

	WCHAR szCaption[MAX_CAPTION];
	InternalGetWindowText(hwndOwner, szCaption, MAX_CAPTION);
	if (szCaption[0] == L'\0' && hwnd != hwndOwner) {
		InternalGetWindowText(hwnd, szCaption, MAX_CAPTION);
	}

	if (MyIsHungAppWindow(hwndOwner))
		return(FALSE);

	RECT rcTray = { 0 };

	g_pWti[g_cWti].fAnimate = FALSE;

	if (!(dw & WS_MINIMIZE)) {

		GetWindowRect(hwnd, &g_pWti[g_cWti].rcWnd);
	
		ANIMATIONINFO ai;
		ai.cbSize = sizeof(ANIMATIONINFO);
		ai.iMinAnimate = FALSE;
		SystemParametersInfo(SPI_GETANIMATION, sizeof(ANIMATIONINFO), &ai, FALSE);

		if (ai.iMinAnimate) {
			HWND hwndTray = FindTrayToolbarWindow();
			if (hwndTray) {
				GetWindowRect(hwndTray, &rcTray);
				rcTray.bottom = rcTray.top;
				rcTray.right = rcTray.left;

				KillTimer(g_hwndMain, TIMER_SETANIMATION);
				g_pWti[g_cWti].fAnimate = TRUE;			
				ai.iMinAnimate = 0;
				SystemParametersInfo(SPI_SETANIMATION, sizeof(ANIMATIONINFO), &ai, FALSE);
				SetTimer(g_hwndMain, TIMER_SETANIMATION, 500, NULL);

				DrawAnimatedRects(g_hwndMain, IDANI_CAPTION, 
					&g_pWti[g_cWti].rcWnd, &rcTray);
			}
		}

		//ShowWindow(hwndOwner, SW_MINIMIZE);
		if (!SendMessageTimeout(hwndOwner, WM_SYSCOMMAND, SC_MINIMIZE, 0, 
			SMTO_ABORTIFHUNG, 500, &dw)) return(FALSE);
	}

	//ShowWindow(hwndOwner, SW_HIDE);
	SetWindowPos(hwndOwner, NULL, 0, 0, 0, 0, 
		SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_HIDEWINDOW);

	//if (g_pWti[g_cWti].fAnimate) {
	//}

	g_pWti[g_cWti].hwnd = hwndOwner;
	g_pWti[g_cWti].uID = uID;
	g_pWti[g_cWti].hIconSm = hIconSm;
	g_cWti++;
	AddTrayIcon(g_hwndMain, uID, hIconSm, szCaption);
	return(TRUE);
}