c#.net实现Smartphone,PocketPC进程启动
2006-09-06 11:09
423 查看
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace RDP
{
/// <summary>
/// Utility class for launch programs and files.
/// </summary>
public class ShellExecute
{
public static void Start(string fileName, string parameters)
{
int nSize;
SHELLEXECUTEEX see;
IntPtr pFile;
IntPtr pParams;
see = new SHELLEXECUTEEX();
nSize = fileName.Length * 2 + 2;
pFile = localAlloc(MemoryAllocFlags.LPtr, nSize);
Marshal.Copy(Encoding.Unicode.GetBytes(fileName), 0, pFile, nSize - 2);
nSize = parameters.Length * 2 + 2;
pParams = localAlloc(MemoryAllocFlags.LPtr, nSize);
Marshal.Copy(Encoding.Unicode.GetBytes(parameters), 0, pParams, nSize - 2);
see.lpFile = pFile;
see.lpParameters = pParams;
ShellExecuteEx(see);
LocalFree(pFile);
LocalFree(pParams);
//return see.hProcess;
}
public static void Start(string fileName)
{
Start(fileName, "");
}
private static IntPtr localAlloc(MemoryAllocFlags uFlags, int uBytes)
{
const int GMEM_FIXED = 0x0000;
const int LMEM_ZEROINIT = 0x0040;
const int LPTR = (GMEM_FIXED | LMEM_ZEROINIT);
IntPtr ptr = LocalAlloc(LPTR, (uint)uBytes);
if (ptr == IntPtr.Zero)
throw new Exception("Out of memory!");
return ptr;
}
private enum MemoryAllocFlags : int
{
Fixed = 0x00,
ZeroInit = 0x40,
LPtr = ZeroInit | Fixed
}
#region APIs
[DllImport("coredll.dll")]
private static extern IntPtr LocalAlloc(uint uFlags, uint Bytes);
[DllImport("coredll")]
private static extern IntPtr LocalFree(IntPtr hMem);
[DllImport("coredll")]
private extern static int ShellExecuteEx( SHELLEXECUTEEX ex );
private class SHELLEXECUTEEX
{
public UInt32 cbSize = 60;
public UInt32 fMask = 0;
public IntPtr hwnd = IntPtr.Zero;
public IntPtr lpVerb = IntPtr.Zero;
public IntPtr lpFile = IntPtr.Zero;
public IntPtr lpParameters = IntPtr.Zero;
public IntPtr lpDirectory = IntPtr.Zero;
public int nShow = 0;
public IntPtr hInstApp = IntPtr.Zero;
public IntPtr lpIDList = IntPtr.Zero;
public IntPtr lpClass = IntPtr.Zero;
public IntPtr hkeyClass = IntPtr.Zero;
public UInt32 dwHotKey = 0;
public IntPtr hIcon = IntPtr.Zero;
public IntPtr hProcess = IntPtr.Zero;
}
#endregion
}
}
using System.Runtime.InteropServices;
using System.Text;
namespace RDP
{
/// <summary>
/// Utility class for launch programs and files.
/// </summary>
public class ShellExecute
{
public static void Start(string fileName, string parameters)
{
int nSize;
SHELLEXECUTEEX see;
IntPtr pFile;
IntPtr pParams;
see = new SHELLEXECUTEEX();
nSize = fileName.Length * 2 + 2;
pFile = localAlloc(MemoryAllocFlags.LPtr, nSize);
Marshal.Copy(Encoding.Unicode.GetBytes(fileName), 0, pFile, nSize - 2);
nSize = parameters.Length * 2 + 2;
pParams = localAlloc(MemoryAllocFlags.LPtr, nSize);
Marshal.Copy(Encoding.Unicode.GetBytes(parameters), 0, pParams, nSize - 2);
see.lpFile = pFile;
see.lpParameters = pParams;
ShellExecuteEx(see);
LocalFree(pFile);
LocalFree(pParams);
//return see.hProcess;
}
public static void Start(string fileName)
{
Start(fileName, "");
}
private static IntPtr localAlloc(MemoryAllocFlags uFlags, int uBytes)
{
const int GMEM_FIXED = 0x0000;
const int LMEM_ZEROINIT = 0x0040;
const int LPTR = (GMEM_FIXED | LMEM_ZEROINIT);
IntPtr ptr = LocalAlloc(LPTR, (uint)uBytes);
if (ptr == IntPtr.Zero)
throw new Exception("Out of memory!");
return ptr;
}
private enum MemoryAllocFlags : int
{
Fixed = 0x00,
ZeroInit = 0x40,
LPtr = ZeroInit | Fixed
}
#region APIs
[DllImport("coredll.dll")]
private static extern IntPtr LocalAlloc(uint uFlags, uint Bytes);
[DllImport("coredll")]
private static extern IntPtr LocalFree(IntPtr hMem);
[DllImport("coredll")]
private extern static int ShellExecuteEx( SHELLEXECUTEEX ex );
private class SHELLEXECUTEEX
{
public UInt32 cbSize = 60;
public UInt32 fMask = 0;
public IntPtr hwnd = IntPtr.Zero;
public IntPtr lpVerb = IntPtr.Zero;
public IntPtr lpFile = IntPtr.Zero;
public IntPtr lpParameters = IntPtr.Zero;
public IntPtr lpDirectory = IntPtr.Zero;
public int nShow = 0;
public IntPtr hInstApp = IntPtr.Zero;
public IntPtr lpIDList = IntPtr.Zero;
public IntPtr lpClass = IntPtr.Zero;
public IntPtr hkeyClass = IntPtr.Zero;
public UInt32 dwHotKey = 0;
public IntPtr hIcon = IntPtr.Zero;
public IntPtr hProcess = IntPtr.Zero;
}
#endregion
}
}
相关文章推荐
- c#.net实现Smartphone,PocketPC进程启动
- 用VB.net实现Smartphone中进程启动 (转载)
- 用VB.net实现Smartphone中进程启动
- 用VB.net实现Smartphone中进程启动
- C# 实现shellcode 进程启动注入eip注入
- asp.net C# 语言 Wait方式启动多个 进程的示例
- C#实现启动,关闭与查找进程的方法
- NET(C#)使用WMI事件查询实现对进程和可移动磁盘的监控
- c# wcf NetNamePipeBinding 实现同一系统上不同进程之间的通信
- C#实现进程管理的启动和停止实例
- C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)
- C#.net拖拽实现获得文件路径
- ASP.NET(C#)实现一次性上传多张图片(多个文件)
- .NET(C#):获取进程的CPU使用状况
- C#判断当前启动程序进程是否存在
- Asp.net(c#)实现多线程断点续传
- C#.NET禁止一个程序启动多个实例
- Asp.net(c#)实现多线程断点续传
- 给程序添加启动画面(C#.net )
- Asp.net(c#)实现多线程断点续传