Текущий архив: 2008.03.23;
Скачать: CL | DM;
Вниз
проблема с Thread32First, вот код... вроед все должно быть норм. Найти похожие ветки
← →
Chorniy (2008-02-27 09:58) [0]пытаюсь получить список процессов и потоков системы, при этом процессы (закоментированный участок) выводятся правильно, а вызов функции Thread32First завершается False, и GetLastError выдает ошибку
{ The program issued a command but the command length is incorrect. }
ERROR_BAD_LENGTH = 24;
{$EXTERNALSYM ERROR_BAD_LENGTH}
мол, длина команды неверная? ))))) как так?
вот код:procedure TForm1.Button18Click(Sender: TObject);
var HTHSnapShot: THandle;
Info: TProcessEntry32;
InfoTh: TThreadEntry32;
Err: DWord;
begin
Err := 0;
ListBox2.Clear;
HTHSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if HTHSnapShot = INVALID_HANDLE_VALUE then
begin
ShowMessage("Create snapshot error");
Exit;
end;
// Process32First(HTHSnapShot, Info);
//ListBox2.Items.Add("Pr: " + IntToStr(Info.th32ProcessID));
//while Process32Next(HTHSnapShot, Info) do
// ListBox2.Items.Add("Pr: " + IntToStr(Info.th32ProcessID));
if Thread32First(HTHSnapShot, InfoTh) then
ListBox2.Items.Add("Th: " + IntToStr(InfoTh.th32ThreadID))
else begin
Err := GetLastError;
if Err <> 0 then ShowMessage("Ошибка №" + IntToStr(Err));
Exit;
end;
while Thread32Next(HTHSnapShot, InfoTh) do
ListBox2.Items.Add("Th: " + IntToStr(Info.th32ProcessID));
end;
← →
Сергей М. © (2008-02-27 10:28) [1]SysErorMessage(GetLastError) = ???
← →
Chorniy (2008-02-27 10:37) [2]SysErorMessage(GetLastError) = длина выданной программой команды слишком велика)))
а в длину команды входят аргументы? я использую специально созданную для этой функции структуру. как при этом длина команды может быть слишком велика?type
{$EXTERNALSYM tagTHREADENTRY32}
tagTHREADENTRY32 = record
dwSize: DWORD;
cntUsage: DWORD;
th32ThreadID: DWORD; // this thread
th32OwnerProcessID: DWORD; // Process this thread is associated with
tpBasePri: Longint;
tpDeltaPri: Longint;
dwFlags: DWORD;
end;
{$EXTERNALSYM THREADENTRY32}
THREADENTRY32 = tagTHREADENTRY32;
{$EXTERNALSYM PTHREADENTRY32}
PTHREADENTRY32 = ^tagTHREADENTRY32;
{$EXTERNALSYM LPTHREADENTRY32}
LPTHREADENTRY32 = ^tagTHREADENTRY32;
TThreadEntry32 = tagTHREADENTRY32;
← →
Riply © (2008-02-27 10:58) [3]> [2] Chorniy (27.02.08 10:37)
> SysErorMessage(GetLastError) = длина выданной программой команды слишком велика)))
А инициализировать размер структуры перед вызовом кто будет ?
← →
Chorniy (2008-02-27 12:07) [4]Дак данный Record описан в [2] и имеет размер 28 байт, размер фиксированный... это видно из структуры, да и функция SizeOf(TThreadEntry32) возвращает теже 28 байт.
Подскажите, где я могу ошибаться... коли функция продолжает выдавать
"длина выданной программой команды слишком велика"
← →
Сергей М. © (2008-02-27 12:08) [5]
> где я могу ошибаться
Members
dwSize
Specifies the length, in bytes, of the structure. Before calling the Thread32First function, set this member to
sizeof(THREADENTRY32).
← →
Riply © (2008-02-27 12:16) [6]> [4] Chorniy (27.02.08 12:07)
> Подскажите, где я могу ошибаться...
В нежелании или лени почитать Help, где все написано.
Могу еще добавить, что за собой надо убирать.
Про это тоже должно быть написано в Help-е.
← →
Chorniy (2008-02-27 12:17) [7]тьфу блин... стыдно :^( на расшифровку полей не посмотрел..тока на размер.
всем спасибо!
Страницы: 1 вся ветка
Текущий архив: 2008.03.23;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.005 c