#include< commctrl.h >
void main()
{
HWND hwnd,hwnd1,hwnd2,hwnd3;
int iItem=0;
LVITEM lvitem, *plvitem;
char ItemBuf[512],*pItem;
DWORD PID;
HANDLE hProcess;
hwnd=FindWindow("Progman","Program Manager");
hwnd1=FindWindowEx(hwnd,0,"SHELLDLL_DefView",0);
hwnd2=FindWindowEx(hwnd1,0,"SysListView32",0);
::ShowWindow(hwnd2,SW_SHOWNORMAL);
hwnd2=FindWindow("Shell_TrayWnd",0);
::ShowWindow(hwnd2,SW_SHOWNORMAL);
hwnd=FindWindow("#32770","Windows 任务管理器");
hwnd=FindWindowEx(hwnd,0,"#32770",0);
hwnd=FindWindowEx(hwnd,0,"SysListView32",0);
if (!hwnd)
MessageBox(NULL,"[Windows 任务管理器] 尚未启动!","错误!",NULL);
else
{
iItem=SendMessage(hwnd,LVM_GETNEXTITEM,-1,LVNI_SELECTED);
if (iItem==-1)
MessageBox(NULL,"没有指定目标进程 !","错误!",NULL);
else
{
//itoa(iItem,temp,10);
//MessageBox(NULL,temp,"iItem",NULL);
GetWindowThreadProcessId(hwnd, &PID);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
if (!hProcess)
MessageBox(NULL,"获取进程句柄操作失败!","错误!",NULL);
else
{
plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
pItem=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
if ((!plvitem)||(!pItem))
MessageBox(NULL,"无法分配内存!","错误!",NULL);
else
{
lvitem.cchTextMax=512;
//lvitem.iSubItem=1;//PID
lvitem.iSubItem=0; //ProcessName
lvitem.pszText=pItem;
WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);
ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);
MessageBox(NULL,ItemBuf,"ItemBuf",NULL);
}
}
}
}
//释放内存
CloseHandle(hwnd);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
//return 0;
}
把桌面图标围城一个圆圈
void C***::OnSetDeskIcon()
{
HWND hwndParent = ::FindWindow( "Progman", "Program Manager" );
HWND hwndSHELLDLL_DefView = ::FindWindowEx( hwndParent, NULL, "SHELLDLL_DefView", NULL );
HWND hwndSysListView32 = ::FindWindowEx( hwndSHELLDLL_DefView, NULL, "SysListView32", "FolderView" );
int Nm = ListView_GetItemCount( hwndSysListView32 );
int sNm = 0;
if( Nm >= 10 )
{
sNm = 10;
}else{
sNm = Nm;
}
for( int i = 0; i < sNm; i++ )
{
int x = 400 + 150*cos( i*36*3.1415926/180 );
int y = 400 + 150*sin( i*36*3.1415926/180 );
::SendMessage( hwndSysListView32, LVM_SETITEMPOSITION, i, MAKELPARAM( x,y));
}
ListView_RedrawItems(hwndSysListView32, 0, ListView_GetItemCount(hwndSysListView32) - 1);
::UpdateWindow(hwndSysListView32);
}
获取到桌面图标
void C***::OnSetDeskIcon()
{
HWND hDestTop;
hDestTop = ::FindWindow("progman", NULL);
hDestTop = ::FindWindowEx(hDestTop, 0, "shelldll_defview", NULL);
hDestTop = ::FindWindowEx(hDestTop, 0, "syslistview32", NULL);
int count=(int)::SendMessage( hDestTop, LVM_GETITEMCOUNT, 0, 0);
LVITEM lvi, *_lvi;
char item[512], subitem[512];
char *_item, *_subitem;
unsigned long pid;
HANDLE process;
GetWindowThreadProcessId( hDestTop, &pid);
process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);
_lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
_item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
_subitem=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
RECT rc;
rc.left = LVIR_ICON; //这个一定要设定 可以去看MSDN关于LVM_GETITEMRECT的说明
RECT* _rc =(RECT*)VirtualAllocEx( process, NULL, sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);
lvi.cchTextMax=512;
for( int i=0; i< 10; i++) {
lvi.iSubItem=0;
lvi.pszText=_item;
WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
::SendMessage( hDestTop, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
lvi.iSubItem=1;
lvi.pszText=_subitem;
WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
::SendMessage( hDestTop, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
::WriteProcessMemory( process, _rc, &rc, sizeof(rc), NULL);
::SendMessage( hDestTop, LVM_GETITEMRECT, (WPARAM)i, (LPARAM)_rc);
ReadProcessMemory(process, _item, item, 512, NULL);
ReadProcessMemory(process, _subitem, subitem, 512, NULL);
ReadProcessMemory(process, _rc, &rc, sizeof(rc), NULL);
CString str;
str.Format("LF:%d TP:%d RT:%d BT:%d", rc.left,rc.top,rc.right,rc.bottom);
AfxMessageBox(str);
str.Format("%s - %s\n", item, subitem);
AfxMessageBox( str );
}
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE);
VirtualFreeEx(process, _subitem, 0, MEM_RELEASE);
VirtualFreeEx(process, _rc, 0, MEM_RELEASE);
CloseHandle( process );
}
屏幕上下移动
HWND pdesk=GetDesktopWindow();//桌面句柄,可理解为指向桌面的指针
//ScrollWindow(pdesk,-100, 0, NULL, NULL);//向左移动100像素
/*for(int i=0;i<50;i++)
{
ScrollWindow(pdesk, (i+10), 0, NULL, NULL);//向右移动100像素
Sleep(30);
}
for(int j=0;j<50;j++)
{
ScrollWindow(pdesk, -(j+10), 0, NULL, NULL);//向右移动100像素
Sleep(30);
}
for(int k=0;k<50;k++)
{
ScrollWindow(pdesk, 0, (k+10),NULL, NULL);//向上移动100像素
}*
SDK工具栏和状态栏:
hWndStatus=CreateWindowEx(0,STATUSCLASSNAME,(LPCWSTR)"",WS_CHILD|WS_BORDER|WS_VISIBLE,-100,-100,10,10,hWnd,(HMENU)100,hInst,NULL);
if(!hWndStatus)
MessageBox(hWnd,TEXT("can't create statusbar!"),TEXT("error_notify"),MB_OK);
SendMessage(hWndStatus,SB_SETPARTS,(WPARAM)nCount,(LPARAM)array);
SendMessage(hWndStatus,SB_SETTEXT,(LPARAM)1,(WPARAM)TEXT("I am status bar"));
SendMessage(hWndStatus,SB_SETTEXT,(LPARAM)2,(WPARAM)TEXT("by yiruirui")); */
hWndTool=CreateWindowEx(0,TOOLBARCLASSNAME,NULL,WS_CHILD|WS_VISIBLE|TBSTYLE_TOOLTIPS,0,0,0,0,hWnd,(HMENU)1111,hInst,NULL);
SendMessage(hWndTool,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);
tbab.hInst=HINST_COMMCTRL;
tbab.nID=IDB_STD_SMALL_COLOR;
if(SendMessage(hWndTool,TB_ADDBITMAP,1,(LPARAM)&tbab)==-1)
MessageBox(hWnd,TEXT("失败"),TEXT("创建"),0);
ZeroMemory(tbb,sizeof(tbb));
tbb[0].iBitmap=STD_HELP;
tbb[0].fsState=TBSTATE_CHECKED;
tbb[0].fsStyle=TBSTYLE_BUTTON;
tbb[0].idCommand=ID_FILE_NEW;
tbb[0].iString=(INT_PTR)"1";
tbb[1].iBitmap=STD_FILEOPEN;
tbb[1].fsState=TBSTATE_ENABLED;
tbb[1].fsStyle=TBSTYLE_BUTTON;
tbb[1].idCommand=ID_FILE_OPEN;
tbb[1].iString=(INT_PTR)"4";
tbb[2].iBitmap=STD_FILESAVE;
tbb[2].fsState=TBSTATE_ENABLED;
tbb[2].fsStyle=TBSTYLE_BUTTON;
tbb[2].idCommand=ID_FILE_SAVEAS;
tbb[2].iString=(INT_PTR)"7";
SendMessage(hWndTool,TB_ADDBUTTONS,sizeof(tbb)/sizeof(TBBUTTON),(LPARAM)&tbb);
SendMessage(hWndTool,TB_SETBUTTONSIZE,0,(LPARAM)MAKELONG(20,5));
SendMessage(hWndTool,TB_AUTOSIZE,0,0);
return 0 ;