Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Не хочет работать в 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.058 c
1-1084268991
Axar
2004-05-11 13:49
2004.05.23
Ваше мнение о Delphi .NET


1-1083743709
half_litre
2004-05-05 11:55
2004.05.23
Переход с Delphi 3 на Delphi 7


1-1084349409
glGLU
2004-05-12 12:10
2004.05.23
Click


7-1082125099
Fred Perry
2004-04-16 18:18
2004.05.23
Проблема с WM_INPUTLANGCHANGE


1-1083938188
united
2004-05-07 17:56
2004.05.23
MessageDlg по-русски - как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский