C# Win32 API 应用
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 应用相关推荐
- Don’t Use the Win32 API PostThreadMessage() to Post Messages to UI Threads(翻译)
大龙的博客 C++博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理 Don't Use the Win32 API PostThreadMessage() to Post Me ...
- 揭示Win32 API拦截细节/API hooking revealed (1)
原文出处:http://www.codeproject.com/system/hooksys.asp 简要介绍 拦截win32 API 调用对于多数windows开发人员来说都一直是很有挑战性的课题, ...
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)...
转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...
- How to change windows applicatioin's position via Win32 API
可以使用的Win32 API是: [DllImport("user32.dll")] private extern static bool SetWindowPos(IntPtr ...
- 直接用Win32 API创建对话框Demo
Win32 API包含有对话框函数: Win10,CFree 5.0:新建一个窗口工程: 先看一下CFree自带对话框编辑器:其保存为.DRES:还不知道怎么加入工程:先不管: #include &l ...
- Win32 API 窗口版本转换度分秒为小数
经纬度的度分秒和小数之间转换是做GIS时常用的:下面实现一个Win32 API 版本度分秒转换为小数: 与此网站对比: http://www.gzhatu.com/du2dfm.html 使用VC++ ...
- Win32 API、VC++、C# 文件操作函数的初步比较
一 C# File.ReadAllText(FilePath) : 一次将文本内容全部读完, File.ReadAllLines: 该方法返回一个字符串数组.每一行都是一个数组元素. string[] ...
- 控制台调用win32 API 示例二则
一 控制台显示消息框 #include <stdio.h> #include <windows.h>int main(int argc, char* argv[]) {int ...
- Win32 API 打开另一个进程
Win32 API 打开另一个进程,这是一些黑客编程技术中的一个步骤,当然也可以用来做好事: 首先要包含Tlhelp32.h: 在OpenProcessByProcessNmae函数中通过快照枚举进程 ...
- Win32 API 和 ODBC 访问数据库一
准备用Win32 API和ODBC来访问数据库: 代码如下: /*------------------------------------------------------------win32, ...
最新文章
- Asp.net 不安全端口 解决chrome浏览器访问时提示:ERR_UNSAFE_PORT
- java 模拟ajax上传图片
- mysql参数文件选项组_选项文件(Option Files)/配置文件(Configuration Files)的使用
- Redis 的主从复制太强大了!
- java.util.Date转换成java.sql.Date
- Tiktok预计下半年开通购物车,你有想法做吗?
- 程序员的绩效到底是应该衡量项目,还是改 Bug 量?
- 欧几里得求最大公约数--JAVA递归实现
- python学习手册-python学习手册第5版pdf
- cad填充图案乱理石_cad采矿制图时遇到问题的完美解决方法
- c语言中的局部变量和全局变量
- Rails进阶——框架理论认知与构建方案建设(一)
- 正则表达式 REGEX-Regular Expression
- 机器人开发--有刷电机 与 无刷电机
- 重磅!《中国医学影像人工智能发展报告2021-2022》
- RHCSA 2022/10/14
- 零撸项目-Star Network注册流程
- 熊孩子乱敲键盘攻破linux桌面,“熊孩子”乱敲键盘攻破了Linux桌面 大神:17年前我就警告过...
- 用Spring Cloud和Docker搭建微服务平台
- 电脑如何用rdp协议登录服务器,RDP(远程桌面协议).ppt