Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Не хочет работать в OnShow(OnCreate): if Process32First(handler,d   Найти похожие ветки 

 
Arturchik ©   (2004-04-05 15:11) [0]

Точнее if Process32First(handler,data) then... работает только постоянно идёт по else, исли запустить его в OnActivate то всё в порядке но уже поздно... :-( в чём проблема? А главное как её решить? :-)


 
VMcL ©   (2004-04-05 15:13) [1]

У тебя ошибка в программе. Если точнее, то в 17-й строке.


 
Arturchik ©   (2004-04-05 15:22) [2]

ааа... непонял?


 
Digitman ©   (2004-04-05 15:23) [3]


> всё в порядке но уже поздно


угу ... уже кирдык приключился .. и всякий раз будет приключаться, когда окно формы будет получать фокус ввода


> работает только постоянно идёт по else


т.е. работает , но чуть-чуть)..


 
Arturchik ©   (2004-04-05 15:27) [4]

Нееет, она вообще не должна идти по else, if там нужен для контроля, а не для выбора. А тут идёт по else и хоть ты тресни. Запускаю кнопкой или OnActivate работает, а в OnCreate или OnShow ХРЕН.


 
Digitman ©   (2004-04-05 15:53) [5]


> OnActivate работает, а в OnCreate или OnShow ХРЕН


а ХРЕН поймешь, понимаешь ли ты логику и последовательность возникновения тех или иных событий объекта-формы ...

а был бы еще косой десяток разных событий - во всех бы перепробовал свой код ? МОЛ, авось заработает и ХРЕН с ним ? или как ?

почему в OnCreate() не послать самому себе PostMessage(), в обработчике которого и реализовать цикл енумерации процессов ?

это - раз

второе.

енумерация процессов в системах на НТ-платформе (каковой является ХР) должна производиться средствами psapi , а не средствами tlhelp32


 
Игорь Шевченко ©   (2004-04-05 15:55) [6]


> енумерация процессов в системах на НТ-платформе (каковой
> является ХР) должна производиться средствами psapi , а не
> средствами tlhelp32


Да на XP это без разницы :)


 
Digitman ©   (2004-04-05 15:57) [7]


> без разницы


мого быть, мого быть)


 
Arturchik ©   (2004-04-05 15:59) [8]

>почему в OnCreate() не послать самому себе PostMessage(), в >обработчике которого и реализовать цикл енумерации процессов ?

это как?


 
Игорь Шевченко ©   (2004-04-05 16:15) [9]

Arturchik ©   (05.04.04 15:59)

procedure TMyCoolForm.FormCreate (Sender: TObject);
begin
 PostMessage(Handle, UM_EnumProcesses, 0, 0);
end;


 
Digitman ©   (2004-04-05 16:17) [10]

это - к верху

приведи полный код для начала


 
Arturchik ©   (2004-04-05 19:03) [11]

procedure Thread.DoWork;
begin
 handler:=CreateToolhelp32Snapshot(TH32_SNAPPROCESS,0);
 if Process32First(handler,data) then
   while Process32Next(handler,data) do

поток нужен обязательно


 
GrayFace ©   (2004-04-06 14:56) [12]

А разве не льзя перебрать процессы обычным WinAPI?
Скажи, зачем тебе это? Может цель лучше делать по-другому.


 
Kerk ©   (2004-04-06 15:39) [13]

размер структуры data установи...
data.dwSize := SizeOf(data);


 
Digitman ©   (2004-04-06 16:36) [14]


> поток нужен обязательно


угу .. и ты еще поди DoWork в Synchronize() обернул


 
Arturchik ©   (2004-04-07 00:32) [15]

>угу .. и ты еще поди DoWork в Synchronize() обернул

Естественно


 
Arturchik ©   (2004-04-07 00:36) [16]

Kerk - спасибо, заработало


 
Digitman ©   (2004-04-07 09:29) [17]


> Естественно


малацца

продолжай в том же духе - бездумно сдирать код из статей


 
Arturchik ©   (2004-04-07 17:39) [18]

> продолжай в том же духе - бездумно сдирать код из статей

вообще-то поток используется по назначению...


 
Digitman ©   (2004-04-08 09:23) [19]

да не используешь ты его "по назначению" !
в результате применения метода синхронизации метод DoWork будет исполняться в основном  кодовом потоке процесса .. весь весь смысл использования доп.код.потока при этом пропадает


 
Arturchik ©   (2004-04-08 19:20) [20]

Synchronize(Method: TThreadMethod) - синхронизирует выполнение метода процесса, позволяя ему работать параллельно с другими процессами.

Из статьи с этого сайта

А мне это и нужно, так что не надо ля ля


 
VMcL ©   (2004-04-08 19:53) [21]

>>Arturchik ©  (08.04.04 19:20) [20]

procedure Synchronize(Method: TThreadMethod);
Executes a method call within the main VCL thread.


 
Digitman ©   (2004-04-09 08:41) [22]


> Arturchik



> Из статьи с этого сайта


а головой думать будем ? иные источники инф-ции штудировать ? сопоставлять ? анализировать ? принимать решение ? или статья г-на Кариха - панацея от болезней головы ?


 
Kerk ©   (2004-04-09 09:42) [23]


> Arturchik ©   (07.04.04 00:36) [16]
> Kerk - спасибо, заработало

Если у человека проблемы с tlhelp32, то в 99% случаев из-за того, что забывают размер структуры указать...
Я на подобные вопросы уже не глядя отвечаю. :)


 
Arturchik ©   (2004-04-09 14:39) [24]

> Если у человека проблемы с tlhelp32, то в 99% случаев из-за того, что забывают размер структуры указать...
Будем знать :-)


 
Arturchik ©   (2004-04-09 14:46) [25]

> Digitman
Тебе не надоело?
Ты бы лучше помог как Kerk например, а не нёс всякую ахинею. Если ты хочеш сказать что в статье г-на Кариха ошибка. Так и скажи. Но ни мне, а ему лично и тем кто этот сайт делал и эту статью размешал.

> а головой думать будем ?...
Я тебя не оскорблял и опускаться до этого не собираюсь, и будь добр не преврашай форум в.................. :-)


 
Digitman ©   (2004-04-09 15:09) [26]


> Если ты хочеш сказать что в статье г-на Кариха ошибка. Так
> и скажи


так и скажу.
потому что процитированная тобой из статьи фраза - полная чушь, набор слов, слабо связанных как терминологически, так и концептуально

зато чуть ниже тот же Карих "оправдывается", ссылаясь на реально работающий и грамотно реализованный пример из состава демо-проектов , идущих вместе с Делфи

цитирую :

P.S. Отличный пример работы с TThread можно найти в подкаталоге Demos\Threads каталога, куда Вы установили Borland Delphi.

ты рассматривал этот проект ? вникал в его код ? пытался хоть сколь-либо понять, почему там метод Synchronize() применяется не везде где ни попадя, а в строго определенных строчках ?

вряд ли читал и/или вникал .. так что "так что не надо ля ля" - вот это не надо здесь, сударь !


 
Arturchik ©   (2004-04-09 18:12) [27]

НЕТ! ля ля - это в любом случае, ибо объяснить что к чему можно было и сразу. А нести всякую..., о том какой я...!
И всё равно я считаю что в моём счучае синхронизация нужна, а говорить об обратном вы не можете ибо не видели всей программы.


 
Digitman ©   (2004-04-09 18:20) [28]


> Arturchik ©   (09.04.04 18:12) [27]


да пойми ты, голова садовая, что если в теле DoWork() нет ни единого обращения к потоконебезопасным VCL-контролам/компонентам, то синхронизировать этот метод с осн.код.потоком не только нет необходимости, но и абсолютно бестолково - ведь исполнение метида будет поставлено в очередь обработки оконных сообщений осн.потока !!!


 
Digitman ©   (2004-04-09 18:42) [29]


> я считаю что в моём счучае синхронизация нужна


синхронизация обоснована только тогда, когда ей подвергаются не все подряд вызовы (методов или каких-то иных п/программ - неважно), а только те вызовы, которые небезопасно делать в параллель с потенциально возможными аналогичными вызовами со стороны других потоков .. в случае с VCL-приложением - вызовы со стороны осн.потока ...

синхронные вызовы, выполняемые с использованием Synchronize(), становятся в очередь оконных сообщений осн.потоку приложения .. и если, к примеру, в обработчике какого-то события формы выполняется длительный цикл, то исполнение метода DoWork будет задержано до тех пор, пока не завершится цикл и, в конечном итоге, исполнение обработчика тек.события формы ... а таких событий - уйма !!


 
Arturchik ©   (2004-04-10 10:35) [30]

ооо...после 9 бесполезных постов ты решил всё таки объяснить в чём проблема. Постараюсь это переварить, может ты и прав.


 
Arturchik ©   (2004-04-10 10:44) [31]

ну так мне это и надо. Моя прога выполняет несколько операция и некоторые должны выполняться сразу(ибо они hook), а некоторые(как раз её код и обсуждался) должны выполнятся когда им "можно". Если я тебя правильно понял...
P.S. Кстати если ты уж всё время толдычиш про чтение разных статей и их анализ...Не подскажеш где можно прочитать о  mousehook, а то прочитал я уже много но чтобы понять как это работает...


 
Digitman ©   (2004-04-10 11:08) [32]


> после 9 бесполезных постов


действительно бесполезных ... потому как на их протяжении я пытался сделать так, чтобы ты думал самостоятельно ... моя же задача - направить в верное русло ход твоих рассуждений по проблеме и ее решению, дать инф-цию к размышлению, а не разжевывать тебе все и вся


 
Arturchik ©   (2004-04-10 12:52) [33]

не люблю людей считаюших себя очень умными с способными всех учить. особенно когда они даже не знают с кем говорят...

P.S. чтоюы не разводить тут... ты или ответь на мой последний пост или тема закрыта.


 
Digitman ©   (2004-04-10 13:13) [34]


> или ответь на мой последний пост или тема закрыта


отвечаю.
на этом сайте в числе прочих статей есть статья по глобальным хукам с подробным разбором демо-примера

кр. этого есть станд.хэлп, в котором есть описание ф-ции SetWindowsHookEх(), в т.ч. - описание ее вызова с параметром WH_MOUSE и соответствующих задействуемых структур данных


 
Arturchik ©   (2004-04-10 18:48) [35]

будем искать.

P.S. На сайте не самым удобным образом размещены статьи



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.038 c
3-1082740421
Frozzen
2004-04-23 21:13
2004.05.23
Заголовок колонки DBGrid


1-1083306393
stone777
2004-04-30 10:26
2004.05.23
Установка Delphi


9-1073854659
Stalker_23b
2004-01-11 23:57
2004.05.23
Игровая логика


14-1083579813
Piter
2004-05-03 14:23
2004.05.23
NetBEUI


3-1082663773
Mishenka
2004-04-22 23:56
2004.05.23
Связи между таблицами в Database Desktop...