Avatar billede Slettet bruger
08. december 2008 - 15:38 Der er 37 kommentarer og
1 løsning

Forskellige spørgsmål i forbindelse med program til fjernkontrol

Hej eksperter,

Jeg overvejer i øjeblikket at skrive et simpelt program til fjernkontrol af min computers uTorrent-downloading. Applikationen skal kunne starte og stoppe programmet og styres fra et webbrowser, hvorfor der er en del ting, jeg først skal have styr på.

At starte uTorrent er enkelt nok - jeg kører bare applikationen.

At slukke uTorrent er lidt mere avanceret. Hvordan kan jeg sende en tastekombination til et program? F.eks. Alt+F > Pil op > Enter for bede uTorrent lukke.

Kommunikationen mellem webside og C#-applikationen er også lidt tricky. Jeg forventer ikke at lade C#-delen køre som service men derimod en almindelig enkeltstående eksekverbar fil. Hvordan kan jeg lettest kommunikere mellem HTML/PHP og C#?

På forhånd tak for hjælpen :)
Avatar billede Syska Mester
08. december 2008 - 17:40 #1
Du ved godt der allerede findes følgende: http://forum.utorrent.com/viewtopic.php?id=14565 ?

mvh
Avatar billede Slettet bruger
08. december 2008 - 19:33 #2
Ja, men det virker vel ikke gennem en router?
Avatar billede Syska Mester
08. december 2008 - 19:45 #3
Jo, hvis du forwarder de rigtige porte så gør det ... ellers ville programmet ikke give meget mening.

Dit program du vil lave skal jo også have porte forwardet for at virke ...

// ouT
Avatar billede Slettet bruger
08. december 2008 - 20:48 #4
Ikke nødvendigvis men lad os bare lade det ligge.

Så jeg anvender den port, jeg har indstillet i uT og således også forwardet ved routeren til min pc?
Avatar billede Syska Mester
08. december 2008 - 20:57 #5
Måske der ikke er noget jeg ved ... men hvordan vil du oprette en forbindelse til din PC bag din router uden at forward porte ?
Hvis det skal kunne lade sig gøre skal vi jo igennem en 3parts server for at få det til at virke ...
Men måske der er noget jeg ikke ved, så må du da gerne forklare hvordan du vil få det til at virke ... så kan jeg også lære noget :-)

Ja, du skal selvf bruge den port som du opsætter der webinterface til at bruge for at det virker.

// ouyT
Avatar billede Slettet bruger
08. december 2008 - 22:05 #6
Okay, skønt.

Tja, oprindeligt tænkte jeg et tredelt system.

Pc
- uTorrent
- C#-applikation

Server
- Hjemmeside

Client
- Bruger

Bruger > [Browser] >
Hjemmeside > [Mail eller lignende beskedsystem] >
Applikation > [Kommandoer] >
uTorrent

For at gøre det helt klart (for jeg har nok bare forvirret dig so far!):
Hjemmesidens PHP-del sender mails eller lignende, som applikationen konstant venter på og læser. Så fortolkes indholdet af beskeden, og de nødvendige kommandoer sendes videre til uTorrent. Det behøves ingen output (altså tilbagesending af informationer til brugeren) være, da de eneste to funktioner på siden skal være:

Pause download
Fortsæt download

Meget enkelt :) Giver det mening, og kan det virke i praksis?
Avatar billede Syska Mester
08. december 2008 - 23:13 #7
Jeg ville nok bruge det som allerede er lavet ...

Tror der ville være for mange fejl kilder i sådan noget, og som jeg næsten kan høre på det er det ikke noget du har erfaring med at lave komplicerede apps ... har jeg heller ikke, så jeg ville mene det du har nævnt der er ikke helt lige til.

Men som jeg forstår det ... vil du lade din C# app poll en Mailserver ... for nye commands den skal udføre ....

En hjemmeside hvor du kan logge ind ... og sende mails til den mail konto som din C# app poll hele tiden ...

Hmmmm ... ville nu stadig lave det med noget port forward.

// ouT
Avatar billede Slettet bruger
09. december 2008 - 07:12 #8
Tja, men det der allerede er lavet, kan vel ikke begrænses til start og stop? Det skal nemlig ikke bruges til mig selv med derimod husets øvrige beboere... De klager nemlig over, at min pc sluger hele nettet, når den downloader ;) Og så er det jo lettest, hvis de bare kan pause skidtet, når de logger på.
Avatar billede Syska Mester
09. december 2008 - 12:22 #9
Hmmm ...

Hvis det skal bruges internt er det vel heller ikke noget problem at bruge det webinterface ... så skal der jo ikke rdr nogen porte ...

Og jeg er da ret sikker på at man kan pause alle downloads derfra ...

// ouT
Avatar billede Slettet bruger
09. december 2008 - 12:34 #10
Jamen jeg mener, at de øvrige brugere f.eks. ikke må kunne se eller ændre, hvad der downloades... De må overhovedet ikke kunne gøre andet end at starte og stoppe programmet.
Avatar billede Syska Mester
09. december 2008 - 12:48 #11
ohhh ...

Nu er du ved at have forklaret hvad det egentlig er du vil ...

Men det er noget af et projekt du er ved at kaste dig ud i ... er det ikke nemmere bare at sætte up/down limits på ... i bestemte perioder af døgnet ... og resten af det, sørger du bare for ikke at bruge hele jeres båndbredde ... nok  nemmere løsning.

Det andet er nok lidt kompliceret.

Men jeg ville nok lave en socket server ... og så lade den køre på din computer ... så burde det være nemt at slå processen "utorrent.exe" ned ... og så starte den igen senere ...

// ouT
Avatar billede Slettet bruger
09. december 2008 - 13:11 #12
Jeg har ingen anelse om, hvad en socket server er men har en god idé til en anden løsning. Jeg skriver lige tilbage, når jeg har prøvet det.
Avatar billede sph1nx Nybegynder
09. december 2008 - 14:12 #13
det virker da godt nok som en usædvanlig bøvlet løsning med at lade en C# applikation "polle" en mail inbox.. hvorfor ikke bare expose en webservice fra den server hjemme siden kører på ?
Avatar billede Slettet bruger
09. december 2008 - 14:58 #14
Fordi hjemmesiden ligger på et webhotel.
Avatar billede Slettet bruger
09. december 2008 - 14:59 #15
Nøj, hvor er det irriterende, at Eksperten er begyndt først at sende mails ud om nye kommentarer efter 45 minutter!
Avatar billede Syska Mester
09. december 2008 - 15:05 #16
sph1nx: Enig ... men jeg kan ligesom forstå på ham at det er eneste mulighed.

Men ... WebService ville være en mulighed.

// oUT
Avatar billede Syska Mester
09. december 2008 - 15:05 #17
og nej ... exp sender da ud hele tiden ... mine mails vælter da ind.
Avatar billede Slettet bruger
09. december 2008 - 15:20 #18
Det varierer meget. Jeg har f.eks. allerede fire minutter efter din sidste besked modtaget en mail, mens mails nogen gange aldrig dukker op eller er op til en time forsinkede.
Avatar billede sph1nx Nybegynder
09. december 2008 - 15:21 #19
Du kunne også hoste en WCF webservice i en service på den computer der kører utorrent, og så forwarde porten i routeren til den, så skal du bare have en client app til at styre det
Avatar billede Slettet bruger
09. december 2008 - 15:52 #20
Jeps. Jeg vil bare helst undgå services, da jeg hverken har erfaring med dem eller et environment der er behjælpeligt med dem (bruger VC#08EE).
Avatar billede sph1nx Nybegynder
09. december 2008 - 16:39 #21
Du kunne da også bare hoste et .NET remoting objekt i en simpel console application.
Avatar billede Slettet bruger
12. december 2008 - 23:03 #22
Hmm... Jeg kan ikke få SendKeys til at sende tastetryk til andre applikationer. Nogen idéer til hvordan?
Avatar billede sph1nx Nybegynder
13. december 2008 - 07:37 #23
det er fordi du skal have det vindue i fokus som du skal sende tastetryk til, det kan du gøre sådan her

using System; 
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace test 
{
    class Program
    {
        [DllImport("User32.dll")]
        public static extern Int32 SetForegroundWindow(int hWnd);
        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);
        static void Main(string[] args)
        {
            int handle = FindWindow("notepad", null);//find vinduet med titlen notepad
            SetForegroundWindow(handle); //sæt det i fokus
            SendKeys.SendWait("%({F4})"); //send dine tastetryk, i det her tilfælde ALT+F4
         
        }
    }
}
Avatar billede Slettet bruger
13. december 2008 - 10:59 #24
Smukt :) Tak.
Avatar billede Slettet bruger
13. december 2008 - 11:35 #25
Igen besluttede Eksperten sig for at slette min post. Lige et sekund...

Error    1    The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    17    10    uControl
Error    2    The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    17    10    uControl
Error    3    The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    19    10    uControl
Error    4    The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    19    10    uControl

Der. Hvad mangler jeg?
Avatar billede sph1nx Nybegynder
13. december 2008 - 18:01 #26
umiddelbart ville jeg mene du mangler den her linie i toppen af din cs fil, ligesom jeg har i eksemplet oven over :

using System.Runtime.InteropServices;
Avatar billede Slettet bruger
13. december 2008 - 22:59 #27
Nej, det gør ingen forskel... Skal jeg tilføje en reference eller noget?
Avatar billede Slettet bruger
14. december 2008 - 14:17 #28
Ingen der ved, hvorfor jeg får fejl? Arne?
Avatar billede Syska Mester
14. december 2008 - 21:19 #29
Så har du en fejl i din kode ... vi kan ikke gætte so til din kode, hvordan du har sat det ind, etc.

Show us ...

// ouT
Avatar billede Syska Mester
14. december 2008 - 21:20 #30
Btw ...

Hvad compile fejl får ?
Avatar billede Slettet bruger
14. december 2008 - 22:47 #31
Kompileringsfejlene står ovenfor... Men for god ordens skyld:

Error    1    The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    17    10    uControl
Error    2    The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    17    10    uControl
Error    3    The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    19    10    uControl
Error    4    The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    19    10    uControl

Fejlene opstår, når jeg anvender koden Sphinx postede... Igen for god ordens skyld:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices; // Necessary?

namespace uControl
{
    static class Client
    {
        public static string WindowText = "μTorrent 1.8.1";
       
        public static string User;

        [DllImport("User32.dll")]
        public static extern int SetForegroundWindow(int hWnd);
        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);

        public static bool Start(int delay)
        {
            if (Test)
            {
                Write("* Unable to initiate uTorrent after " + (delay / 1000).ToString() + " seconds as the application is already running.");
                return false;
            }
            if (delay > 0)
            {
                Write("Waiting for " + (delay / 1000).ToString() + " seconds...");
                System.Threading.Thread.Sleep(delay);
            }
            if (Test)
            {
                Write("* Unable to initiate uTorrent as the application is already running.");
                return false;
            }
            Write("Initiating uTorrent...");
            System.Diagnostics.Process.Start(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\uTorrent\\uTorrent.exe");
            Write("Waiting for 2 seconds...");
            System.Threading.Thread.Sleep(2000);
            Write("Opening main uTorrent window...");
            System.Diagnostics.Process.Start(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\uTorrent\\uTorrent.exe");
            Write("Changing focus to main uTorrent window...");
            Focus();
            Write("Sending closing key combination to main uTorrent window...");
            SendKeys.SendWait("%({F4})");
            return true;
        }

        public static bool Stop(int delay)
        {
            if (!Test)
            {
                Write("* Unable to terminate uTorrent after " + (delay / 1000).ToString() + " seconds as the application is not currently running.");
                return false;
            }
            if (delay > 0)
            {
                Write("Waiting for " + (delay / 1000).ToString() + " seconds...");
                System.Threading.Thread.Sleep(delay);
            }
            if (Test)
            {
                Write("* Unable to initiate uTorrent as the application is already running.");
                return false;
            }
            Write("Opening main uTorrent window...");
            System.Diagnostics.Process.Start(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\uTorrent\\uTorrent.exe");
            Write("Changing focus to main uTorrent window...");
            Focus();
            Write("Sending termination key combination to main uTorrent window...");
            SendKeys.SendWait("%(F)X");
            return true;
        }

        private static bool Test()
        {
            if (Process.GetProcessesByName("uTorrent").Length > 0)
                return true;
            return false;
        }

        private static void Focus()
        {
            int handle = FindWindow(WindowText, null);
            SetForegroundWindow(handle);
        }

        private static void Write(string output)
        {
            Console.WriteLine("[" + User + "] " + output);
        }
        private static void Write(string output, bool user)
        {
            if (user)
                Write(output);
            else
                Console.WriteLine(output);
        }
    }
}
Avatar billede Syska Mester
15. december 2008 - 00:31 #32
Et par spm:
Du bruger en "Test" (nok en property) flere steder i den her kode ... uden jeg kan finde den.
Alt er static ... lidt mærkeligt efter min mening ... fjern alle dine static keywords ... og opret en instance af din klasse i din kode og brug din funktioner derfra.

----
private static void Write(string output)
        {
            Console.WriteLine("[" + User + "] " + output);
        }
----

Hvor er den "User" property ?

Jeg kan ikke lige helt gennemskue din kode ... synes der mangler en masse, den kan i hvert fald ikke compile på min computer.

// ouT
Avatar billede Slettet bruger
15. december 2008 - 09:00 #33
Well, det er tilladt at tænke selv ;)
Test skulle være Test(), og med den rettelse fungerer skidtet sgu. Måske jeg også selv skulle have tænkt lidt, da jeg havde fire manglende ()-sæt til Test og fire kompileringsfejl af samme karakter... Hmm.
User defineres eksternt men betyder ikke noget her.
Jeg arbejder videre nu...
Avatar billede Syska Mester
15. december 2008 - 13:01 #34
ja, det er tilladt tænke selv ... men håber da kommentar var til dig selv.

Jeg bad jo om at få sendt den kode som du prøvede at compile og hvis de fejl var i din kode, skulle du jo rette dem først ... ellers må jeg jo antage at du enten fjerner lidt kode for at jeg ikke kan se det hele.

Det er jo muligt både at have en Test og en Test() så ...

Men når du siger at du får følgende fejl:
Error    1    The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    17    10    uControl
Error    2    The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    17    10    uControl
Error    3    The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    19    10    uControl
Error    4    The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)    Client.cs    19    10    uControl

Når du selv compiler ... og jeg får  helt andre fejl ... så er det jo ik' nemt.

Men får du stadig compile fejl med at "DllImport" ikke kan findes ?
Avatar billede Slettet bruger
15. december 2008 - 13:04 #35
Nope, det fungerer nu. Jeg har også fået forbindelsen til PHP-scriptet til at virke, så jeg arbejdet selv videre med webdelen nu.
Avatar billede Syska Mester
15. december 2008 - 13:35 #36
Så har det nok også virket efter du har fået den using på ... men af grunde jeg ikke kender er der kommet andre fejl ind i dit program.

Men jeg er da glad for at det er kommet til at virke.

mvh
Avatar billede Slettet bruger
18. august 2010 - 17:29 #37
Jeg lukker nu... Vil du have point, buzzzz?
Avatar billede Syska Mester
18. august 2010 - 17:40 #38
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester