首页 > 编程语言 >调用Exe程序并且出现界面 CreateProc(ProcessName:String)

调用Exe程序并且出现界面 CreateProc(ProcessName:String)

时间:2024-11-15 10:07:16浏览次数:1  
标签:String nil saProcess ProcessName CreateProc sizeof Hd Lp

Function GetProcessHandleAsName(Name:String):THandle;
Var
Hd,Hs:THandle;
dExit:Cardinal;
Tmp,Tmp1:String;
Lp:TProcessEntry32;
begin
Result:=0;
Lp.dwSize:=sizeof(TProcessEntry32);
Hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if Process32First(Hd,Lp) then
Repeat
Tmp:=UpperCase(Trim(Name));
Tmp1:=Trim(UpperCase(Lp.szExeFile));
if AnsiPos(Tmp,Tmp1)>0 then
begin
Result:=OpenProcess(PROCESS_ALL_ACCESS,true,Lp.th32ProcessID);
break;
end
Until Process32Next(Hd,Lp)=False;
end;

procedure CreateProc(ProcessName:String);
Var
siStartupInfo:STARTUPINFO;
saProcess,saThread:SECURITY_ATTRIBUTES;
piProcInfo:PROCESS_INFORMATION;
Hd:Cardinal;
ProcessHd:THandle;
Hds:THandle;
Str:String;
begin
ProcessHd:=GetProcessHandleAsName('Explorer');
if ProcessHd=0 then
Exit;
if OpenProcessToken(ProcessHd,TOKEN_ALL_ACCESS,Hds) then
if DuplicateTokenEx(Hds,TOKEN_ALL_ACCESS,nil,SecurityIdentification,TokenPrimary,Hd) then
begin
ZeroMemory(@siStartupInfo,sizeof(siStartupInfo));
siStartupInfo.cb:=sizeof(siStartupInfo);
saProcess.nLength:=sizeof(saProcess);
saProcess.lpSecurityDescriptor:=nil;
saProcess.bInheritHandle:=false;
saThread.nLength:=sizeof(saThread);
saThread.lpSecurityDescriptor:=nil;
saThread.bInheritHandle:=false;
CreateProcessAsUser(Hd,nil,PChar(ProcessName),nil,nil,false,
CREATE_DEFAULT_ERROR_MODE,nil,nil,siStartupInfo,piProcInfo);
end;
end;

标签:String,nil,saProcess,ProcessName,CreateProc,sizeof,Hd,Lp
From: https://www.cnblogs.com/cinemaparadiso/p/18547454

相关文章

  • stringRedisTemplate 异步操作的问题记录
    一、问题背景StringRedisTemplate使用stringRedisTemplate.opsForValue().set时,会出现set之后立马get获取值,发现获取不到set进去的值。二、问题原因1、在使用redisson的情况下,stringRedisTemplate.opsForValue().set操作会是异步操作,造成。你在set之后,立马get获取值的时候会......
  • C++学习笔记之string容器、vector容器
    我们读过的书,说过的话,见过的山水,见到的人和事,最终都会变成我们脚下的的路。1.string容器string是C++风格的字符串,而string本质上是一个类。#include<iostream>usingnamespacestd;#include<string>//以下参数为constchar*类型与string类型的函数参数可以......
  • # StringBoot项目配置SSL证书及配置Nginx ##
    一、证书相关命令1.key转换成.pemopensslrsa-inexample.key-outexample.pem2.crt转换成.pemopensslx509-inexample.crt-outexample.pem二、配置流程1.在nginx目录下创建cert文件夹,导入证书文件及对应的key文件2.修改application.yml配置文件server:port:910......
  • C++基础语法实现写时复制CowString
    前言: CowString写时复制设计思路难点:通过下标访问字符串元素的基本思路重载[]运算符,在函数中直接返回该位置指针的解引用,但此时返回值为char类型,对于进行单个字符串修改的操作,如:str[1]='H';,无法处理赋值时的写时复制操作,只能通过输出流运算符输出char。解决方法:可以在Cow......
  • JavaScript常用对象方法一:字符串(string)
    string对象有很多方法,但一般开发里,一些方法很少用到,比如concat(),他的作用似乎将两个字符串拼接起来,但开发时,使用加号也能实现字符串拼接效果,所以这种方法就不介绍了。这里只介绍一些开发常用的方法,不多,但都很重要,属于必须掌握的方法1.indexOf()返回某个指定的字符串值在字符串......
  • Java String类
    publicclassDemoTest{publicstaticvoidmain(String[]args){/***String类型是不可变的:不可变对象,意味着一旦进行修改,就会产生新的对象*/Strings1="123";System.out.println(System.identityHashCode(s1));......
  • String,StringBuffer、StringBuilder的区别
    1、可变性String:是不可变的、其内部是fianl修饰的,每次变更都会创建一个新的对象。StringBuffer、StringBuilder是可变的,字符串的变更是不会创建新对象的。2、线程安全性String是不变的,线程安全的。StringBuffer是线程安全的,每次操作方法是都会添加synchronized同步关键字。......
  • Java常用方法:StringUtils.isNotBlank()、StringUtils.isEmpty()、去除空格的函数、手
    Java常用方法:StringUtils.isNotBlank()、StringUtils.isEmpty()、去除空格的函数、手机号中间4位换成*、判断字符是否为数字要使用工具类StringUtils,首先得导入依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><ve......
  • HDU - 4821 String
    给定字符串\(S\)。求有多少长\(M\timesL\)的子串,使得将其划分成\(M\)个长度为\(L\)的字符串\(S_1,S_2,\dotsS_M\)互不相同。\(1\leM\timesL\le|S|\le10^5\)。从\(0\)起下标。显然这些字符串的起始位置在模\(L\)意义下相同。不妨枚举这个值\(r\in[......
  • JAVA重写(override)toString方法
    1.toString()方法一般出现在System.out.println(类名.toString());toString()是一种自我描述方法本身返回的是getClass().getName()+“@”+Integer.toHexString(hashCode());也就是类名+@+hashCode的值重写toString()只会对类生效,并不能字符串生效; 2.为什么要重......