游戏地址:http://gabrielecirulli.github.io/2048/
带AI的游戏地址:http://ov3y.github.io/2048-AI/
游戏的目的很简单,使用上下左右键移动方块,使其合并,并最终得到2048。如果在没有得到2048之前棋盘就满了,那么就判定为游戏失败。
虽然看起来很好(dan)玩(teng)但是确实是一个蛮不错的游戏哈哈=。=
游戏地址:http://gabrielecirulli.github.io/2048/
带AI的游戏地址:http://ov3y.github.io/2048-AI/
游戏的目的很简单,使用上下左右键移动方块,使其合并,并最终得到2048。如果在没有得到2048之前棋盘就满了,那么就判定为游戏失败。
虽然看起来很好(dan)玩(teng)但是确实是一个蛮不错的游戏哈哈=。=
摘自http://msdn.microsoft.com/zh-tw/library/ms171548(v=vs.110).aspx
首先,使用DllImport引入两个函数:
// Get a handle to an application window.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
然后首先使用FindWindow函数获取到需要按键的窗口句柄,以计算器为例。这里体现了这个方法的局限性,就是似乎不能触发全局快捷键。
// Get a handle to the Calculator application. The window class
// and window name were obtained using the Spy++ tool.
IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator");
然后使用SetForegroundWindow函数将这个窗口调到最前。
SetForegroundWindow(calculatorHandle);
接下来就可以直接使用SendKeys.SendWait之类的发送按键了。
SendKeys.SendWait("111");
SendKeys.SendWait("*");
SendKeys.SendWait("11");
SendKeys.SendWait("=");
完整代码如下:
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Windows.Forms;
// Get a handle to an application window.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
// Send a series of key presses to the Calculator application.
private void button1_Click(object sender, EventArgs e)
{
// Get a handle to the Calculator application. The window class
// and window name were obtained using the Spy++ tool.
IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator");
// Verify that Calculator is a running process.
if (calculatorHandle == IntPtr.Zero)
{
MessageBox.Show("Calculator is not running.");
return;
}
// Make Calculator the foreground application and send it
// a set of calculations.
SetForegroundWindow(calculatorHandle);
SendKeys.SendWait("111");
SendKeys.SendWait("*");
SendKeys.SendWait("11");
SendKeys.SendWait("=");
}
注意如果是命令行程序的话需要手动添加System.Windows.Forms引用,否则找不到SendKeys类。
.NET中默认的FolderBrowserDialog是一个很丑的XP风格的文件夹选择对话框,对用户极其不友好。微软估计也是想到了这个问题,所以提供了一套叫
Windows® API Code Pack for Microsoft® .NET Framework的东西,这里面实现了一个Win7风格的文件夹选择对话框,非常漂亮,而且比较友好。
下载地址及介绍:http://archive.msdn.microsoft.com/WindowsAPICodePack
百度网盘下载地址:http://pan.baidu.com/s/1i3606m5