AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String -> Word

Ein Thema von TheAn00bis · begonnen am 17. Jun 2006 · letzter Beitrag vom 17. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#1

String -> Word

  Alt 17. Jun 2006, 12:42
Hey,

Ich möchte den im Parameter der Anwendung übergebenen Virtual Keycode als Tastendruck simulieren.
Aber wie bekomme ich den Parameter, der ja ein String ist nach Word umgewandelt?

Gab es hier schon einige male, aber "strtoint" kann ja nicht klappen, da z.B. "VK_VOLUME_MUTE" nicht aus Zahlen besteht.
Leider konnte ich über die Suche nichts gescheites finden, aber ich bin sicher ihr könnt mir helfen!
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: String -> Word

  Alt 17. Jun 2006, 12:47
Zitat von TheAn00bis:
Gab es hier schon einige male, aber "strtoint" kann ja nicht klappen, da z.B. "VK_VOLUME_MUTE" nicht aus Zahlen besteht.
Ich verstehe nicht ganz. VK_VOLUME_MUTE ist eine Konstante, à la:

Delphi-Quellcode:
const
  VK_VOLUME_MUTE = 5
Nur als Beispiel, ich kenne den Wert nicht auswendig. Du müsstest ihn eigentlich mittels IntToStr anzeigen lassen können oder geht das nicht?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.131 Beiträge
 
Delphi 12 Athens
 
#3

Re: String -> Word

  Alt 17. Jun 2006, 12:54
Dafür gibt es nichts Fertiges. ('s gibt einfach zu wenige, die sowas brauchen)

Also selbermachen, wofür du nicht unbedingt wissen mußt, welcher Wert in dem Word steckt.


z.B.
Delphi-Quellcode:
If ParamStr(1) = 'VK_VOLUME_MUTEThen W := VK_VOLUME_MUTE
Else If ParamStr(1) = 'VK_AThen W := VK_A
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#4

Re: String -> Word

  Alt 17. Jun 2006, 12:59
Zitat von Matze:
Zitat von TheAn00bis:
Gab es hier schon einige male, aber "strtoint" kann ja nicht klappen, da z.B. "VK_VOLUME_MUTE" nicht aus Zahlen besteht.
Ich verstehe nicht ganz. VK_VOLUME_MUTE ist eine Konstante, à la:

Delphi-Quellcode:
const
  VK_VOLUME_MUTE = 5
Nur als Beispiel, ich kenne den Wert nicht auswendig. Du müsstest ihn eigentlich mittels IntToStr anzeigen lassen können oder geht das nicht?
Stimmt, ich habe das etwas falsch gesehen.

Ich kann die Zahl über "inttostr", wie du gesagt hast herausfinden, aber das bringt mir nicht viel, da ich nicht von einem (im Parameter übergebenen) String "VK_VOLUME_MUTE" auf den Bezeichner "VK_VOLUME_MUTE" einer Konstanten komme, oder?

Zitat von himitsu:
Dafür gibt es nichts Fertiges. ('s gibt einfach zu wenige, die sowas brauchen)

Also selbermachen, wofür du nicht unbedingt wissen mußt, welcher Wert in dem Word steckt.


z.B.
Delphi-Quellcode:
If ParamStr(1) = 'VK_VOLUME_MUTEThen W := VK_VOLUME_MUTE
Else If ParamStr(1) = 'VK_AThen W := VK_A
...
Daran hatte ich natürlich auch als erstes gedacht und das auch so umgesetzt. Aber das ist so furchtbar undynamisch und unflexibel. Ist das wirklich der einzige Weg?
Alles was ich schaffen müsste ist ja "dynamisch" von einem String auf die "Virtual Key"-Konstante mit dem Bezeichner zu kommen, welcher im String steht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.131 Beiträge
 
Delphi 12 Athens
 
#5

Re: String -> Word

  Alt 17. Jun 2006, 13:10
Ja, sowas ist der einzige Weg, denn wo willst du den die nötigen Werte (Word und String) sonst herbekommen?

Also 'ne Liste mit den Strings und den zugehörigen Words brauchst du so, oder so.

Aber wie du diese Liste verwaltest, das ist 'ne andere Sache

- mit den IF's
- am Schnellsten ginge eine Art Hashverfahren
es gibt ja nur 'ne "geringe Anzahl an mölichen Werten und wenn es keine doppelten "Hash's" gibt, dann könnte man auch locker damit arbeiten ... also ein bestimmter Hash = ein bestimmes Word
- ein Array
- 'ne Datei, wo String und die Zahl drinsteht
...

Delphi-Quellcode:
Case MakeHash(ParamStr(1) of
  123: Result := VK_A;
  456: Result := VK_B;
  789: Result := VK_C;
  ...
End;
Delphi-Quellcode:
Const X: Array[0..123] of Record
    S: String;
    W: Word;
  End = (
    (S: 'VK_A'; W: VK_A),
    (S: 'VK_B'; W: VK_B),
    (S: 'VK_C'; W: VK_C)
    ...
  );

For i := 0 to High(X) do
  If ParamStr(1) = X[i].S Then Result := X[i].W;
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#6

Re: String -> Word

  Alt 17. Jun 2006, 13:25
Die Idee mit der Datei gefällt mir.

Aber mir fällt gerade ein, dass es mir eigentlich auch reichen würde statt dem "Virtual Keycode" einfach die Zahl der Konstanten als Parameter zu übergeben: Also ich übergebe dem Programm die Zahl "173" (=VK_VOLUME_MUTE) und es schaltet auf Mute.
So ist das Programm dynamisch und ich muss nur die Zahlen der Konstanten vorher herausfinden.

So funktioniert das wunderbar:
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);

  function filter(pString: String): String; //entfernt den Bindestrich vor dem Parameter
  begin
    result := copy(pString,2,length(pString));
  end;

begin
 PostKeyEx32(strtoint(filter(ParamStr(1))) , [], False); //siehe [url]http://www.swissdelphicenter.ch/de/showcode.php?id=220[/url]
 close;
end;
Danke euch!

Edit: Man sollte das "close" nicht sofort danach ausführen, sonst funktioniert es nicht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.131 Beiträge
 
Delphi 12 Athens
 
#7

Re: String -> Word

  Alt 17. Jun 2006, 13:43
Ich sag's ma so, es steht nirgendwo geschrieben, daß man unbedingt 'nen Bindestinch vomt Parameter braucht, oder einen Slash

/param
-param
param

Aber wenn du unbedingt 'nen "-" haben willst ... so gehst auch ^^
Delphi-Quellcode:
PostKeyEx32(-StrToInt(ParamStr(1)) , [], False);
Sleep(...); // ???
Close;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#8

Re: String -> Word

  Alt 17. Jun 2006, 14:43
Zitat von himitsu:
Aber wenn du unbedingt 'nen "-" haben willst ... so gehst auch ^^
PostKeyEx32(-StrToInt(ParamStr(1)) , [], False);
Haha, genial! Ich bin gar nicht draufgekommen, dass ich den Parameterbindestrich + den Integerwert als mit negativem Vorzeichen behafteten Integer interpretieren kann!

Das mit Sleep habe ich auch schon versucht, es bringt leider gar nichts, aber ich denke dafür mache ich einen neuen Thread auf.

Edit: Mit "sleep" funktioniert es nicht, aber mit negaHs Delay!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.131 Beiträge
 
Delphi 12 Athens
 
#9

Re: String -> Word

  Alt 17. Jun 2006, 15:58
^^

Was das Sleep/Delay angeht ... vermutlich arbeitet PostKeyEx32 über WindowsMessages, welche erst abgearbeitet werden müssen.

Kannst es ja mal mit Application.ProgressMessages versuchen (statt Delay).
Hagen's Delay ruft dieses sozusagen intern doch auch auf und wartet zusätzlich noch 'ne gewisse Zeit.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#10

Re: String -> Word

  Alt 17. Jun 2006, 16:04
Zitat von himitsu:
^^

Was das Sleep/Delay angeht ... vermutlich arbeitet PostKeyEx32 über WindowsMessages, welche erst abgearbeitet werden müssen.

Kannst es ja mal mit Application.ProgressMessages versuchen (statt Delay).
Hagen's Delay ruft dieses sozusagen intern doch auch auf und wartet zusätzlich noch 'ne gewisse Zeit.
Ja, du hast Recht. Mit Application.ProcessMessages kann ich mir die Verzögerung sparen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz