C# Win32 API 应用

1 创建进程及获取进程的信息

部分代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace CreateProcess
{
public partial class Form1 : Form
{
[DllImport("Kernel32.dll", CharSet = CharSet.Ansi)]
public static extern bool CreateProcess(StringBuilder lpApplicationName, StringBuilder lpCommandLine,
SECURITY_ATTRIBUTES lpProcessAttributes,
SECURITY_ATTRIBUTES lpThreadAttributes,
bool bInheritHandles,
int dwCreationFlags,
StringBuilder lpEnvironment,
StringBuilder lpCurrentDirectory,
ref STARTUPINFO lpStartupInfo,
ref PROCESS_INFORMATION lpProcessInformation
);
[DllImport("Kernel32.dll", CharSet = CharSet.Ansi)]
public static extern bool CloseHandle(IntPtr hObject);
[DllImport("Kernel32.dll", CharSet = CharSet.Ansi)]
public static extern bool TerminateProcess(IntPtr hProcess, uint ExitCode);

[StructLayout(LayoutKind.Sequential)]
public class SECURITY_ATTRIBUTES
{
public int nLength;
public string lpSecurityDescriptor;
public bool bInheritHandle;
}

[StructLayout(LayoutKind.Sequential)]
public struct STARTUPINFO
{
public int cb;
public string lpReserved;
public string lpDesktop;
public int lpTitle;
public int dwX;
public int dwY;
public int dwXSize;
public int dwYSize;
public int dwXCountChars;
public int dwYCountChars;
public int dwFillAttribute;
public int dwFlags;
public int wShowWindow;
public int cbReserved2;
public byte lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}

[StructLayout(LayoutKind.Sequential)]
public struct PROCESS_INFORMATION
{
public IntPtr hProcess;
public IntPtr hThread;
public int dwProcessId;
public int dwThreadId;
}

STARTUPINFO sInfo = new STARTUPINFO();
PROCESS_INFORMATION pInfo = new PROCESS_INFORMATION();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ope = new OpenFileDialog();
ope.ShowDialog();
textBox1.Text = ope.FileName;
}

private void button2_Click(object sender, EventArgs e)
{
bool ret;
//StringBuilder sbCommand = new StringBuilder(1000);
//sbCommand.Append(sCommand);

StringBuilder sbexeFile = new StringBuilder();
sbexeFile.Append(textBox1.Text);

try
{
ret=CreateProcess(sbexeFile, null, null, null, false, 0, null, null,
ref sInfo, ref pInfo);
if (ret == true)
{
MessageBox.Show(textBox1 + " " + "运行成功");
}
else
{
MessageBox.Show(textBox1 + " " + "运行失败");
}
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}

}

private void button3_Click(object sender, EventArgs e)
{
TerminateProcess(pInfo.hProcess, 0);
CloseHandle(pInfo.hProcess);
CloseHandle(pInfo.hThread);
}
}
}

2 枚举窗口,查看窗口信息和操作;

C# Win32 API 应用相关推荐

  1. Don’t Use the Win32 API PostThreadMessage() to Post Messages to UI Threads(翻译)

    大龙的博客 C++博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理 Don't Use the Win32 API PostThreadMessage() to Post Me ...

  2. 揭示Win32 API拦截细节/API hooking revealed (1)

    原文出处:http://www.codeproject.com/system/hooksys.asp 简要介绍 拦截win32 API 调用对于多数windows开发人员来说都一直是很有挑战性的课题, ...

  3. MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)...

    转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...

  4. How to change windows applicatioin's position via Win32 API

    可以使用的Win32 API是: [DllImport("user32.dll")] private extern static bool SetWindowPos(IntPtr ...

  5. 直接用Win32 API创建对话框Demo

    Win32 API包含有对话框函数: Win10,CFree 5.0:新建一个窗口工程: 先看一下CFree自带对话框编辑器:其保存为.DRES:还不知道怎么加入工程:先不管: #include &l ...

  6. Win32 API 窗口版本转换度分秒为小数

    经纬度的度分秒和小数之间转换是做GIS时常用的:下面实现一个Win32 API 版本度分秒转换为小数: 与此网站对比: http://www.gzhatu.com/du2dfm.html 使用VC++ ...

  7. Win32 API、VC++、C# 文件操作函数的初步比较

    一 C# File.ReadAllText(FilePath) : 一次将文本内容全部读完, File.ReadAllLines: 该方法返回一个字符串数组.每一行都是一个数组元素. string[] ...

  8. 控制台调用win32 API 示例二则

    一 控制台显示消息框 #include <stdio.h> #include <windows.h>int main(int argc, char* argv[]) {int ...

  9. Win32 API 打开另一个进程

    Win32 API 打开另一个进程,这是一些黑客编程技术中的一个步骤,当然也可以用来做好事: 首先要包含Tlhelp32.h: 在OpenProcessByProcessNmae函数中通过快照枚举进程 ...

  10. Win32 API 和 ODBC 访问数据库一

    准备用Win32 API和ODBC来访问数据库: 代码如下: /*------------------------------------------------------------win32, ...

最新文章

  1. Asp.net 不安全端口 解决chrome浏览器访问时提示:ERR_UNSAFE_PORT
  2. java 模拟ajax上传图片
  3. mysql参数文件选项组_选项文件(Option Files)/配置文件(Configuration Files)的使用
  4. Redis 的主从复制太强大了!
  5. java.util.Date转换成java.sql.Date
  6. Tiktok预计下半年开通购物车,你有想法做吗?
  7. 程序员的绩效到底是应该衡量项目,还是改 Bug 量?
  8. 欧几里得求最大公约数--JAVA递归实现
  9. python学习手册-python学习手册第5版pdf
  10. cad填充图案乱理石_cad采矿制图时遇到问题的完美解决方法
  11. c语言中的局部变量和全局变量
  12. Rails进阶——框架理论认知与构建方案建设(一)
  13. 正则表达式 REGEX-Regular Expression
  14. 机器人开发--有刷电机 与 无刷电机
  15. 重磅!《中国医学影像人工智能发展报告2021-2022》
  16. RHCSA 2022/10/14
  17. 零撸项目-Star Network注册流程
  18. 熊孩子乱敲键盘攻破linux桌面,“熊孩子”乱敲键盘攻破了Linux桌面 大神:17年前我就警告过...
  19. 用Spring Cloud和Docker搭建微服务平台
  20. 电脑如何用rdp协议登录服务器,RDP(远程桌面协议).ppt

热门文章

  1. ServletContext对象详解
  2. bugku你必须让他停下
  3. C语言用DFS实现找到图的所有路径(邻接矩阵实现)
  4. 正则验证车牌号码,包括新能源车牌
  5. RTX操作系统库方式移植
  6. matlab学习记录之基本操作整理
  7. 【生活】1024,快乐
  8. 终极解决方式——找到占用U盘的程序
  9. 查询mysql存储数据大小_MySQL如何查询数据占用存储空间的大小?
  10. DF以某一列的元素筛选其中属于某个集合的元素的所有行(2个版本函数)