Jump to content
BulForum.com

Помощ за Delphi, ако има програмисти тук


Jorkis

Recommended Posts

Ако има програмисти на Delphi, моля да дадат едно рамо. Искам в даден съврис при някакви обстоятелства да се отвори форма, и тя да получи данни от клавиатурата. В програмирането с Delphi съм малко самоук ;) не съм много адвансд юзър, и до сега каквото ми се е налагало, съм го намирал сравнително лесно в нета. Но точно за това нещо не се справям, както трябва в търсенето. Ако някой е правил такова нещо или има представа как става, нека пише.

Link to comment
Share on other sites

Не можеш да намериш защото това което искаш е невъзможно. За да се отвори форма трябва да има къде. Windows services се стартират изобщо преди да се е логнал потребител - т.е. още докато стои на паролата и чака да се сети някой да седне на машината (ако изобщо седне понеже при сървърите няма работа никой да се логва - поне не редовно). Та при това положение няма къде да се покаже тази форма защото няма десктоп изобщо и щом е service не може да очаква вход от потребителя.

 

Единствената комуникация следва да е през Event Log-a или евентуално през друга програмка която да си комуникира някак със service-a а тази програмка да е в startup групата на всички потребители - както е на MSSQL-а Service Manager-a. Ако все пак естеството на въпросната програма предполага някаква комуникация с потребителя работещ на компютъра значи не трябва да е service а най-обикновена програма която да се стартира при стартирането на компютъра но да не се показва никакъв прозорец а да си стои кротко до часовника една иконка и само ако се случи нещо да се показва въпросният диалогов прозорец, който се опитваш да извадиш от service-a

Link to comment
Share on other sites

Благодаря за отговора, но не съм чак толкова сигурен, че не може да се направи това, което искам. След като се логне някой потребител, би трябвало сървиса по някакъв начин да създаде прозорец или от името на логнатия потребител или да вземе по някакъв начин handle към някакъв прозорец. Справка

Keylogger-ите как работят примерно? Като се логне някой с клавишна кобинация може да извика настройките на програмата, а keylogger-ите са сървиси. Така че според мен може, но не е чак толкова елементарно създаването на форма чрез сървис.

Link to comment
Share on other sites

емх ...

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

 

но това би било наистина "брутален" начин - който си го замислил ( каквото и да си замислил ).

 

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

 

Най-добре отиди и разгледай MSDN за конкретния сервис , и виж дали няма нещо което да ти помогне с него.

 

След като се логне някой потребител, би трябвало сървиса по някакъв начин да създаде прозорец или от името на логнатия потребител или да вземе по някакъв начин handle към някакъв прозорец.

-Не е задължително. Доста сервиси дори са конзолни приложения. Някои дори са без потребителски интерфеис ( процедурни сервиси примерно ).

 

Справка

Keylogger-ите как работят примерно?

Обикновенно се инсталира глобален кейхук в лоопа на съобщения на ОС като този хук е спецфициран на определн адрес, на който респондира приложението приемник.

А натиснатите клавиш попадат там защото са поети от глабалния кейхук.

Link to comment
Share on other sites

Най-добре отиди и разгледай MSDN за конкретния сервис , и виж дали няма нещо което да ти помогне с него.

Ако сървиса го имаше в MSDN, не се съмнявай, че щях да съм го прегледал. Само, че сървиса е собствено производство.

Другото което искам да кажа е че той трябва да работи като сървис, а не като нормално приложение.

Моля наистина хора, които имат представа какво трябва да се направи, само те да пишат. Не искам съвети от сорта на по-добре го направи като еди си какво, за какво ти е сървис.

Ако няма кой да помогне здраве да е!

Link to comment
Share on other sites

напиши си едно отделно приложение, което да съдържа юзер интерфейса и когато е необходимо сървиса стартира него, свършва си работата и се затваря или седи и следи какво става със сървиса

това е 'нормалния' подход :)

ако искаш да правиш някакви по-специални работи дай повече инфо

Link to comment
Share on other sites

Ако няма кой да помогне здраве да е!

 

Като гледам на сървисите properties има едно "Allow interaction with user desktop" обаче пак ти казвам че цялата работа с тези неща е мислена да се стартират и да работят преди изобщо да се е логнал някой потребител и ето защо няма как да се покаже прозорец защото физически няма къде (или по-скоро на кой) а докато логин екрана е активен нищо друго няма да се види.

 

Както всички сървиси работят - прави се отделна програмка която потребителя стартира и която си комуникира със сървиса. Вземи за пример MSSQL server: самият сървър върши същинската работа а отделно се стартира Service Manager в startup-a за да можеш да си го спираш и пускаш ако толкова държиш на това или пък другите tool-ове като Query Analyzer, Enterprise Manager и т.н. с които се администрира. Аналогично е положението и с IISто. Всички грешки и прочее се логват в Event Log-a който когато се логне администратор му съобщава ако има нови неща че да се заинтересова и да погледне.

 

Подозирам че бъркаш основно идеята на това да напишеш сървис. Замисли се когато нещо не става и трябва с 1000 клизми да го подкараш, че явно грешката е в теб и нещо не си осмислил правилно - на мен ми се е случвало доста пъти и когато осъзная къде бъркам след това всичко си идва на мястото и става много лесно всичко.

 

Не бъркай service с програма която стои в system tray-a - демек долу до часовника... Ако дадеш малко повече информация какво аджеба се опитваш да свършиш мога и да ти помогна малко повече - все пак последните 15 години все с програмиране се занимавам :)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...