Jorkis Posted February 14, 2007 Share Posted February 14, 2007 Ако има програмисти на Delphi, моля да дадат едно рамо. Искам в даден съврис при някакви обстоятелства да се отвори форма, и тя да получи данни от клавиатурата. В програмирането с Delphi съм малко самоук не съм много адвансд юзър, и до сега каквото ми се е налагало, съм го намирал сравнително лесно в нета. Но точно за това нещо не се справям, както трябва в търсенето. Ако някой е правил такова нещо или има представа как става, нека пише. Link to comment Share on other sites More sharing options...
djadomraz Posted February 14, 2007 Share Posted February 14, 2007 Не можеш да намериш защото това което искаш е невъзможно. За да се отвори форма трябва да има къде. Windows services се стартират изобщо преди да се е логнал потребител - т.е. още докато стои на паролата и чака да се сети някой да седне на машината (ако изобщо седне понеже при сървърите няма работа никой да се логва - поне не редовно). Та при това положение няма къде да се покаже тази форма защото няма десктоп изобщо и щом е service не може да очаква вход от потребителя. Единствената комуникация следва да е през Event Log-a или евентуално през друга програмка която да си комуникира някак със service-a а тази програмка да е в startup групата на всички потребители - както е на MSSQL-а Service Manager-a. Ако все пак естеството на въпросната програма предполага някаква комуникация с потребителя работещ на компютъра значи не трябва да е service а най-обикновена програма която да се стартира при стартирането на компютъра но да не се показва никакъв прозорец а да си стои кротко до часовника една иконка и само ако се случи нещо да се показва въпросният диалогов прозорец, който се опитваш да извадиш от service-a Link to comment Share on other sites More sharing options...
Jorkis Posted February 14, 2007 Author Share Posted February 14, 2007 Благодаря за отговора, но не съм чак толкова сигурен, че не може да се направи това, което искам. След като се логне някой потребител, би трябвало сървиса по някакъв начин да създаде прозорец или от името на логнатия потребител или да вземе по някакъв начин handle към някакъв прозорец. Справка Keylogger-ите как работят примерно? Като се логне някой с клавишна кобинация може да извика настройките на програмата, а keylogger-ите са сървиси. Така че според мен може, но не е чак толкова елементарно създаването на форма чрез сървис. Link to comment Share on other sites More sharing options...
Sonic Posted February 15, 2007 Share Posted February 15, 2007 емх ... може да си напшен приложение на delphi което да работи като сервис , и да хуква други сервис прозорци ( може и да пайпва - зависи от типа на работа на сервиса , и от начините на сриимизация на данните и от твоите наклонности ). но това би било наистина "брутален" начин - който си го замислил ( каквото и да си замислил ). По-добре виж какво предоставя дадения сервис - виж му спецификациите, и работи на потребителско ниво , като променяш настройките му през нормалните му интерфеиси и конфигурационни процедури, а не правиш подобни "финтове" ( въпреки че понякога изглеждат зашеметяващо за нормалния потребител - много често са обект на грешки и дори на неипълнение в следствие на различните версии - особенно при хукването и пайпването ... както и да е ) Най-добре отиди и разгледай MSDN за конкретния сервис , и виж дали няма нещо което да ти помогне с него. След като се логне някой потребител, би трябвало сървиса по някакъв начин да създаде прозорец или от името на логнатия потребител или да вземе по някакъв начин handle към някакъв прозорец. -Не е задължително. Доста сервиси дори са конзолни приложения. Някои дори са без потребителски интерфеис ( процедурни сервиси примерно ). СправкаKeylogger-ите как работят примерно? Обикновенно се инсталира глобален кейхук в лоопа на съобщения на ОС като този хук е спецфициран на определн адрес, на който респондира приложението приемник. А натиснатите клавиш попадат там защото са поети от глабалния кейхук. Link to comment Share on other sites More sharing options...
Jorkis Posted February 22, 2007 Author Share Posted February 22, 2007 Най-добре отиди и разгледай MSDN за конкретния сервис , и виж дали няма нещо което да ти помогне с него. Ако сървиса го имаше в MSDN, не се съмнявай, че щях да съм го прегледал. Само, че сървиса е собствено производство. Другото което искам да кажа е че той трябва да работи като сървис, а не като нормално приложение. Моля наистина хора, които имат представа какво трябва да се направи, само те да пишат. Не искам съвети от сорта на по-добре го направи като еди си какво, за какво ти е сървис. Ако няма кой да помогне здраве да е! Link to comment Share on other sites More sharing options...
greg Posted February 26, 2007 Share Posted February 26, 2007 напиши си едно отделно приложение, което да съдържа юзер интерфейса и когато е необходимо сървиса стартира него, свършва си работата и се затваря или седи и следи какво става със сървиса това е 'нормалния' подход ако искаш да правиш някакви по-специални работи дай повече инфо Link to comment Share on other sites More sharing options...
djadomraz Posted March 4, 2007 Share Posted March 4, 2007 Ако няма кой да помогне здраве да е! Като гледам на сървисите 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.