自动按键 http://www.appinn.com/2013-12306-train-tickets/
对应的C#代码at 12:00 shutdown -s12:00
http://www.cnblogs.com/luckdv/articles/1728088.html?login=1
[StructLayout(LayoutKind.Explicit)]
public struct Input
{
[FieldOffset(0)]public Int32 type;
[FieldOffset(4)]public MouseInput mi;
[FieldOffset(4)]public tagKEYBDINPUT ki;
[FieldOffset(4)]public tagHARDWAREINPUT hi;
}
C#中对应代码:
[StructLayout(LayoutKind.Sequential)]
public struct MouseInput
{
public Int32 dx;
public Int32 dy;
public Int32 Mousedata;
public Int32 dwFlag;
public Int32 time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
public struct tagKEYBDINPUT
{
Int16 wVk;
Int16 wScan;
Int32 dwFlags;
Int32 time;
IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
public struct tagHARDWAREINPUT
{
Int32 uMsg;
Int16 wParamL;
Int16 wParamH;
}
我主要是模拟鼠标,所以只需定义鼠标的flag值:
const int MouseEvent_Absolute = 0x8000;
const int MouserEvent_Hwheel = 0x01000;
const int MouseEvent_Move = 0x0001;
const int MouseEvent_Move_noCoalesce = 0x2000;
const int MouseEvent_LeftDown = 0x0002;
const int MouseEvent_LeftUp = 0x0004;
const int MouseEvent_MiddleDown = 0x0020;
const int MouseEvent_MiddleUp = 0x0040;
const int MouseEvent_RightDown = 0x0008;
const int MouseEvent_RightUp = 0x0010;
const int MouseEvent_Wheel = 0x0800;
const int MousseEvent_XUp = 0x0100;
const int MousseEvent_XDown = 0x0080;
c#中模拟鼠标操作的代码:
for (i = X; i <= X+width; i += 450)
//X为Flash窗口的左上角的x轴绝对坐标值。屏幕左上角坐标是(0,0)。width是Flash窗口宽度。
{
for (j = Y; j <= Y +height; j+=150) //Y为Flash窗口的左上角的y轴绝对坐标值。height是Flash窗口高度。
{
MouseInput myMinput = new MouseInput();
myMinput.dx = i;
myMinput.dy = j;
myMinput.Mousedata = 0;
myMinput.dwFlag = MouseEvent_Absolute | MouseEvent_Move | MouseEvent_LeftDown | MouseEvent_LeftUp;
myMinput.time = 0;
Input[] myInput = new Input[1];
myInput[0] = new Input();
myInput[0].type = 0;
myInput[0].mi = myMinput;
UInt32 result = SendInput((uint)myInput.Length, myInput, Marshal.SizeOf(myInput[0].GetType()));
if (result == 0)
{
MessageBox.Show("fail");
}
}
}
知识点:将像素坐标转化为绝对坐标:
API中MouseInput结构中的dx,dy含义是绝对坐标,是相对屏幕的而言的,屏幕左上角的坐标为(0,0),右下角的坐标为 (65535,65535)。而我们在C#中获得的对象(Frame,button,flash等)的坐标都是像素坐标,是跟你当前屏幕的分辨率相关的。 假如你的显示器分辨率是1024*768,那么屏幕左上角的像素坐标是(0,0),右下角坐标为(1024,768)。转换函数如下:
dx = x * (65335/ScreenWidth) //x,y为像素坐标。
dy = y * (65335/ScreenHeight)//ScreenWidth和ScreenHeight,其实是当前显示器的分辨率,获得方法是ScreenWidth=Screen.PrimaryScreen.WorkingArea.Width;
ScreenHeight=Screen.PrimaryScreen.WorkingArea.Height;http://91sp.vido.ws/index.php
string temp_Path = @"C:\Users\muye\Desktop\iecss3\temp.xml";
XDocument xd = XDocument.Load(temp_Path);
//var query = from book in xd.Descendants("Root")
// select new
// {
// age = book.Element("age").Value,
// Time = book.Element("name").Value,
// // tempName=book.Element("FirstName").Value
// };
//foreach (var item in query)
//{
// Console.WriteLine(item.age);
// //Console.WriteLine(item.tempName);
// Console.ReadLine();
//}
var query1 = from a in xd.Elements("Root").Elements("Employees").Elements("Employee")
select new
{
tempName = a.Element("HireDate").Value
};
foreach (var item in query1)
{
Console.WriteLine("hello");
Console.WriteLine(item.tempName);
Console.ReadLine();
}
XElement XEle = new XElement("UserInfos");
for (int i = 0; i < nodeUserName.Length; i++)
{
XEle.Add(
new XElement("UserInfo",
new XAttribute("TableKey", (i + 1).ToString()),
new XAttribute("UserName", nodeUserName.ToString()),
new XAttribute("PassWord", nodePassword.ToString())
)
);
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<FTPSites>
<FTPSite>
<IP>10.85.11.11</IP>
<Port>8080</Port>
</FTPSite>
<FTPSite>
<IP>10.85.11.12</IP>
<Port>8080</Port>
</FTPSite>
<FTPSite>
<IP>10.85.11.13</IP>
<Port>8080</Port>
</FTPSite>
</FTPSites>
</root>