String naar aplicatie sturen tijdens runtime

Status
Niet open voor verdere reacties.

MartinJM

Terugkerende gebruiker
Lid geworden
9 nov 2008
Berichten
1.144
Hallo,

Ik heb een probleempje met een programma wat ik aan het maken ben:
Ik wil dat het programma op de achtergrond draait en dat als er op een speciaal aangemaakte snelkoppeling gedrukt wordt, er een tekenreeks (String) naar het al lopende programma verzonden wordt. Ik heb er al langer naar gekeken maar kwam telkens uit op niks.

Ik had al meerdere ideeën en die heb ik allemaal geprobeerd, maar geen ervan werkten (mede doordat ik sommige niet helemaal begreep). Voor iedereen die het programma Steam heeft, zal het ongetwijfeld wel zijn opgevallen dat de snelkoppelingen op het bureaublad bestaan uit een URL. Dat is voor mij dus ook een optie. Argumenten dus helaas niet omdat het tijdens runtime moet gebeuren zodat het gewoonweg sneller is.

Heeft iemand ideeën over hoe dit mogelijk is en dan het liefst ook uitleg erbij?

Alvast bedankt! :thumb:
MartinJM


PS: Ik heb remoting ook al geprobeerd, maar daar snapte ik niet echt veel van. Als iemand dat (goed) uit kan leggen kan dat ook de oplossing zijn.
 
Ik denk dat steam hier gewoon gebruikt maakt van de windows service die altijd op de achtergrond draait. De snelkoppeling stuurt een command naar de service en de stream applicatie luistert naar de service. Zodra command X wordt opgeroepen zal de applicatie spel X starten. (denk ik)

Misschien een 'hack' kan zijn dat je ergens (appdata of zo) een tekstbestandje hebt staan en als je hier iets in zet (met de hand, programma of wat dan ook) dat je met de FileWatcher class dat bestand in de gaten houd. Als het veranderd, reageert je programma erop door het uit te lezen en iets te doen.

Of misschien een notify icon in de taakbalk? Met een context menu om dingen uit te voeren zonder dat het programma zichtbaar wordt? (eventueel met een form om iets in te zetten door de gebruiker? weet niet precies wat de bedoeling is van je app.)
 
Hoi,

Allereerst bedankt voor de snelle reactie. :)

Ik gebruikte steam even als voorbeeldje, maar daar had ik zelf ook al even naar gekeken en toen was ik erachter gekomen dat als je in het registery op de goede plaats een sleutel toevoegt, dat je dan in je browser gewoon de keynaam kan intypen en dat dan het programma opent. Dan heb je echter nog steeds het probleem dat het een nieuw proces is. En dat is bij mij nou juist niet de bedoeling... :confused:

Over de notifyicon: Ik had er al over nagedacht, maar het programma draait eigenlijk vooral om de snelkoppelingen, en die wilde ik er dan toch eigenlijk ook wel in hebben.

De andere mogelijkheid die je noemde, de 'hack', had ik al geprobeerd, maar dan met een oneindige loop, waardoor het in taakbeheer leek alsof mijn programma de hele tijd hard bezig was terwijl het alleen een bestandje uitleest. Maar de filewatcher kende ik nog niet, daar ga ik nu naar kijken. Ik hoop dat dat voor mij de oplossing is! :thumb:

Nogmaals bedankt voor je reactie!

MartinJM

[edit]
Het werkte eerst niet met de 'hack' (het programma sloot af in plaats van iets te doen), maar dat kan ook komen omdat er nog wat codes tussen stonden die ik eerder al had geprobeerd. Nu ben ik opnieuw begonnen aan het programma en ben ik het dus vanaf de grond weer opnieuw aan het opbouwen. Dat kan nog wel eventjes duren, maar ik laat nog weten of dit voor mij de oplossing is!

MartinJM
[/edit]
 
Laatst bewerkt:
Hoi,

Sorry voor het late reageren, maar het heeft nou eenmaal een tijdje geduurd....:)

Het werkt nu helemaal! Het is misschien niet de meest optimale en efficiënte code, maar het werkt en daar gaat het om! :thumb:
Ik heb het dus gewoon met een filewatcher en een bestand in de temp folder gedaan.

Hartelijk bedankt voor het snelle en goede antwoord,
MartinJM
 
Ja, maar het programma draait wel gedeeltelijk om zijn snelheid... Als die er dan niet in zit heeft het ook niet zoveel zin :P

Het enige wat eigenlijk niet zo mooi is is dat op sommige plaatsen waar makkelijk errors ontstaan ik nu met een try...catch blok en het goto statement nu loops creëer... Dus ik hoop dat dat niet verkeerd gaat als iemand er veel tegelijk mee gaat doen (veel snelkoppelingen tegelijk opent). Maarja, dat zal ik dan nog eerst even testen. Eventueel zal deze topic toch weer geopend moeten worden als blijkt dat het zo toch niet gaat. Maar laten we hopen dat het niet zover komt ;)

MartinJM
 
Het controleren van dat bestandje kun je wel op een apparte thread doen neem ik aan, lijkt me in ieder geval geen slecht idee om je hoofdprogramma minder in de weg te zitten.

Ik weet niet wat je programma doet of waarom makkelijk errors ontstaan, maar als het te maken heeft met dat bestandje (als dat gewijzigd wordt tussendoor). Misschien moet je een handler class maken die alles 1 voor 1 af handeld zodat er niets tussendoor komt.

Zeg maar een rij bij een kassa, en dan voordan je de spullen op de band zet kijken of de kassa niet gesloten is of dat je er alleen kunt pinnen als je met contant wilt betalen :P

Als je weet wat voor errors er kunnen ontstaan kun je ook makkelijk verschillende catches doen en alles goed oplossen. (tenzij dit voor de gebruiker lastig wordt)
En ja, wat kan ik zeggen over goto... eigenlijk niets want ik gebruik het nooit. (persoonlijk vind ik het ook niet fijn, code is lastiger te volgen)

Succes ermee in ieder geval :thumb:
 
Ja, ik gebruik ook verschillende threads (hiervoor nog niet, maar dat is wel een goed idee :)), maar dan heb je nog altijd het probleem dat het ene programma nog aan het lezen kan zijn terwijl het andere probeert te scrhijven. Dan gaat het niet goed. Maar dat los ik dan dus op met een try-catch blok en een goto:
[CPP]Probeer_Opnieuw:

Try
''// Code
Catch
Goto Probeer_Opnieuw
End Try[/CPP]

Dat maakt het wel langzamer, en als de gebruiker veel input gaat geven zal het ook vast wel verkeerd gaan, maarja, als je iets graag wil slopen kan dat altijd natuurlijk :p

En om te zorgen dat het ene programma wacht tot het andere programma klaar is, zal waarschijnlijk ook weer op zo'n zelfde manier moeten, of heb je daar misschien nog een oplossing voor?

Dankje, MartinJM
 
Laatst bewerkt:
Je kunt eens kijken naar locking (ik ben niet echt bekend me VB misschien dat het anders heet daar)
http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.100).aspx

En de standaard dingen zoals bij het lezen van het bestand, alleen Read access geven en snel lezen en sluiten, en daarna pas iets met de data doen. Zelfde geld voor schrijven, alles voorbereiden, dan snel schrijven en de file weer los laten.

Dit is hetzelfde idee als de kassa rij, wat je nu doet met een try/catch/repeat until success is een beetje te vergelijken met 10 man naar de kassa rennen en kijken wie er eerst is. Daarna herhalen met de rest tot dat iedereen is geweest. (of ik zie het verkeerd, misschien te weinig context wat je precies doet, hoelang dat duurt en hoe vaak)

Loopt je programma soms niet vast in een infinite loop? (met deze code zou het wel mogelijk zijn lijkt mij)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan