Jump to content

Recommended Posts

Posted (edited)

WINAPI_CreateProcess

#include <StructureConstants.au3>








$ProcessID = WINAPI_CreateProcess("Command.exe","/Q /F",@ScriptDir & "\")
$ProcessID = WINAPI_CreateProcess("Command.exe",0,@ScriptDir & "\")
$ProcessID = WINAPI_CreateProcess(@ScriptDir & "\Command.exe",0,0)
$ProcessID = WINAPI_CreateProcess(@ScriptDir & "\Command.exe","/Q /F",0)


Func WINAPI_CreateProcess( _
                    $lpApplicationName = 0, _
                    $lpCommandLine = 0, _
                    $lpCurrentDirectory = 0 , _
                    $lpProcessAttributes = 0, _
                    $lpThreadAttributes = 0, _
                    $bInheritHandles = True, _
                    $dwCreationFlags = 0, _
                    $lpEnvironment = 0 )
;CreateProcess Function
;http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx
Local $VarType1,$VarType2,$lpStartupInfo,$StartupInfo,$lpProcessInformation,$ProcessInformation


if Not IsString($lpApplicationName) Or $lpApplicationName  == "" Then
$lpApplicationName = 0
$VarType1 = "int"
Else
$VarType1 = "str"
EndIf
if Not IsString($lpCommandLine) Or $lpCommandLine == "" Then
$lpCommandLine = 0
$VarType2 = "int"
Else
$lpCommandLine = " " & $lpCommandLine & " "
$VarType2 = "str"
EndIf
if Not IsString($lpCurrentDirectory) Or $lpCurrentDirectory == "" Then
$lpCurrentDirectory = 0
$VarType3 = "int"
Else
$VarType3 = "str"
EndIf


$StartupInfo = DllStructCreate($tagSTARTUPINFO)
DllStructSetData($StartupInfo,"Size",DllStructGetSize($StartupInfo))
$lpStartupInfo = DllStructGetPtr($StartupInfo)
$ProcessInformation = DllStructCreate($tagPROCESS_INFORMATION)
$lpProcessInformation = DllStructGetPtr($ProcessInformation)

$BOOL = DllCall("Kernel32.dll","int","CreateProcess",$VarType1,$lpApplicationName,$VarType2,$lpCommandLine , _
"ptr",$lpProcessAttributes,"ptr",$lpThreadAttributes,"int",$bInheritHandles,"long",$dwCreationFlags , _
"ptr",$lpEnvironment ,$VarType3,$lpCurrentDirectory,"ptr",$lpStartupInfo,"ptr",$lpProcessInformation)
if @error Then Return SetError(@error,0,0)
if $BOOL[0] = 0 Then SetError(@error,0,$BOOL[0])
Return SetError(@error,0,DllStructGetData($ProcessInformation,"ProcessID"))
EndFunc

Command.exe

If $CMDLINE[0] > 0 Then
$TXT = ""
For $i = 1 To $CMDLINE[0] Step 1
$TXT = $TXT & " " & $CMDLINE[$i]
Next
MsgBox(0,"lpCommandLine",$TXT)
Else
MsgBox(0,"lpCommandLine","No CommandLine")
EndIf
Edited by wolf9228

صرح السماء كان هنا

 

Posted (edited)
Posted (edited)

$ProcessID = WINAPI_CreateProcess("Command.exe","/Q /F",@ScriptDir)

Don`t work.

EDIT:

I use Windows XP.

EDIT2:

What's wrong with ShellExecute() or Run()?

Also In Autoit library The Function does not work correctly

LPCTSTR mean A part In Autoit But there is something else in this Function

Try this code

#include <StructureConstants.au3>
$ProcessID = WINAPI_CreateProcess("Command.exe","/Q /F",@ScriptDir & "\")
$ProcessID = WINAPI_CreateProcess("Command.exe",0,@ScriptDir & "\")
$ProcessID = WINAPI_CreateProcess(@ScriptDir & "\Command.exe",0,0)
$ProcessID = WINAPI_CreateProcess(@ScriptDir & "\Command.exe","/Q /F",0)


Func WINAPI_CreateProcess( _
                    $lpApplicationName = 0, _
                    $lpCommandLine = 0, _
                    $lpCurrentDirectory = 0 , _
                    $lpProcessAttributes = 0, _
                    $lpThreadAttributes = 0, _
                    $bInheritHandles = True, _
                    $dwCreationFlags = 0, _
                    $lpEnvironment = 0 )
;CreateProcess Function
;http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx
Local $VarType1,$VarType2,$lpStartupInfo,$StartupInfo,$lpProcessInformation,$ProcessInformation


if Not IsString($lpApplicationName) Or $lpApplicationName  == "" Then
$lpApplicationName = 0
$VarType1 = "int"
Else
$VarType1 = "str"
EndIf
if Not IsString($lpCommandLine) Or $lpCommandLine == "" Then
$lpCommandLine = 0
$VarType2 = "int"
Else
$lpCommandLine = " " & $lpCommandLine & " "
$VarType2 = "str"
EndIf
if Not IsString($lpCurrentDirectory) Or $lpCurrentDirectory == "" Then
$lpCurrentDirectory = 0
$VarType3 = "int"
Else
$VarType3 = "str"
EndIf


$StartupInfo = DllStructCreate($tagSTARTUPINFO)
DllStructSetData($StartupInfo,"Size",DllStructGetSize($StartupInfo))
$lpStartupInfo = DllStructGetPtr($StartupInfo)
$ProcessInformation = DllStructCreate($tagPROCESS_INFORMATION)
$lpProcessInformation = DllStructGetPtr($ProcessInformation)

$BOOL = DllCall("Kernel32.dll","int","CreateProcess",$VarType1,$lpApplicationName,$VarType2,$lpCommandLine , _
"ptr",$lpProcessAttributes,"ptr",$lpThreadAttributes,"int",$bInheritHandles,"long",$dwCreationFlags , _
"ptr",$lpEnvironment ,$VarType3,$lpCurrentDirectory,"ptr",$lpStartupInfo,"ptr",$lpProcessInformation)
if @error Then Return SetError(@error,0,0)
if $BOOL[0] = 0 Then SetError(@error,0,$BOOL[0])
Return SetError(@error,0,DllStructGetData($ProcessInformation,"ProcessID"))
EndFunc
Edited by wolf9228

صرح السماء كان هنا

 

Posted (edited)

What's wrong with ShellExecute() or Run()?

These two function Working With the WINAPI functions

Meaning that they are A String Data In Autoit

Edited by wolf9228

صرح السماء كان هنا

 

Posted

What's wrong with ShellExecute() or Run()?

These two function Working With the WINAPI functions

Meaning that they are A String Data In Autoit

You understand that you say? I suggest you a more detailed look into the matter. The Run() function is based on CreateProcess() API function. Anyway, without much need no sense to avoid use of native AutoIt functions.

  • 8 years later...
Posted (edited)

Can you specify the DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS process creation flag with Run()? I'm looking at implementing a direct CreateProcess() call via AutoIt so I can run a process with one of the two aforementioned flags.

For some reason reason people get sad for grave-digging here, but there's relevant context in this post. I just googled my question and was brought here.

EDIT

I should note that the original function worked perfectly except that it runs in SW_HIDE. I'm trying to figure out how to run it in SW_NORMAL. From what I can tell, $tagSTARTUPINFO is set to ShowWindow. Also, I confirmed the const looks pretty much the same as it does in the doc:

Quote

dword Size;ptr Reserved1;ptr Desktop;ptr Title;dword X;dword Y;dword XSize;dword YSize;dword XCountChars;dword YCountChars;dword FillAttribute;dword Flags;word ShowWindow;word Reserved2;ptr Reserved3;handle StdInput;handle StdOutput;handle StdError

 

Edited by VertigoRay
Additional info without replies.

Figure IT out!http://vertigion.com

Posted

This function has been added to the standard WinAPI UDFs in WinAPIProc.au3. This thread is out of date. That's why we frown upon digging up 9 year old posts, the language changes over time and these types of threads become moot.

You can send the standard _WinAPI_CreateProcess a $tagSTARTUPINFO structure set the way you want it to.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...