Thread/Prozess einfrieren [VB.net, C#,...]

05/28/2010 14:53 waldi_#1
huhu leute
weiß einer von euch wie man einen prozess einfrieren kann?
also was ich bis jetzt ergooglen konnte waren nur solche codes:
Code:
using System.Threading;
using SC = System.Console;

class Program {
  public static void Main() {
    Thread t = new Thread(new ThreadStart(Program.worker));
    t.Start();
    SC.WriteLine("Press Enter to suspend");
    SC.ReadLine();
    t.Suspend();
    SC.WriteLine("Press Enter to resume");
    SC.ReadLine();
    t.Resume();
  }
  static void worker() {
    for (;;) SC.Write("{0}\r", System.DateTime.Now);
  }
}
heißt ein thread wird erstellt und dann ge-supended
aber wie sprech ich jetzt zb notepad.exe an und frier das dann ein?

ich hab noch das hier gefunden:
[Only registered and activated users can see links. Click Here To Register...]

nur versteh ich das nicht ganz da ich noch nie in c++ gecodet hab..
05/28/2010 15:08 Σternαl.#2
PHP Code:
Func _PROCESSSUSPEND($PROCESSID)
    If 
$PROCESSID Then
        
Global $AI_HANDLE DllCall("kernel32.dll""int""OpenProcess""int"2035711"int"False"int"$PROCESSID)
        Global 
$I_SUCESS DllCall("ntdll.dll""int""NtSuspendProcess""int"$AI_HANDLE[0])
        
DllCall("kernel32.dll""ptr""CloseHandle""ptr"$AI_HANDLE)
        If 
IsArray($I_SUCESSThen
            
Return 1
        
Else
            
SetError(1)
            Return 
0
        
EndIf
    Else
        Return 
SetError(2)
    EndIf
EndFunc 
Ich weiß zwar, dass du kein AutoIt kannst (?) aber vllt hilft es dir ja^^
Da kannst du in der Funktion DllCall die WinAPI's raussuchen.
05/28/2010 16:44 waldi_#3
Wenn ich das richtig verstanden hab:

Code:
Global $AI_HANDLE = DllCall("kernel32.dll", "int", "OpenProcess", "int", 2035711, "int", False, "int", $PROCESSID)
öffnet den prozess, aber was genau schreibt er in $AI_HANDLE ?

Code:
Global $I_SUCESS = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $AI_HANDLE[0])
friert den prozess dann ein? da $AI_HANDLE[0] steht müsste es also ein array sein ?

Code:
DllCall("kernel32.dll", "ptr", "CloseHandle", "ptr", $AI_HANDLE)
schließt den prozess oder nur $AI_HANDLE ?

aber schonmal danke, hilft mir n bisschen weiter^^
05/28/2010 20:38 Σternαl.#4
Das müsste S4 freezen, sobald es gestartet ist.

PHP Code:
#include <windows.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    
HWND hwnd;

    do
    {
        
hwnd FindWindow(0,L"S4 Client");
    }
    while (!
hwnd);
    
    
Sleep(800);

    
cout << "Windowhandle: " << hwnd << endl;
        
    
DWORD Id;
    
GetWindowThreadProcessId(hwnd,&Id);

    if(!
Id)
    {
        
cout << "Process ID not found! Errorcode : " << GetLastError() << endl;
    }

    else
    {
        
cout << "Process ID: " << Id << endl;
    
        
HANDLE ProcessHandle;
        
ProcessHandle OpenProcess(PROCESS_ALL_ACCESS FALSEId);

        if(!
ProcessHandle)
        {
           
cout << "Process Handle not found! Errorcode : " << GetLastError() << endl;
        }
            
        else
        {
            
cout << "Process Handle: " << ProcessHandle << endl;
               
            
SuspendThread(ProcessHandle);

            
CloseHandle(ProcessHandle);
        }
    }    
cin.get();