Seite 1 von 1

RunProgram_ Task ID bei z.B.Access

Verfasst: 16.03.2015 21:29
von megamux
Hallo liebe Leute,

Ich bin ein großer PB Fan....

Ich habe folgendes Problem. Ich benutze RunProgram_ um die Programm ID zurück zu bekommen wenn ich einen
MSaccess MDB über Purebasic starte. Das funktioniert auch.

Aber wenn ich nun eine zweite Access MDB starte dann bekomme ich 0 zurück was definitiv falsch ist.
Kann mir jemand einen Tipp geben?

Danke

Marc
:)

Zur info so Schaut der code aus den ich dazu verwende (nicht von mir entwickelt)

Code: Alles auswählen

EnableExplicit

Define ProcessID

#kExit_Code_Error=1
#kExit_Code_Success=0

Procedure SetPriority(ProgramID.l, PriorityLevel.l)
  Protected ProcessHandle.l

  ProcessHandle = OpenProcess_(#PROCESS_DUP_HANDLE | #PROCESS_SET_INFORMATION, #True, ProgramID)
  If ProcessHandle
    SetPriorityClass_(ProcessHandle, PriorityLevel)
    CloseHandle_(ProcessHandle)
  EndIf
EndProcedure

Procedure GetProcessId_(hProcess)
  Static *pGetProcessId
  Protected *func = AllocateMemory(13)
  PokeS(*func, "GetProcessId", -1, #PB_Ascii)
  If Not *pGetProcessId
    *pGetProcessId=GetProcAddress_(GetModuleHandle_("kernel32.dll"),*func)
  EndIf
 
  If Not *pGetProcessId
    ProcedureReturn 0
  EndIf
  FreeMemory(*func)
  ProcedureReturn CallFunctionFast(*pGetProcessId,hProcess)
EndProcedure

Procedure RunProgram_(ProgramName.s, Parameter.s="", WorkingDirectory.s="", Visible=#SW_SHOW)
  Protected ShellExInfo.SHELLEXECUTEINFO
 
  ShellExInfo\cbSize=SizeOf(ShellExInfo)
  ShellExInfo\fMask=#SEE_MASK_NOCLOSEPROCESS
  ShellExInfo\lpVerb=@"Open"
  ShellExInfo\lpFile=@ProgramName.s
  ShellExInfo\lpParameters=@Parameter.s
  ShellExInfo\lpDirectory=@WorkingDirectory.s
  ShellExInfo\nShow=Visible
 
  ShellExecuteEx_(@ShellExInfo)
 
  ProcedureReturn GetProcessId_(ShellExInfo\hProcess)
EndProcedure
__________________________________________________
Code-Tags hinzugefügt
16.03.2015
RSBasic

Re: RunProgram_ Task ID bei z.B.Access

Verfasst: 16.03.2015 21:58
von Kiffi
ich bekomme 2 unterschiedliche IDs zurück.

Code: Alles auswählen

Debug RunProgram_("msaccess", "d:\test\test_1.mdb")
Debug RunProgram_("msaccess", "d:\test\test_2.mdb")
Grüße ... Peter

Re: RunProgram_ Task ID bei z.B.Access

Verfasst: 17.03.2015 10:37
von megamux
Hallo Peter

Vielen Dank. Ich bin auch zu doof. Ich habe den Aufruf so gestaltet:

Code: Alles auswählen

Debug RunProgram_("d:\test\test_1.mdb")
Das funktioniert auch aber eben nur 1x beim zweiten Aufruf kommt 0 zurück obwohl das Programm geöffnet wird.
Jetzt läufts einwandfrei.

Danke für die schnelle hilfe.

Grüße marc
__________________-
Wer lesen kann ist klar im Vorteil .... :?

Re: RunProgram_ Task ID bei z.B.Access

Verfasst: 17.03.2015 13:47
von NicTheQuick
Das liegt wahrscheinlich daran, dass bei deinem zweiten Aufruf dem Prozess aus dem ersten Aufruf lediglich mitgeteilt wird ein zweites Fenster zu öffnen. Dann sieht das zwar so aus, als ob zwei Programme laufen, aber eigentlich läuft nur eins mit zwei sichtbaren Fenstern.