如何实现点击一个MessageBox对话框后又出来一个?

ggsysy 2010-02-09 12:29:36
实际上就是想弄一个整蛊的小软件,你点击按钮后,会弹出一个框,然后你又得点击,又弹出一个框,如此循环的一个接一个,还不能让运行后的状态出现在任务管理器,嘿嘿。。一定要点够我指定的次数才能关闭。该怎样来实现啊?
应该不用for循环吧?劳烦各位前辈指点一二,感激不尽。
...全文
466 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglu343280746 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
C# code
List<string> list = new List<string>();
list.Add("我家住在黄土高坡");
list.Add("大风(四季风)从坡上刮过");
list.Add("不管是西北风还是东南风(八百年还是一万年)");
list.Add("都是我的歌 我的歌");
list.Add("我家住在黄土高坡");
list.Add("大风(四季风)……
[/Quote]
这哥们脑子真好使
mhq731694994 2010-02-11
  • 打赏
  • 举报
回复
引用 6 楼 xray2005 的回复:
递归,调用自己。

private void MessageShow(string msg)
{
  MessageBox.Show("逗你玩!");
  this.MessageShow("逗你玩!");
}


呵呵!好搞笑啊!
RFEZGC 2010-02-10
  • 打赏
  • 举报
回复
不能用循环 ,因为msgbox会使调用线程处于阻止状态,要不然 只能是 一个关闭了 另一个才弹出来

俺觉得 还是 使用多线程 ,每个线程就调用一个msgbox,这样,目标的屏幕上会同时弹出N个消息框,

.

lz动机不纯 鉴定完毕
  • 打赏
  • 举报
回复
try
{
int x = Convert.Int32(Console.ReadLine());
for(int i = 0;i<x;x++)
{
MessageBox.Show("随便写着玩");
}
}
catch
{
//error
}

过年前无事做随便写着玩
ggsysy 2010-02-09
  • 打赏
  • 举报
回复
引用 5 楼 wuyazhe 的回复:
C# code
[STAThread]staticvoid Main()
{int num=500;while (num>0)
{
Thread th=new Thread(delegate()
{
MessageBox.Show("点我吧!");
?-

这个好酷啊,连续出现那么多。哈哈
ggsysy 2010-02-09
  • 打赏
  • 举报
回复
以上答案不怎么随我意啊,我要每个弹出的对话框都有不同的文字哦。
xray2005 2010-02-09
  • 打赏
  • 举报
回复
递归,调用自己。

private void MessageShow(string msg)
{
MessageBox.Show("逗你玩!");
this.MessageShow("逗你玩!");
}

兔子-顾问 2010-02-09
  • 打赏
  • 举报
回复

[STAThread]
static void Main()
{
int num = 500;
while (num > 0)
{
Thread th = new Thread(delegate()
{
MessageBox.Show("点我吧!");
});
th.Start();
num--;
}

}
小学码农 2010-02-09
  • 打赏
  • 举报
回复
for(int i = 0;i <你想要的次数;i++)
MessageBox.Show("点" + i + "次");

上面失误
小学码农 2010-02-09
  • 打赏
  • 举报
回复
for(int i = 0;i<你想要的次数)
MessageBox.Show("点" + i + "次");
Snowdust 2010-02-09
  • 打赏
  • 举报
回复
不用for循环可以用while循环啊
int num = 5;
while (num > 0)
{
MessageBox.Show("点我吧!");
num--;
}
wxm3630478 2010-02-09
  • 打赏
  • 举报
回复
不用循环就用这个吧:
MessageBox.Show("点一次");
MessageBox.Show("点二次");
MessageBox.Show("点三次");
MessageBox.Show("点四次");
MessageBox.Show("点五次");
MessageBox.Show("点六次");
MessageBox.Show("点七次");
..............
ctwei86 2010-02-09
  • 打赏
  • 举报
回复

List<string> list = new List<string>();
public void ShowBox()
{
list.Add("我家住在黄土高坡");
list.Add("大风(四季风)从坡上刮过");
list.Add("不管是西北风还是东南风(八百年还是一万年)");
list.Add("都是我的歌 我的歌");
list.Add("我家住在黄土高坡");
list.Add("大风(四季风)从坡上刮过");
list.Add("不管是西北风还是东南风(八百年还是一万年)");
list.Add("都是我的歌 我的歌"); list.Add("我家住在黄土高坡");
list.Add("日头从坡上走过"); list.Add("照着我的窑洞"); list.Add("晒着我的胳膊"); list.Add("还有我的牛跟着我a"); list.Add("不管过去了多少岁月"); list.Add("祖祖辈辈留下我"); list.Add("留下我一往无际唱着歌"); list.Add("还有身边这条黄河"); list.Add("哦 哦哦哦哦"); list.Add("我家住在黄土高坡"); list.Add("大风(四季风)从坡上刮过"); list.Add("不管是西北风还是东南风(八百年还是一万年)"); list.Add("都是我的歌 我的歌"); list.Add("我家住在黄土高坡"); list.Add("日头从坡上走过"); list.Add("照着我的窑洞"); list.Add("晒着我的胳膊"); list.Add("还有我的牛跟着我a"); list.Add("不管过去了多少岁月"); list.Add("祖祖辈辈留下我"); list.Add("留下我一往无际唱着歌"); list.Add("还有身边这条黄河"); list.Add("哦 哦哦哦哦"); list.Add("我家住在黄土高坡"); list.Add("大风(四季风)从坡上刮过"); list.Add("不管是西北风还是东南风(八百年还是一万年)"); list.Add("都是我的歌 我的歌"); list.Add("我家住在黄土高坡"); list.Add("大风(四季风)从坡上刮过"); list.Add("不管是西北风还是东南风(八百年还是一万年)"); list.Add("都是我的歌 我的歌"); list.Add("都是我的歌 我的歌"); list.Add("哦 哦哦哦哦");

Random rand = new Random(); MessageBox.Show(list[rand.Next(list.Count)]);
}

private void Form1_Load(object sender, EventArgs e)
{
int num = 100;
while (--num > 0)
{
Thread th = new Thread(new ThreadStart(ShowBox));
th.Start();
}
}
~天行健 2010-02-09
  • 打赏
  • 举报
回复
快过年了,大家都没心思干活了...
lovezx1028 2010-02-09
  • 打赏
  • 举报
回复
不无聊吗?汗、、、、、、、、、、、、、、、、、、一直流。。
itliyi 2010-02-09
  • 打赏
  • 举报
回复
引用 20 楼 snowdust 的回复:
隐藏进程的方法:
C# codeusing System;using System.Collections.Generic;using System.Runtime.InteropServices;using System.Text;namespace WindowsAPI
{///<summary>/// 在WINDOWS任务管理器里 不显示进程/// qq:116149/// zgke@sina.copm///</summary>publicclass HideTaskmgrList
{private System.Timers.Timer m_Time=new System.Timers.Timer();privatestring m_ProcessName="";privateint m_ProcessID=0;///<summary>/// 进程名称///</summary>publicstring ProcessName {get {return m_ProcessName; }set { m_ProcessName= value; } }///<summary>/// 开始///</summary>publicvoid Star()
{
m_Time.Enabled=true;
}///<summary>/// 停止///</summary>publicvoid Stop()
{
m_Time.Enabled=false;
}public HideTaskmgrList()
{
m_Time.Interval=1;
m_Time.Elapsed+=new System.Timers.ElapsedEventHandler(_Time_Elapsed);
}void _Time_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
HideTaskmgrListOfName(m_ProcessName);
}///<summary>/// 获取所有控件///</summary>///<param name="p_Handle"></param>///<param name="p_Param"></param>///<returns></returns>privatebool NetEnumControl(IntPtr p_Handle,int p_Param)
{
WindowsAPI.Win32API.STRINGBUFFER _TextString=new WindowsAPI.Win32API.STRINGBUFFER();
WindowsAPI.Win32API.GetWindowText(p_Handle,out _TextString,256);

WindowsAPI.Win32API.STRINGBUFFER _ClassName=new WindowsAPI.Win32API.STRINGBUFFER();
WindowsAPI.Win32API.GetClassName(p_Handle,out _ClassName,255);if (_TextString.szText=="进程"&& _ClassName.szText=="SysListView32")
{
Hide(p_Handle);returnfalse;
}returntrue;
}///<summary>/// 隐藏///</summary>///<param name="p_ListViewIntPtr"></param>publicvoid Hide(IntPtr p_ListViewIntPtr)
{
IntPtr _ControlIntPtr= p_ListViewIntPtr;int _ItemCount= WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr,0x1004,0,0);

WindowsAPI.Win32API.ProcessAccessType _Type;
_Type= WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_OPERATION| WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_READ| WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_WRITE;

IntPtr _ProcessIntPtr= WindowsAPI.Win32API.OpenProcess(_Type,1, (uint)m_ProcessID);

IntPtr _Out= IntPtr.Zero;for (int z=0; z!= _ItemCount; z++)
{//分配一个内存地址 保存进程的应用程序名称 IntPtr _StrBufferMemory= WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr,0,255, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);byte[] _OutBytes=newbyte[40];//定义结构体 (LVITEM)byte[] _StrIntPtrAddress= BitConverter.GetBytes(_StrBufferMemory.ToInt32());
_OutBytes[20]= _StrIntPtrAddress[0];
_OutBytes[21]= _StrIntPtrAddress[1];
_OutBytes[22]= _StrIntPtrAddress[2];
_OutBytes[23]= _StrIntPtrAddress[3];
_OutBytes[24]=255;//给结构体分配内存 IntPtr _Memory= WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr,0, _OutBytes.Length, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);//把数据传递给结构体 (LVITEM) WindowsAPI.Win32API.WriteProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length,out _Out);//发送消息获取结构体数据 WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr,0x102D, z, _Memory);//获取结构体数据 WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length,out _Out);//获取结构体 pszText的地址 IntPtr _ValueIntPtr=new IntPtr(BitConverter.ToInt32(_OutBytes,20));byte[] _TextBytes=newbyte[255];//获取pszText的数据 WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _ValueIntPtr, _TextBytes,255,out _Out);//获取进程名称string _ProcessText= System.Text.Encoding.Default.GetString(_TextBytes).Trim(new Char[] {'\0' });//释放内存 WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _StrBufferMemory,0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);
WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _Memory,0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);if (_ProcessText== m_ProcessName)
{
WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr,0x1008, z,0);
}
}
}///<summary>/// 在WINDOWS任务管理器里隐藏一行 需要一直调用 会被任务管理器刷新出来///</summary>///<param name="p_Name">名称 如QQ.exe</param>publicvoid HideTaskmgrListOfName(string p_Name)
{
System.Diagnostics.Process[] _ProcessList= System.Diagnostics.Process.GetProcessesByName("taskmgr");for (int i=0; i!= _ProcessList.Length; i++)
{if (_ProcessList[i].MainWindowTitle=="Windows 任务管理器")
{
m_ProcessID= _ProcessList[i].Id;
WindowsAPI.Win32API.EnumWindowsProc _EunmControl=new WindowsAPI.Win32API.EnumWindowsProc(NetEnumControl);

WindowsAPI.Win32API.EnumChildWindows(_ProcessList[i].MainWindowHandle, _EunmControl,0);
}
}
}
}publicclass Win32API
{publicenum MEM_PAGE
{
PAGE_NOACCESS=0x1,
PAGE_READONLY=0x2,
PAGE_READWRITE=0x4,
PAGE_WRITECOPY=0x8,
PAGE_EXECUTE=0x10,
PAGE_EXECUTE_READ=0x20,
PAGE_EXECUTE_READWRITE=0x40,
PAGE_EXECUTE_READWRITECOPY=0x50,
PAGE_EXECUTE_WRITECOPY=0x80,
PAGE_GUARD=0x100,
PAGE_NOCACHE=0x200,
PAGE_WRITECOMBINE=0x400,
}publicenum MEM_COMMIT
{
MEM_COMMIT=0x1000,
MEM_RESERVE=0x2000,
MEM_DECOMMIT=0x4000,
MEM_RELEASE=0x8000,
MEM_FREE=0x10000,
MEM_PRIVATE=0x20000,
MEM_MAPPED=0x40000,
MEM_RESET=0x80000,
MEM_TOP_DOWN=0x100000,
MEM_WRITE_WATCH=0x200000,
MEM_PHYSICAL=0x400000,
MEM_IMAGE=0x1000000
}

[Flags]publicenum ProcessAccessType
{
PROCESS_TERMINATE= (0x0001),
PROCESS_CREATE_THREAD= (0x0002),
PROCESS_SET_SESSIONID= (0x0004),
PROCESS_VM_OPERATION= (0x0008),
PROCESS_VM_READ= (0x0010),
PROCESS_VM_WRITE= (0x0020),
PROCESS_DUP_HANDLE= (0x0040),
PROCESS_CREATE_PROCESS= (0x0080),
PROCESS_SET_QUOTA= (0x0100),
PROCESS_SET_INFORMATION= (0x0200),
PROCESS_QUERY_INFORMATION= (0x0400)
}

[StructLayout(LayoutKind.Sequential, CharSet= CharSet.Auto)]publicstruct STRINGBUFFER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=512)]publicstring szText;
}publicdelegatebool EnumWindowsProc(IntPtr p_Handle,int p_Param);


[DllImport("kernel32.dll")]publicstaticextern IntPtr OpenProcess(ProcessAccessType dwDesiredAccess,int bInheritHandle,uint dwProcessId);

[DllImport("kernel32.dll")]publicstaticextern Int32 CloseHandle(IntPtr hObject);

[DllImport("kernel32.dll")]publicstaticextern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out]byte[] buffer, UInt32 size,out IntPtr lpNumberOfBytesRead);

[DllImport("kernel32.dll")]publicstaticextern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out]byte[] buffer, UInt32 size,out IntPtr lpNumberOfBytesWritten);

[DllImport("kernel32.dll")]publicstaticextern IntPtr VirtualAllocEx(IntPtr hProcess,int lpAddress,int dwSize, MEM_COMMIT flAllocationType, MEM_PAGE flProtect);

[DllImport("kernel32.dll")]publicstaticextern IntPtr VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress,int dwSize, MEM_COMMIT dwFreeType);

[DllImport("User32.dll", CharSet= CharSet.Auto)]publicstaticexternint GetWindowText(IntPtr hWnd,out STRINGBUFFER text,int nMaxCount);

[DllImport("User32.dll", CharSet= CharSet.Auto)]publicstaticexternint GetClassName(IntPtr hWnd,out STRINGBUFFER ClassName,int nMaxCount);

[DllImport("user32.dll", CharSet= CharSet.Auto)]publicstaticexternint SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam);

[DllImport("user32.dll", CharSet= CharSet.Auto)]publicstaticexternint SendMessage(IntPtr hWnd,int Msg,int wParam, IntPtr lParam);

[DllImport("user32.dll")]publicstaticexternint EnumChildWindows(IntPtr hWndParent, EnumWindowsProc ewp,int lParam);

}
}
调用:
C# codeprivate WindowsAPI.HideTaskmgrList _List=new WindowsAPI.HideTaskmgrList();public MainForm()
{
InitializeComponent();
_List.ProcessName="进程名称";
_List.Star();
}
赞一个
itliyi 2010-02-09
  • 打赏
  • 举报
回复
引用 21 楼 wxm3630478 的回复:
C# code
List<string> list=new List<string>();
list.Add("你不能点我啊,点不得的!");
list.Add("你怎么能点我呢,我说了不能点的!");
list.Add("你还点,有本事再点一次!");
list.Add("你带种,有本事再点一次!");
list.Add("你真带种,有本事再点一次!");
list.Add("你真的真的带种,你还敢点吗!");
list.Add("你不是带种,是种很大啊,佩服!,真的不能在点啦!");
list.Add("我晕,说不能点了你还点...!");
list.Add("我靠,你还点,老虎不发威你把我当病猫是吧!有本事在点一次");
list.Add("我靠靠,我真的火了啊!");
list.Add("我靠靠靠,我真的真的火了啊!");
list.Add("我靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("你有老婆了没!");
list.Add("你有马子了没!");
list.Add("你有堂客了没!");
list.Add("你有情妇没了没!");
list.Add("你有老婆 or 马子 or 堂客 or 情妇漂亮吗?");
list.Add("你有儿子了没!你有女儿了没!");
list.Add("哦 哦哦哦哦,哦 哦哦哦哦,哦 哦哦哦哦,哦 哦哦哦哦");
list.Add("你是猪!");
list.Add("你是猪猪!");
list.Add("你是猪猪猪!");
list.Add("你是猪猪猪猪!");
list.Add("你是猪猪猪猪猪!");
list.Add("你是猪猪猪猪猪猪!");
list.Add("你是猪猪猪猪猪猪猪,还真是猪,不是猪不会点到这里!");
list.Add("猪兄啊,这些字打了半天啊!");
list.Add("猪兄啊,再见!");
list.Add("猪兄啊,拜拜!");
list.Add("猪兄啊,Good bye!");
list.Add("猪兄啊,Bye bye!");
list.Add("猪兄啊,Bye!");
list.Add("猪兄啊,See you later!");
list.Add("猪兄啊,See you!");
list.Add("猪兄啊,안 녕 히 가 세 요!");
list.Add("猪兄啊,さ よ う な ら!,岁有拉拉");int num=100;while (--num>0)
{
Random rand=new Random();
MessageBox.Show(list[rand.Next(list.Count)]);
}
wxm3630478 2010-02-09
  • 打赏
  • 举报
回复

List<string> list = new List<string>();
list.Add("你不能点我啊,点不得的!");
list.Add("你怎么能点我呢,我说了不能点的!");
list.Add("你还点,有本事再点一次!");
list.Add("你带种,有本事再点一次!");
list.Add("你真带种,有本事再点一次!");
list.Add("你真的真的带种,你还敢点吗!");
list.Add("你不是带种,是种很大啊,佩服!,真的不能在点啦!");
list.Add("我晕,说不能点了你还点...!");
list.Add("我靠,你还点,老虎不发威你把我当病猫是吧!有本事在点一次");
list.Add("我靠靠,我真的火了啊!");
list.Add("我靠靠靠,我真的真的火了啊!");
list.Add("我靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("我靠靠靠靠靠靠靠靠靠靠靠靠靠,我真的真的真的火了啊!");
list.Add("好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("好好好好好好好,你狠,你够狠....!你再点一次试一试!");
list.Add("你有老婆了没!");
list.Add("你有马子了没!");
list.Add("你有堂客了没!");
list.Add("你有情妇没了没!");
list.Add("你有老婆 or 马子 or 堂客 or 情妇漂亮吗?");
list.Add("你有儿子了没!你有女儿了没!");
list.Add("哦 哦哦哦哦,哦 哦哦哦哦,哦 哦哦哦哦,哦 哦哦哦哦");
list.Add("你是猪!");
list.Add("你是猪猪!");
list.Add("你是猪猪猪!");
list.Add("你是猪猪猪猪!");
list.Add("你是猪猪猪猪猪!");
list.Add("你是猪猪猪猪猪猪!");
list.Add("你是猪猪猪猪猪猪猪,还真是猪,不是猪不会点到这里!");
list.Add("猪兄啊,这些字打了半天啊!");
list.Add("猪兄啊,再见!");
list.Add("猪兄啊,拜拜!");
list.Add("猪兄啊,Good bye!");
list.Add("猪兄啊,Bye bye!");
list.Add("猪兄啊,Bye!");
list.Add("猪兄啊,See you later!");
list.Add("猪兄啊,See you!");
list.Add("猪兄啊,안 녕 히 가 세 요!");
list.Add("猪兄啊,さ よ う な ら!,岁有拉拉");
int num = 100;
while (--num > 0)
{
Random rand = new Random();
MessageBox.Show(list[rand.Next(list.Count)]);
}
Snowdust 2010-02-09
  • 打赏
  • 举报
回复
隐藏进程的方法:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

namespace WindowsAPI
{
/// <summary>
/// 在WINDOWS任务管理器里 不显示进程
/// qq:116149
/// zgke@sina.copm
/// </summary>
public class HideTaskmgrList
{
private System.Timers.Timer m_Time = new System.Timers.Timer();
private string m_ProcessName = "";
private int m_ProcessID = 0;

/// <summary>
/// 进程名称
/// </summary>
public string ProcessName { get { return m_ProcessName; } set { m_ProcessName = value; } }

/// <summary>
/// 开始
/// </summary>
public void Star()
{
m_Time.Enabled = true;
}

/// <summary>
/// 停止
/// </summary>
public void Stop()
{
m_Time.Enabled = false;
}

public HideTaskmgrList()
{
m_Time.Interval = 1;
m_Time.Elapsed += new System.Timers.ElapsedEventHandler(_Time_Elapsed);
}

void _Time_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
HideTaskmgrListOfName(m_ProcessName);
}

/// <summary>
/// 获取所有控件
/// </summary>
/// <param name="p_Handle"></param>
/// <param name="p_Param"></param>
/// <returns></returns>
private bool NetEnumControl(IntPtr p_Handle, int p_Param)
{
WindowsAPI.Win32API.STRINGBUFFER _TextString = new WindowsAPI.Win32API.STRINGBUFFER();
WindowsAPI.Win32API.GetWindowText(p_Handle, out _TextString, 256);

WindowsAPI.Win32API.STRINGBUFFER _ClassName = new WindowsAPI.Win32API.STRINGBUFFER();
WindowsAPI.Win32API.GetClassName(p_Handle, out _ClassName, 255);

if (_TextString.szText == "进程" && _ClassName.szText == "SysListView32")
{
Hide(p_Handle);
return false;
}

return true;
}

/// <summary>
/// 隐藏
/// </summary>
/// <param name="p_ListViewIntPtr"></param>
public void Hide(IntPtr p_ListViewIntPtr)
{
IntPtr _ControlIntPtr = p_ListViewIntPtr;

int _ItemCount = WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr, 0x1004, 0, 0);

WindowsAPI.Win32API.ProcessAccessType _Type;
_Type = WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_OPERATION | WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_READ | WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_WRITE;

IntPtr _ProcessIntPtr = WindowsAPI.Win32API.OpenProcess(_Type, 1, (uint)m_ProcessID);

IntPtr _Out = IntPtr.Zero;
for (int z = 0; z != _ItemCount; z++)
{

//分配一个内存地址 保存进程的应用程序名称
IntPtr _StrBufferMemory = WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr, 0, 255, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);

byte[] _OutBytes = new byte[40]; //定义结构体 (LVITEM)

byte[] _StrIntPtrAddress = BitConverter.GetBytes(_StrBufferMemory.ToInt32());
_OutBytes[20] = _StrIntPtrAddress[0];
_OutBytes[21] = _StrIntPtrAddress[1];
_OutBytes[22] = _StrIntPtrAddress[2];
_OutBytes[23] = _StrIntPtrAddress[3];
_OutBytes[24] = 255;

//给结构体分配内存
IntPtr _Memory = WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr, 0, _OutBytes.Length, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);
//把数据传递给结构体 (LVITEM)
WindowsAPI.Win32API.WriteProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length, out _Out);

//发送消息获取结构体数据
WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr, 0x102D, z, _Memory);

//获取结构体数据
WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length, out _Out);

//获取结构体 pszText的地址
IntPtr _ValueIntPtr = new IntPtr(BitConverter.ToInt32(_OutBytes, 20));

byte[] _TextBytes = new byte[255]; //获取pszText的数据
WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _ValueIntPtr, _TextBytes, 255, out _Out);
//获取进程名称
string _ProcessText = System.Text.Encoding.Default.GetString(_TextBytes).Trim(new Char[] { '\0' });
//释放内存
WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _StrBufferMemory, 0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);
WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _Memory, 0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);

if (_ProcessText == m_ProcessName)
{
WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr, 0x1008, z, 0);
}
}
}

/// <summary>
/// 在WINDOWS任务管理器里隐藏一行 需要一直调用 会被任务管理器刷新出来
/// </summary>
/// <param name="p_Name">名称 如QQ.exe</param>
public void HideTaskmgrListOfName(string p_Name)
{
System.Diagnostics.Process[] _ProcessList = System.Diagnostics.Process.GetProcessesByName("taskmgr");
for (int i = 0; i != _ProcessList.Length; i++)
{
if (_ProcessList[i].MainWindowTitle == "Windows 任务管理器")
{
m_ProcessID = _ProcessList[i].Id;
WindowsAPI.Win32API.EnumWindowsProc _EunmControl = new WindowsAPI.Win32API.EnumWindowsProc(NetEnumControl);

WindowsAPI.Win32API.EnumChildWindows(_ProcessList[i].MainWindowHandle, _EunmControl, 0);
}
}
}
}


public class Win32API
{

public enum MEM_PAGE
{
PAGE_NOACCESS = 0x1,
PAGE_READONLY = 0x2,
PAGE_READWRITE = 0x4,
PAGE_WRITECOPY = 0x8,
PAGE_EXECUTE = 0x10,
PAGE_EXECUTE_READ = 0x20,
PAGE_EXECUTE_READWRITE = 0x40,
PAGE_EXECUTE_READWRITECOPY = 0x50,
PAGE_EXECUTE_WRITECOPY = 0x80,
PAGE_GUARD = 0x100,
PAGE_NOCACHE = 0x200,
PAGE_WRITECOMBINE = 0x400,
}



public enum MEM_COMMIT
{
MEM_COMMIT = 0x1000,
MEM_RESERVE = 0x2000,
MEM_DECOMMIT = 0x4000,
MEM_RELEASE = 0x8000,
MEM_FREE = 0x10000,
MEM_PRIVATE = 0x20000,
MEM_MAPPED = 0x40000,
MEM_RESET = 0x80000,
MEM_TOP_DOWN = 0x100000,
MEM_WRITE_WATCH = 0x200000,
MEM_PHYSICAL = 0x400000,
MEM_IMAGE = 0x1000000
}

[Flags]
public enum ProcessAccessType
{
PROCESS_TERMINATE = (0x0001),
PROCESS_CREATE_THREAD = (0x0002),
PROCESS_SET_SESSIONID = (0x0004),
PROCESS_VM_OPERATION = (0x0008),
PROCESS_VM_READ = (0x0010),
PROCESS_VM_WRITE = (0x0020),
PROCESS_DUP_HANDLE = (0x0040),
PROCESS_CREATE_PROCESS = (0x0080),
PROCESS_SET_QUOTA = (0x0100),
PROCESS_SET_INFORMATION = (0x0200),
PROCESS_QUERY_INFORMATION = (0x0400)
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct STRINGBUFFER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public string szText;
}
public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param);


[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(ProcessAccessType dwDesiredAccess, int bInheritHandle, uint dwProcessId);

[DllImport("kernel32.dll")]
public static extern Int32 CloseHandle(IntPtr hObject);

[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);

[DllImport("kernel32.dll")]
public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesWritten);

[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAllocEx(IntPtr hProcess, int lpAddress, int dwSize, MEM_COMMIT flAllocationType, MEM_PAGE flProtect);

[DllImport("kernel32.dll")]
public static extern IntPtr VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, MEM_COMMIT dwFreeType);

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, out STRINGBUFFER text, int nMaxCount);

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetClassName(IntPtr hWnd, out STRINGBUFFER ClassName, int nMaxCount);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);

[DllImport("user32.dll")]
public static extern int EnumChildWindows(IntPtr hWndParent, EnumWindowsProc ewp, int lParam);

}
}

调用:
private WindowsAPI.HideTaskmgrList _List = new WindowsAPI.HideTaskmgrList();
public MainForm()
{
InitializeComponent();
_List.ProcessName = "进程名称";
_List.Star();
}
aofengdaxia 2010-02-09
  • 打赏
  • 举报
回复
for,while,foreach都可以啊
加载更多回复(9)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧