Aktuelle Zeit: 24.05.2013 15:02

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Unicode Problem mit Kill Programm
BeitragVerfasst: 09.04.2012 13:36 
Offline

Registriert: 30.08.2004 08:34
Wohnort: Thailand
Hallo
ich habe ein Problem mit Unicode
den ich leider brauche wegen der blöden Thai Schrift

die untere Procedure funktioniert ohne Unicode 1a
mit aktiviertem Unicode wird die z.B. vlc.exe nicht mehr beendet
und PB 4.51 (mit JaPBe) meldet einen Polink Error - Datei nicht gefunden

ich denke mal durch den Unicode Modus wird der Dateiname nicht richtig übertragen,
aber eine Lösung habe ich trotzden nicht gefunden :(

ich habe schon mehrere Kill Codes getestet aus dem Forum, immer das gleiche wie bei mir
wo liegt mein bzw. der Fehler ?

Danke schonmal für eure Hilfe
Gerhard

Code:
  #PROCESS_TERMINATE = $1
  #PROCESS32LIB = 9999
  #TH32CS_SNAPPROCESS = $2

Procedure KillPrg(ProcessName.s)
 Debug ProcessName
 
  If OpenLibrary (#PROCESS32LIB, "kernel32.dll")
    snap= CallFunction (#PROCESS32LIB, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0)
    If snap
      Define.PROCESSENTRY32 Proc32
      Proc32\dwSize = SizeOf (PROCESSENTRY32)
      If CallFunction (#PROCESS32LIB, "Process32First", snap, @Proc32)
        Repeat
          If PeekS(@Proc32 + 36, 296) = ProcessName.s
            phandle = OpenProcess_ (#PROCESS_TERMINATE, #False, PeekL(@Proc32 + 8))
            If phandle <> #Null
                 If TerminateProcess_ (phandle, 1) : result = #True:  EndIf
              CloseHandle_ (phandle)
            EndIf
          EndIf
        Until CallFunction (#PROCESS32LIB, "Process32Next", snap, @Proc32) = 0
      EndIf
      CloseHandle_ (snap)
    EndIf
    CloseLibrary (#PROCESS32LIB)
  EndIf
EndProcedure

KillPrg("vlc.exe")      ; VLC Player



Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Unicode Problem mit Kill Programm
BeitragVerfasst: 09.04.2012 14:00 
Offline
-= Anfänger =-
Benutzeravatar

Registriert: 29.08.2004 03:07
Warum benutzt Du nicht direkt Process32First_()?

Da Du CallFunction nimmst, mußt Du bei Unicode dann "Process32FirstW" aufrufen.
Wenn Du direkt Process32First_() nimmst, geschieht das automatisch.

Ein anderes Problem war die Struktur PROCESSENTRY32 - aber nur bei 64bit PB Compiler.
Die Struktur für 64bit ist ab PB 4.61 beta1 gefixt.

Siehe:
- Unicode Process32First
- [Done] WinAPI structure PROCESSENTRY32 wrong for PB/Win x64
- PureBasic 4.61 beta 1 - WinAPI structure changes

Die Lösung ist also:
Wenn Du 64bit Compiler benutzt -> eigene, gefixte Struktur oder PB4.61beta1+ nehmen.
Wenn Du 32bit Compiler benutzt -> direkt Process32First_() nehmen oder CallFunction mit "Process32FirstW" für Unicode


Das Gleiche gilt für Process32Next -> Process32NextW.


Code:
"PeekS(@Proc32 + 36, 296)" solltest Du nach         "PeekS(@Proc32\szExeFile, #MAX_PATH)" ändern.
"PeekL(@Proc32 + 8)"       kannst Du direkt nutzen: "Proc32\th32ProcessID"

_________________
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Unicode Problem mit Kill Programm
BeitragVerfasst: 09.04.2012 14:15 
Offline
Benutzeravatar

Registriert: 28.07.2005 12:39
Wenn du Callfunction benutzt, musst du auch die Unicodefunktionen ansprechen (in der Regel sind das die Funktionen mit dem W am Ende). So wie du es jetzt hast, rufst du in beiden Modi nur die normalen Funktionen auf.
Das kann so natuerlich nicht funktionieren.

Versuch es mal so :
Code:
Procedure KillPrg(ProcessName.s)
      
   Protected snapshot.i
   Protected prinfo.PROCESSENTRY32
   Protected pname.s   
   Protected phandle.i
   Protected pexitc.i
   
   prinfo\dwSize = SizeOf(PROCESSENTRY32)
   
   snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
   
   If snapshot
      
      If Process32First_(snapshot, prinfo)
         
         Repeat
            pname = PeekS(@prinfo\szExeFile)
            
            If ProcessName = pname
               
               phandle = OpenProcess_(#PROCESS_TERMINATE, #False, prinfo\th32ProcessID)
               
               If phandle
                  TerminateProcess_(phandle, @pexitc)                  
                  CloseHandle_(phandle)
               EndIf
               
            EndIf
            
         Until Process32Next_(snapshot, prinfo) = 0
         
      EndIf
      
      CloseHandle_(snapshot)
      
   EndIf
   
   
   ProcedureReturn pexitc
EndProcedure

_________________
Suche


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Unicode Problem mit Kill Programm
BeitragVerfasst: 09.04.2012 14:54 
Offline

Registriert: 30.08.2004 08:34
Wohnort: Thailand
Danke an euch für die schnelle Hilfe

funktioniert perfekt


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye