Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> handle of the application в handle of the window, определение указателя окна 
V
    Опции темы
Fedia
Дата 11.9.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 1
Всего: 13



Цитата(Romikgy @  11.9.2006,  08:49 Найти цитируемый пост)
GetProcessId требует хендл процесса , а не его хистенс

Я же уже подводил к этому smile
Цитата(Romikgy @  6.9.2006,  08:45 Найти цитируемый пост)
Цитата(Fedia @  5.9.2006,  22:06 )    
Это разве одно и тоже ?    

получается да

Или я тебя не понял ?


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Romikgy
Дата 11.9.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



скорее всего smile
Цитата(Romikgy @  11.9.2006,  07:49 Найти цитируемый пост)
http://www.codeproject.com/win32/Remote.asp 

смотрел?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Fedia
Дата 12.9.2006, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 1
Всего: 13



Цитата(Romikgy @  11.9.2006,  12:59 Найти цитируемый пост)
смотрел?

Посмотрел. Не нашел там прямого указания, как вообще можно использовать HINSTANCE от ShellExecute. Кроме того заинтересовала терминология, озвученная автором статьи. Имеем:
Цитата

- TDB (Thread Database);
- pointer to the Process Database (PDB);
- pointer to the thread object (pTDB);
- process identifier (PID);
- process handle;
- pointer to a process object (PDB);
- thread identifier (TID);

Является ли результат, возвращаемый ShellExecute чем-то из вышеперечисленного ? Мне кажется что нет.

Romikgy, в общем, хватит говорить загадками, колись, что хотел сказать smile


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Romikgy
Дата 12.9.2006, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Fedia @  12.9.2006,  00:33 Найти цитируемый пост)
хватит говорить загадками, колись, что хотел сказать

Че ?! да ни че просто помочь хотел, а там есть 3 способа получения пида чужего процесса
Код

GetProcessId

GetProcessId() returns the process identifier (PID) of the specified process. It's a convenient way of converting a process handle to the corresponding PID. The Kernel32 function GetProcessId() is only implemented on Win XP or higher. On Windows NT, the semi-documented NTDLL function NtQueryInformationProcess() can be used to emulate GetProcessId():
Collapse

DWORD WINAPI GetProcessIdNT(HANDLE hProcess)
{
    NTSTATUS                  Status;
    PROCESS_BASIC_INFORMATION pbi;
    HANDLE                    hDupHandle;
    HANDLE                    hCurrentProcess;

    hCurrentProcess = GetCurrentProcess();

    // Use DuplicateHandle() to get PROCESS_QUERY_INFORMATION access right
    if (!DuplicateHandle(hCurrentProcess,
                         hProcess,
                         hCurrentProcess,
                         &hDupHandle,
                         PROCESS_QUERY_INFORMATION,
                         FALSE,
                         0))
    {
        SetLastError(ERROR_ACCESS_DENIED);
        return 0;
    }

    Status = NtQueryInformationProcess(hDupHandle,
                                       ProcessBasicInformation,
                                       &pbi,
                                       sizeof(pbi),
                                       NULL);

    CloseHandle(hDupHandle);

    if (!NT_SUCCESS(Status))
    {
        SetLastError(RtlNtStatusToDosError(Status));
        return 0;
    }

    // Return PID
    return pbi.UniqueProcessId;
}

It's advisable to use the DuplicateHandle() function to obtain the PROCESS_QUERY_INFORMATION access right before calling NtQueryInformationProcess() (because the passed hProcess could not have this access right).

In Win9x, a PID is in reality a pointer to a process object (PDB) (actually XORed with a DWORD called "Obfuscator") [for a detailed explanation of the process object and how to obtain a pointer to it, see the GetPDB() function description below; and for an explanation of the meaning of "Obfuscator", see the GetObsfucator() function below]. Using the process handle as an index to the handle table, we retrieve a pointer to the process object. This pointer XORed with the Obfuscator provides the PID.

DWORD GetProcessId9x(HANDLE hProcess)
{
    PPDB           pPDB, pObject;
    PHANDLE_TABLE  pHandleTable;
    int            index;

    // Current PDB
    pPDB = GetPDB();

    // Handle table index
    if (OSWin95)
        index = hProcess;
    else if (OSWin98)
        index = hProcess / 4;

    // Handle table pointer
    pHandleTable = pPDB->pHandleTable;

    // Pointer to process database
    pObject = pHandleTable->array[index].pObject;

    // Return PID
    return pObject ^ dwObsfucator;
}

An alternative method that works for all Windows versions is to call GetCurrentProcessId() in the context of the specified process:

DWORD _GetProcessId(HANDLE hProcess)
{
    HANDLE  hThread;
    DWORD   Pid;

    GetCurrentProcessId = GetProcAddress(GetModuleHandle("Kernel32.dll"),
                                         "GetCurrentProcessId");

    hThread = _CreateRemoteThread(hProcess,
                                  NULL,
                                  0,
                                  (LPTHREAD_START_ROUTINE)GetCurrentProcessId,
                                  NULL,
                                  0,
                                  NULL);
    if (!hThread)
        return 0;
    else
    {
        WaitForSingleObject(hThread, INFINITE);
        // Exit code of remote thread is the PID
        GetExitCodeThread(hThread, &Pid);
        CloseHandle(hThread);
        return Pid;
   }
}

Цитата(Fedia @  12.9.2006,  00:33 Найти цитируемый пост)
Является ли результат, возвращаемый ShellExecute чем-то из вышеперечисленного ? Мне кажется что нет.

ща посмотрю


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Romikgy
Дата 12.9.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Fedia @  5.9.2006,  01:48 Найти цитируемый пост)
ShellExecute

кса а вместо этого , вот это юзать не?
ShellExecuteEx
Код

WINSHELLAPI BOOL WINAPI ShellExecuteEx(

    LPSHELLEXECUTEINFO lpExecInfo    // pointer to SHELLEXECUTEINFO structure
   );    
 

Parameters

lpExecInfo

Pointer to a SHELLEXECUTEINFO structure that contains and receives information about the application to start. 

Код

typedef struct _SHELLEXECUTEINFO {   // sei  
    DWORD     cbSize; 
    ULONG     fMask; 
    HWND      hwnd; 
    LPCSTR    lpVerb; 
    LPCSTR    lpFile; 
    LPCSTR    lpParameters; 
    LPCSTR    lpDirectory; 
    int       nShow; 
    HINSTANCE hInstApp; 
 
    // Optional members 
    LPVOID lpIDList; 
    LPCSTR lpClass; 
    HKEY   hkeyClass; 
    DWORD  dwHotKey; 
    HANDLE hIcon; 
    HANDLE hProcess; 
} SHELLEXECUTEINFO, FAR *LPSHELLEXECUTEINFO;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
dumb
Дата 12.9.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



извините, что влезаю: а чем CreateProcess то не угодил? к чему эти шаманские танцы с бубнами?.. user posted image
PM MAIL   Вверх
Fedia
Дата 12.9.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 1
Всего: 13



Цитата(Romikgy @  12.9.2006,  08:54 Найти цитируемый пост)
Че ?! да ни че просто помочь хотел, а там есть 3 способа получения пида чужего процесса

Не просто хотел, а и помогаешь. Я думал, что у тебя уже есть решение задачи, и ты пытаешься натолкнуть меня на какую-то мысль. Так что надеюсь без обид.

Цитата(Romikgy @  12.9.2006,  09:29 Найти цитируемый пост)
кса а вместо этого , вот это юзать не?
ShellExecuteEx

Ну мне ж уже на самом деле dumb предлагал уже использовать CreateProcess. Если бы мне требовалось срочное решение проблемы, я бы этим вариантом воспользовался. А мне лишь хотелось узнать, можно ли использовать результат функции ShellExecute для поиска окон запущенного приложения.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Romikgy
Дата 12.9.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Только у меня не получилось отделить хендл апликейшена smile
Код

function EnumWindowsProc(h: HWND; lp: LPARAM): BOOL; stdcall;
var sx,str: string;

pid,pidreq: DWORD;
begin
  SetLength(sx,300);
    begin
    GetWindowThreadProcessId(h,pid);
    GetWindowText(h,PChar(sx),255);
    if (pid=DWORD(lp)) then
    if  IsWindowEnabled(h) then
      Form1.ListBox1.Items.Add(IntToHex(h,8)+' '+inttostr(pid)+' '+strpas(PChar(sx)));
  end;
  Result:=True;
end;

procedure GetHWND_from_Histance(Hist: HMODULE);
var c1:Cardinal;
pe:TProcessEntry32;
histan: HMODULE;
s1:string;
x:integer;
 begin
 X:=0;
 c1:=CreateToolHelp32Snapshot(TH32CS_SnapProcess,0);
 if c1=INVALID_HANDLE_VALUE then
                begin
                 //Form1.Statusbar1.SimpleText:=('Èíôîðìàöèÿ î ïðîöåññàõ çàêðûòà.');
                exit;
                end;
try
pe.dwSize:=sizeof(pe);
if Process32First(c1,pe) then
repeat
inc(x);
s1:=ExtractFileName(pe.szExeFile);
histan:=GetModuleHandle(PChar(s1));
if  histan= Hist then
begin
 EnumWindows(@ EnumWindowsProc,pe.th32ProcessID);
end;
//ProcessId[x]:=pe.th32ProcessID;
until not Process32Next(c1,pe);
finally CloseHandle(c1); 
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Listbox1.Clear;
 GetHWND_from_Histance(
 GetModuleHandle(nil));
end;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Fedia
Дата 13.9.2006, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 1
Всего: 13



Цитата(Romikgy @  12.9.2006,  12:27 Найти цитируемый пост)
Только у меня не получилось отделить хендл апликейшена

Да вообще, то, что называется 
Цитата

instance handle of the application
 в спавке по ShellExecute в SDK или 
Цитата

HINSTANCE for backward compatibility with 16-bit Windows applications
 в MSDN похоже довольно бесполезная штука, созданная для совместимости с 16-bit Windows. И использовать ее скорее всего не получиться.

Romikgy, Спасибо за помощь в рассмотрении этого вопроса  smile 


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Romikgy
Дата 13.9.2006, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Fedia, Имхо я привел код который ищет то что те нужно по хистенсу, или нет?
А 
Цитата(Fedia @  12.9.2006,  23:57 Найти цитируемый пост)
хендл апликейшена

я имел ввиду, не хендл процесса апликейшена , а хендл окна апликейшена!
(я проверял на приложении написаном на дельфи!)
Ведь в этом приложении имеется окно апликухи и главная форма(окно) т.е. 2 окна и как определить какое окно относится к апликухе , а какое к форме , я пока не в курсе, но если знаешь название окна то можно по нему отсеят, тогда вопросов не будет!

Добавлено @ 08:57 
Цитата(Fedia @  12.9.2006,  23:57 Найти цитируемый пост)
Romikgy, Спасибо за помощь в рассмотрении этого вопроса

Пазям.
PS только я так и не понял помогло те это или нет?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Fedia
Дата 13.9.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 1
Всего: 13



Цитата(Romikgy @  13.9.2006,  08:56 Найти цитируемый пост)
PS только я так и не понял помогло те это или нет?

Нет, просто эта ветка начинает напоминать сломанный телефон. Не исключаю, что я не могу точно сформулировать свой вопрос, возможно ты не можешь меня понять, возможно я не могу понять твои ответы (я ведь только принялся за изучение API). ХЗ в общем.
Цитата

HINSTANCE ShellExecute(          HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);

HMODULE GetModuleHandle( 
LPCTSTR lpModuleName
);

Цитата(Romikgy @  13.9.2006,  08:56 Найти цитируемый пост)
я имел ввиду, не хендл процесса апликейшена , а хендл окна апликейшена!

Попробуй в качестве параметра функции GetHWND_from_Histance передать HINSTANCE от ShellExecute, а не HMODULE от GetModuleHandle. Хоть эти два типа и объявлены в Delphi как Саrdinal, но похоже разнятся по смыслу. Может тогда будет понятно, что я пытался реализовать. Ведь именно от HINSTANCE, возвращаемого ShellExecute я пытался получить перечень окон. И неоднократно об этом писал. 
Но все равно, благодаря твоим примерам и ссылкам на статьи я много чего полезного для себя подчеркнул. За это и +.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Romikgy
Дата 13.9.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Fedia @  13.9.2006,  08:58 Найти цитируемый пост)
Попробуй в качестве параметра функции GetHWND_from_Histance передать HINSTANCE от ShellExecute, а не HMODULE от GetModuleHandle. 

попробую когда домой дойду
а ф-ция ShellExecute у мя где то был исходник , так он юзает GetModuleHandle , найду выложу


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Fedia
Дата 13.9.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 1
Всего: 13



Цитата(Romikgy @  13.9.2006,  11:38 Найти цитируемый пост)
попробую когда домой дойду

Попробуй конечно.

Цитата(Romikgy @  13.9.2006,  11:38 Найти цитируемый пост)
ShellExecute у мя где то был исходник , так он юзает GetModuleHandle

Результирующие значения этих функций находятся в разном числовом диапазоне. Если HINSTANCE от ShellExecute как правило не больше 1000, то HMODULE от GetModuleHandle переваливает за миллион. А исходник посмотреть интересно было бы.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Romikgy
Дата 13.9.2006, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Код

HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpOperation,LPCSTR lpFile,
                               LPCSTR lpParameters,LPCSTR lpDirectory, INT iShowCmd)
{
    SHELLEXECUTEINFOA sei;

    TRACE("%p,%s,%s,%s,%s,%d\n",
          hWnd, debugstr_a(lpOperation), debugstr_a(lpFile),
          debugstr_a(lpParameters), debugstr_a(lpDirectory), iShowCmd);

    sei.cbSize = sizeof(sei);
    sei.fMask = 0;
    sei.hwnd = hWnd;
    sei.lpVerb = lpOperation;
    sei.lpFile = lpFile;
    sei.lpParameters = lpParameters;
    sei.lpDirectory = lpDirectory;
    sei.nShow = iShowCmd;
    sei.lpIDList = 0;
    sei.lpClass = 0;
    sei.hkeyClass = 0;
    sei.dwHotKey = 0;
    sei.hProcess = 0;

    ShellExecuteExA (&sei);
    return sei.hInstApp;
}

Код

BOOL WINAPI ShellExecuteExA (LPSHELLEXECUTEINFOA sei)
{
    SHELLEXECUTEINFOW seiW;
    BOOL ret;
    WCHAR *wVerb = NULL, *wFile = NULL, *wParameters = NULL, *wDirectory = NULL, *wClass = NULL;

    TRACE("%p\n", sei);

    memcpy(&seiW, sei, sizeof(SHELLEXECUTEINFOW));

    if (sei->lpVerb)
    seiW.lpVerb = __SHCloneStrAtoW(&wVerb, sei->lpVerb);

    if (sei->lpFile)
        seiW.lpFile = __SHCloneStrAtoW(&wFile, sei->lpFile);

    if (sei->lpParameters)
        seiW.lpParameters = __SHCloneStrAtoW(&wParameters, sei->lpParameters);

    if (sei->lpDirectory)
        seiW.lpDirectory = __SHCloneStrAtoW(&wDirectory, sei->lpDirectory);

    if ((sei->fMask & SEE_MASK_CLASSALL) == SEE_MASK_CLASSNAME && sei->lpClass)
        seiW.lpClass = __SHCloneStrAtoW(&wClass, sei->lpClass);
    else
        seiW.lpClass = NULL;

    ret = SHELL_execute( &seiW, SHELL_ExecuteW );

    sei->hInstApp = seiW.hInstApp;

    if (sei->fMask & SEE_MASK_NOCLOSEPROCESS)
        sei->hProcess = seiW.hProcess;

    if (wVerb) SHFree(wVerb);
    if (wFile) SHFree(wFile);
    if (wParameters) SHFree(wParameters);
    if (wDirectory) SHFree(wDirectory);
    if (wClass) SHFree(wClass);

    return ret;
}

Код

static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
                LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out)
{
    STARTUPINFOW  startup;
    PROCESS_INFORMATION info;
    UINT_PTR retval = 31;
    UINT gcdret = 0;
    WCHAR curdir[MAX_PATH];

    TRACE("Execute %s from directory %s\n", debugstr_w(lpCmd), debugstr_w(psei->lpDirectory));
    /* ShellExecute specifies the command from psei->lpDirectory
     * if present. Not from the current dir as CreateProcess does */
    if( psei->lpDirectory && psei->lpDirectory[0] )
        if( ( gcdret = GetCurrentDirectoryW( MAX_PATH, curdir)))
            if( !SetCurrentDirectoryW( psei->lpDirectory))
                ERR("cannot set directory %s\n", debugstr_w(psei->lpDirectory));
    ZeroMemory(&startup,sizeof(STARTUPINFOW));
    startup.cb = sizeof(STARTUPINFOW);
    startup.dwFlags = STARTF_USESHOWWINDOW;
    startup.wShowWindow = psei->nShow;
    if (CreateProcessW(NULL, (LPWSTR)lpCmd, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT,
                       env, *psei->lpDirectory? psei->lpDirectory: NULL, &startup, &info))
    {
        /* Give 30 seconds to the app to come up, if desired. Probably only needed
           when starting app immediately before making a DDE connection. */
        if (shWait)
            if (WaitForInputIdle( info.hProcess, 30000 ) == WAIT_FAILED)
                WARN("WaitForInputIdle failed: Error %ld\n", GetLastError() );
        retval = 33;
        if (psei->fMask & SEE_MASK_NOCLOSEPROCESS)
            psei_out->hProcess = info.hProcess;
        else
            CloseHandle( info.hProcess );
        CloseHandle( info.hThread );
    }
    else if ((retval = GetLastError()) >= 32)
    {
        TRACE("CreateProcess returned error %d\n", retval);
        retval = ERROR_BAD_FORMAT;
    }

    TRACE("returning %u\n", retval);

    psei_out->hInstApp = (HINSTANCE)retval;
    if( gcdret )
        if( !SetCurrentDirectoryW( curdir))
            ERR("cannot return to directory %s\n", debugstr_w(curdir));

    return retval;
}


Добавлено @ 23:31 
т.е. в конце все равно приходим к 
Код

if (CreateProcessW(NULL, (LPWSTR)lpCmd, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT,
                       env, *psei->lpDirectory? psei->lpDirectory: NULL, &startup, &info))



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Yanis
Дата 14.9.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(Romikgy @  14.9.2006,  00:29 Найти цитируемый пост)
т.е. в конце все равно приходим к
Цитата(Romikgy @  14.9.2006,  00:29 Найти цитируемый пост)
CreateProcess


Кто бы сомневался smile

P. S. А вопрос то решён или вы за так ликбез устроили? smile 



--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.