C# program måste utföra två grejer efter varandra?

Permalänk
Medlem

C# program måste utföra två grejer efter varandra?

Hallå!

Jag har ett C# program som har två funktioner som måste ske efter varandra, ta som exempel muspekaren i windows, först förflytta den, sen klicka. Så, tex ett annat program med samma funktionalitet får inte hoppa in mellan flyttning & klickning och sabba. Det går ju tex inte att använda lock eller? det fungerar väll bara i en & samma applikation?

MVH
Dalton Sleeper

Permalänk
Medlem

En närmare förklaring av vad du vill uppnå vore bra. Förstår jag dig rätt här: Du har två processer, A1 och A2 som båda är instanser av samma applikation A? Om A1 anropar funktion f och g i följd så vill du absolut inte att A2 ska hinna emellan med sina anrop till f och g innan A1 är helt klar med sitt anrop till g?

Jag tror att du får titta på en lösning med delat minne (shared memory), där du lagrar en enkel variabel som fungerar som lås... men jag känner bara till principen och inte alls hur man gör.

Permalänk
Medlem

Nja, processerna kan vara skilda, ingen kommunikation mellan dom genom meddelanden eller delat minne, tänkte om det fanns något sätt att tvinga en viss mängd kod köras utan att avbrytas...

det jag vill kanske inte alls går att göra, men frågar iaf. Om jag hade meddelande sändning, delat minne eller trådat i samma process så skulle det vara enklare, men tex användaren skulle då ändå kunna rycka i musen och ev position & klick skulle hamna fel... eller om det finns någon sorts hook... tror inte heller att man kan använda lock på muspekare vad jag vet..

Permalänk
Medlem

Ett sätt jag kollar upp nu är att använda mouse hook, som då antagligen kan verifiera om musklicket skedde på rätt ställe eller ej, om processen kan få reda på det kan den enkelt göra ett omklick...

Permalänk
Medlem

Någon form av global mutex, kanske du är ute efter. Vet dock ej om man kan göra i c#. Finns även risk för ordentliga låsningar.

Permalänk
Medlem

Använd följande kod i Main() metoden

bool AloneInstance; Mutex m = new Mutex(true, "något unikt, t.ex. ett GUID", out AloneInstance); if (!AloneInstance) return; //Eller vad dit första form-fönster heter Application.Run(new Form1()); GC.KeepAlive(m);

Nu kan programmet bara köras en åt gången.

Permalänk
Medlem

Förstår fortfarande inte frågan...
är det bara muspekaren du vill frysa under en tid?

Visa signatur

weeeee

Permalänk
Medlem

Det verkar nästan som om det är mus upp meddelandet som inte kommer i tid, därav avbryts/flyttas av andra programmet... Har en knapp som endast verkar scrolla ett fönster när mus up inträffar, gjorde en toklösning att rulla denna sida manuellt för säkerhets skull då det räcker med mus ner för det viktiga att fungera...

Alltså, de nu två programmen fungerar som bottar (på svenska? autobots, agenter...?) som körs på samma dator, de slåss om muspekaren och kan stjäla den ur handen för den andra. Så, en knapp en bot brukar trycka på vill ha både mus ner och upp för att bete sig normalt (verkar det som), dock är det bara denna av ett 10 tal knappar som strular, och endast om båda bottarna körs samtidigt, har alldrig missat detta när endast en körs.

Wee, det här vart stökigt, och sent är det också, och inget bevisat, bara gissningar...

mounte: nja, har några knapptryckningar också som sänds tex med sendkeys("^c"); eller liknande.

Dock har jag problem med det automatiskt, kopiera en text/nuffrer på en sida, få in i clipboard, ut etc, fungerar att kopiera med en timer med manuell markering, fast när man markerar text med musklick (skickade) först och sedan kör ctrl+c med sendkeys så tokhänger sig programmet utan meddelanden.

Känns som jag kom in på andra spår nu, fråga om ni vill
Det kanske inte är möjligt att få två sådana program att fungera 100% parallellt på samma dator :/ ett biggare program som är trådat fixar ju det största problemet, att dom stjäl muspekaren för varandra, ev knapptryck också, dock hade det varit bäst att ha dom som separata program, tycker jag iaf men men.