能力值:
(RANK:20 )
2 楼
不难吧 注入就可以了
能力值:
( LV4,RANK:50 )
3 楼
右下角的那个tray其实是move to tray进程里面加的,你关闭move to tray就知道了,至于隐藏么直接用的ShowWindow即可
你注册的时候 NOTIFYICONDATA.uID 写成对应隐藏的hwnd就可以了,消息循环的wparam会把这个uID传过来的,都不用列表什么保存窗口了
能力值:
( LV4,RANK:50 )
4 楼
#include <windows.h>
#include <ShellAPI.h>
#include "resource.h"
PNOTIFYICONDATA Icon; //右下角图标的一个结构体指针
#define ID_SHOW 0x5000
void move_Middle(HWND hWnd)
{
RECT rect;
int x,y;
GetWindowRect(hWnd, &rect);//得到当前窗口大小信息
x = rect.right - rect.left;
y = rect.bottom - rect.top;
MoveWindow(hWnd, (GetSystemMetrics(SM_CXSCREEN)- x)>>1, (GetSystemMetrics(SM_CYSCREEN)-y)>>1, x, y , TRUE);
}
INT_PTR CALLBACK ProcWinMain(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
static HMENU hmenu;
static HINSTANCE hInst;
hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
hmenu=LoadMenu(hInst,"MYPOPUPMENU");
hmenu=GetSubMenu(hmenu,0);
HWND hwndfrontwin;
int iFileNum = 0 ;
char FileName[MAX_PATH];
int i;
switch(Msg)
{
case WM_INITDIALOG:
RegisterHotKey(hWnd, ID_SHOW, NULL, VK_F2);
move_Middle(hWnd);
break;
case WM_USER+0x100://右下角图标事件
switch(lParam)
{
case WM_LBUTTONDBLCLK: //双击,显示隐藏窗体
ShowWindow((HWND)wParam, SW_SHOW);
Icon->uID = wParam;
Shell_NotifyIcon(NIM_DELETE,Icon);
break;
}
break;
case WM_HOTKEY://处理热键消息
switch(wParam)
{
case ID_SHOW:
hwndfrontwin = GetForegroundWindow();
if (hwndfrontwin == hWnd)
{
Icon->hIcon = LoadIcon(hInst, (LPCSTR)IDI_ICON1);
}
else
{
if (!SendMessageTimeout(hwndfrontwin, WM_GETICON, 0, 0,
SMTO_BLOCK | SMTO_ABORTIFHUNG, 15000, (PULONG_PTR) &Icon->hIcon)
|| NULL == Icon->hIcon)
Icon->hIcon = (HICON)(PLONG)GetClassLongPtr(hwndfrontwin, GCLP_HICONSM);
}
Icon->uID = (UINT)hwndfrontwin;
GetWindowText(hwndfrontwin, Icon->szTip, 64);
Shell_NotifyIcon(NIM_ADD,Icon);
ShowWindow(hwndfrontwin, FALSE);
break;
}
break;
case WM_SHOWWINDOW:
Icon->hWnd = hWnd;
move_Middle(hWnd);
break;
case WM_COMMAND:
//用户自定义消息
switch(wParam)
{
case IDOK:
case IDCANCEL:
PostMessage(hWnd, WM_CLOSE, NULL, NULL);
break;
}
break;
case WM_CLOSE:
// 这里要把之前所有隐藏的窗口显示出来
UnregisterHotKey(hWnd, ID_SHOW);
EndDialog(hWnd, 0);
break;
default:
return FALSE;
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
Icon = new NOTIFYICONDATA;
ZeroMemory(Icon,sizeof(Icon));
Icon->cbSize = sizeof(Icon);
Icon->uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
Icon->uCallbackMessage = WM_USER+0x100 ;
//显示窗口
DialogBoxParam(hInstance,(LPCSTR)IDD_DIALOG1 ,NULL, (DLGPROC)ProcWinMain, NULL);
return TRUE;
}
窗口资源自己随便加一个, 还有资源加一个 IDI_ICON1 的图标文件。 按F2隐藏到那个啥啥啥NotifyIcon,双击还原,关闭程序再次显示出来的自己写,要弄个数组什么的保存了。
能力值:
( LV2,RANK:10 )
5 楼
楼上高手啊
能力值:
( LV2,RANK:10 )
6 楼
你们都是高手,我压根不会应用程序。俺只会PHP代码。其它的代码一概看不明白。呵呵,不过现在找到了一款。RBTray,有兴趣的话,大家也使用一下。
如果有一个软件能有taskbar shuffle的功能+RBTray的功能是最方便的了。我就可以不用其它的软件辅助了。
能力值:
( LV2,RANK:10 )
7 楼
简洁,厉害!!