Spy++的应用之千千静听播放器的控制

先看一段代码:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Diagnostics; namespace TTPlayerControl { public partial class Form1 : Form { [DllImport("USER32.DLL")] public static extern IntPtr FindWindow(string className, string WindowName); [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage( IntPtr hWnd, // handle to destination window int Msg, // message IntPtr wParam, // first message IntPtr lParam // second message ); [DllImport("USER32.DLL")] public static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("USER32.DLL")] public static extern IntPtr GetDlgItem( IntPtr hDlg, // handle of dialog box int nIDDlgItem // identifier of control ); [DllImport("USER32.DLL", CharSet = CharSet.Auto)] private static extern int ShowWindow( System.IntPtr hWnd, int nCmdShow ); public Form1() { InitializeComponent(); } //获取窗口句柄 private void button3_Click(object sender, EventArgs e) { getHander(); } //获取句柄 IntPtr nextSongHander; IntPtr lastSongHander; IntPtr startOrPauseSongHander; IntPtr stopSongHander; IntPtr exitHander; IntPtr parentHander; private void getHander() { nextSongHander = GetDlgItem(parentHander, 32006); lastSongHander = GetDlgItem(parentHander, 32005); startOrPauseSongHander = GetDlgItem(parentHander, 32000); stopSongHander = GetDlgItem(parentHander, 32002); exitHander = GetDlgItem(parentHander, 57665); } //load 启动TTPLAYER 获取窗口句柄 Process p = new Process(); private void Form1_Load(object sender, EventArgs e) { parentHander = FindWindow("TTPlayer_PlayerWnd", null); if (parentHander == IntPtr.Zero) { p.StartInfo.FileName = "ttplayer.EXE"; //D:/TTPlay p.Start(); } else { getHander(); } while (parentHander == IntPtr.Zero) { parentHander = FindWindow("TTPlayer_PlayerWnd", null); } while (exitHander == IntPtr.Zero || nextSongHander == IntPtr.Zero || lastSongHander == IntPtr.Zero || startOrPauseSongHander == IntPtr.Zero || stopSongHander == IntPtr.Zero) { getHander(); } } private void btnExit_Click(object sender, EventArgs e) { messageSender(exitHander); this.Close(); } //sendmessage private void messageSender(IntPtr hander) { SendMessage(hander, 0x201, IntPtr.Zero, IntPtr.Zero); SendMessage(hander, 0x202, IntPtr.Zero, IntPtr.Zero); } //下一首 private void button2_Click(object sender, EventArgs e) { messageSender(nextSongHander); } //上一首 private void btnLast_Click(object sender, EventArgs e) { messageSender(lastSongHander); } //停止 private void btnStop_Click(object sender, EventArgs e) { messageSender(stopSongHander); } //暂停or开始 private void btnStartOrPause_Click(object sender, EventArgs e) { messageSender(startOrPauseSongHander); } //显示主窗体 private void btnShowMainWindow_Click(object sender, EventArgs e) { ShowWindow(parentHander, 1); } //最小化 private void btnHiddenMainWindow_Click(object sender, EventArgs e) { ShowWindow(parentHander, 2); } } }

问题1:parentHander = FindWindow("TTPlayer_PlayerWnd ", null);

问题2: nextSongHander = GetDlgItem(parentHander, 32006 );

红色区域怎么得到的?

其实我们经常编程序,但是忘记程序运行的一些原理。在windows操作系统上,无非就是得到一个控件的ID或者其句柄,对这个控件进行发送消息来控制所以才会有nextSongHander = GetDlgItem(parentHander, 32006); 把得到的ID转换成句柄

//sendmessage private void messageSender(IntPtr hander) { SendMessage(hander, 0x201, IntPtr.Zero, IntPtr.Zero); SendMessage(hander, 0x202, IntPtr.Zero, IntPtr.Zero); }

发送给窗口中的某个控件。进而控制整个程序的动作。

SPY++就是获取某个控件类,控件的ID的工具。具体的使用可以参考http://blog.csdn.net/benny5609/archive/2007/10/19/1833477.aspx

http://www.java2000.net/todoshow.jsp?id=63557

http://www.vckbase.com/code/winsys/message/qqlogin.zip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值