Avatar billede aasuper Nybegynder
17. marts 2004 - 14:18 Der er 11 kommentarer og
1 løsning

Modtage fra fjernbetjening

Hej -

Jeg har et Hauppauge tv-kort i min pc og med dette kort hører en fjernbetjening. Jeg kunne godt tænke mig at lave et program, hvor man kan bruge denne fjernbetjening - så ved nogen, hvordan man 'fanger' signalerne fra denne i Delphi?


>>AASuper
Avatar billede athlon-pascal Juniormester
17. marts 2004 - 15:30 #1
Det skulle ikke undre mig, hvis computeren opfatter tryk på fjernbetjeningen som tryk på tastaturet. Lad os prøve at tjekke en gang:

Prøv at lave et nyt Delphi-projekt, og indsæt en TLabel, label1, et synligt sted på formen.

Indsæt dernæst følgende i formens OnKeyDown:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  S: String;
begin
  // Vi sikrer os, at der ikke er nogle tegn i S:
  S := '';

  //Hvis Ctrl-tasten bliver holdt nede, så tilføj den til S:
  if ssCtrl    in Shift then
    S := 'Ctrl + ';
  //Hvis Alt-tasten bliver holdt nede, så tilføj den til S:
  if ssAlt in Shift then
    S := S + 'Alt + ';

  //Hvis Shift-tasten bliver holdt nede, så tilføj den til S:
  if ssShift in Shift then
    S := S + 'Shift + ';

  // Hvis Key er Ctrl, Alt eller Shift, står det allerede i S:
  if (Key in [16..18]) then
    // Sæt Label1's Caption til S minus de sidste 3 tegn der er et '+' med mellemrum på begge sider:
    Label1.Caption := Copy(S, 1, Length(S) - 3)
  // Hvis ikke Key er Ctrl, Alt eller Shift:
  else
    // Sæt Label1's Caption til S + værdien af Key:
    Label1.Caption := S + IntToStr(Key);
end;


Kør programmet, og prøv at trykke lidt på forskellige taster på fjernbetjeningen. Ændres teksten på Label1?
Avatar billede aasuper Nybegynder
17. marts 2004 - 15:38 #2
Der sker desværre ingenting...

>>AASuper
Avatar billede dkn Nybegynder
17. marts 2004 - 17:40 #3
prøv at gå ind i enhedshåndtering, der må du jo have dit tvkort som en enhed, åben den, se hvilke porto den bruger. Hvis der er nogle kan du måske læse dem direkte derfra.
Avatar billede aasuper Nybegynder
17. marts 2004 - 17:49 #4
Inde under enhedshåndtering findes udover selve tv-kortet også en "IR Decoder" til kortet - det må jo være den, der er fjernbetjeningen. Jeg kan ikke se andet, end at den er placeret på PCI-slot 5 (PCI-bus 0, enhed 12, funktion 1)...

>>AASuper
Avatar billede dkn Nybegynder
17. marts 2004 - 18:07 #5
har den ingen ressourcer?
Avatar billede aasuper Nybegynder
17. marts 2004 - 18:57 #6
Under ressourcer finder jeg:
Hukommelsesområde E2000000-E2FFFFFF, IRQ 16.


>>AASuper
Avatar billede dkn Nybegynder
17. marts 2004 - 19:03 #7
men den har ingen I/O område? hvad med selv kortet
Avatar billede aasuper Nybegynder
17. marts 2004 - 19:09 #8
Ingen af dem har I/O-område.

>>AASuper
Avatar billede aasuper Nybegynder
17. marts 2004 - 20:38 #9
Nå, jeg har fundet ud af det selv. Det viser sig, at der med driveren fulgte en fil IRRemote.dll, som indeholder funktioner, som løser mit problem...

Men I skal have mange tak for opmærksomheden alligevel.

>>AASuper
Avatar billede mtj111 Novice
21. maj 2005 - 14:35 #10
Hvordan løser IRRemote.dll dit problem... jeg er nysgerring :-)

Michael
Avatar billede aasuper Nybegynder
31. maj 2005 - 19:15 #11
Det viste sig, at IRRemote.Dll indeholdt tre funktioner, som kan defineres således:

function IR_Open (value1, value2, value3, value4: Integer): Integer; stdcall; external 'IRRemote.dll';
function IR_Close (value1, value2: Integer): Integer; stdcall; external 'IRRemote.dll';
function IR_GetKeyCode (var value: Integer): Integer; stdcall; external 'IRRemote.dll';


Fjernbetjeningen initialiseres ved
IR_OPEN(0, 1, 0, 0)
Den kommer ud med heltallet '1', hvis den er initialiseret ok.

Så kan du lukke den sådan:
IR_Close(0, 0)
Den kommer ud med heltallet '1', hvis den er lukket ok.

Og så havde jeg en timer kørende med et passende interval (500-1000 ms):

procedure TForm1.Timer1Timer(Sender: TObject);
var
tal, resultat: integer;
begin
tal:=1;

try resultat:=IR_GetKeyCode(tal) and 255;
      except on EAccessViolation do begin  timer1.enabled:=false; showmessage('Fejl'); end ;end;

if resultat<>255 then
memo1.Lines.add(inttostr(resultat));
end;



Håber, det mættede din nysgerrighed.

>>AASuper
Avatar billede mtj111 Novice
02. juni 2005 - 18:07 #12
hehe... TAK!

Michael
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
Kurser inden for grundlæggende programmering

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