Poslání textu na jinou aplikaci   otázka

VB.NET, WinForms, WinAPI

Dobrý den, chci se zeptat, zda je možné poslat text z textboxu aplikace napsané ve vb.net na non vb.net aplikaci bez toho, aniž by se použily API funkce jako SendMessage,FindWindow atd.

Mám tento zkušební kód:

    Dim myProcessList As Process() = Process.GetProcessesByName("WordPad")
        Dim myProcess As Process
        For Each myProcess In myProcessList  
            If myProcess.MainWindowHandle <> 0   Then             
                 MsgBox("OK")
            End If

pak Button a textBox. Chtěl bych zkusit, zda je možné z mého txtboxu poslat text přímo do WordPadu nebo do jiné aplikace do prostoru pro vstup od uživatele. Jde to i s .Net?

Díky za jakoukoli odpověď.

Marcel Borna

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bez Windows API to nelze udělat. Naprosto amatérsky pomocí SendKeys.Send a to ještě nelze určit aplikaci do které se mají klávesy posílat (posílají se pouze do aktivní aplikace).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za odpověď. Budu drzý a zeptám se:

doporučil byste mi postup s API? Nemám tušení, od čeho se odrazit.

Děkuji

M.B.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Čeho chcete konkrétně docílit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Možná mě tu ostatní ukamenují, ale pokud nemáte ponětí jak na to, tak bude možná nejjednodušší zařídit komunikaci přes nějaký soubor v temp adresáři. Aplikace si budou hlídat jeho změny a budou na ně reagovat a číst je. Pokud nepůjde o rychlou komunikaci, tak to není podle mě tak strašné řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jdu pro kamení, protože tohle je opravdu příšerný způsob, to už bych zvolil raději komunikaci přes Windows Messages nebo DDE nebo podobnou archaickou záležitost... Kromě toho tazatel měl zřejmě namysli odesílat text obecně do jakékoliv aplikace která k tomu není přizpůsobena.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro kamení nechoďte, tohle se na jiných platformách (nebudeme jmenovat) běžně dělá, nebo se na to použije roura.

Tady bych doporučil použít Windows Communication Foundation, i když s tím je moc sena. Záleží, jaké má tazatel zkušenosti a co opravdu potřebuje, pokud potřebuje jednorázově předat nějaká data jiné aplikaci, tak ten soubor není až tak špatný - je to jednoduché a funguje to.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, je otázka, co chce komunikací docílit. Každopádně pokud by psal obě aplikace, každou na jiné vývojové platformě, tak používání těchto komunikačních způsobů může být velmi problematické. Proto se přikláním k souborům. Nemyslím, že hodiny studia způsobu implementace komunikačních API bude příjemnější, než použití funkce pro zapsání do souboru a jeho sledování. A navíc nevidím na použití souborů nic extra špatného. Vy snad ano?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, kromě toho že je to naprostá zrůdnost tak zde bude problém například se synchronizací zápisu a čtení, která se v takovýchto případech obvykle řeší přes globální mutexy, což musí být v unmanaged kódu skutečná lahoda...

Já osobně bych raději strávil hodiny studiem komunikačních technologií, než napsal podobnou prasečinu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji všem za názory a omlouvám se, nechtěl jsem rozvířit vášně. O co mi jde: nechci dělat nic složitého. Jde mi jen o test možnosti posílat na cizí aplikace text. Tzn. úplně blbě začátečnicky(jsem naprostý začátečník) řečeno: napsat text do txtboxu vlastní aplikace,tento text zařadit do generické kolekce a po kliknutí do textového pole cizí aplikace(např.do Wordu nebo do pole určeného pro textový vstup od uživatele)tento text do ní programově poslat.Chci vědět,kam až je možné zajít při ovládání cizích aplikací pomocí vb.net. Mimochodem,na diskusních fórech jsem četl dost o tom, že je na podobná témata vb.net úplně k ničemu.Chci tedy vědět, je-li či není-li to pravda.

Uvítal bych jakékoli rady, jak to řešit a nebojím se ani dlouhého studia.

Omlouvám se, že se nejspíš nevyjadřuji dost jasně a odborně.

Všem děkuji za čas.

Marcel Borna

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud chcete komunikovat s nějakou unmanaged aplikací, tak první krok je zjistit, zda-li pro to má nějaké prostředky, obvykle je to API ve formě COM rozhraní, což mají například aplikace Microsoft Office. Pokud aplikace žádné takové rozhraní nemá, nemá cenu se tím dále zabývat, protože to překračuje rozsah vašich současných znalostí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak se ale dostat dál, když si současné znalosti nerozšířím?. O COM vím a občas to i používám při automatizaci Excelu. Teď mi jde o cizí aplikaci. Vím o Api, o kterých jsem psal hned na začátku, jenom zatím nevím, jak postupovat a jestli je použití API jediným řešením. Vím jak ovládat aplikace pomocí API, ale nějak nevím, co s tím textem. Zatím jste mi prozradili, jakým směrem se asi vydat.

Pan Herceg píše o rouře. Mohl byste mi to trochu přiblížit?

Děkuju.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pořád jste nám ale neřekl, do jaké aplikace konkrétně to budete posílat. To se nedá udělat nějak obecně pro všechny, jednak už z principu (co mi sakra má nějaká jiná aplikace ovládat tu moji a dělat něco, co třeba uživatel ani neví a nebo nechce) a jednak kvůli bezpečnosti (tohle by se dalo moc hezky zneužít při vývoji virů, kdyby to bylo moc jednoduché).

Za předpokladu, že chcete posílat text do aplikace, kterou jste nepsal vy, pak je nesmysl dělat do přes soubory, roury, Windows Communication Foundation, to by musely podporovat obě aplikace. Na co konkrétně to potřebujete? Bez toho se asi dál nepohneme.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jde mi obecně o jakoukoli asplikci, kde je použit vstup od uživatele např. v textovém poli. Tedy třeba Notepad,Word,...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to se smiřte s tím, že to nejde. Každá aplikace je úplně jiná a každá má jinou "vnitřní strukturu". Pokud to chcete cílit na jednu aplikaci, pak by to možná lo, ale obecně to nepůjde jinak, než že budete simulovat stisky kláves, což je strašně pomalé pro texty delší než 10 znaků.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud chcete obecně aplikaci posílat text, jako kdyby jste jí ovládal z klávesnice, tak doporučuju tento článek http://vbnet.cz/clanek--104-globalni_odc...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback