Autor Beitrag
ddcool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mo 03.12.07 12:24 
Hallo zusammen,

ich suche jtzt schon seit einigen Tagen nach einer Lösung den Windowsbildschirm zu drehen (auf Portraitansicht 90°).
Grund dafür ist, dass in meiner Firma neue (Mobile) Stationen eingeführt werden sollen. Um Geld zu sparen sollen dafür 17" Laptops genommen werden (alles schön und gut). Wegen deren Breite sollen die Platops jetzt jedoch Hochkant auf den Wagen montiert werden (da fängt das Problem an). Ich muss bei jedem Gerät den Bildschirm um 90° drehen. Der Treiber an sich bietet diese Funktionen in der Konfiguration leider nicht an, jedoch unterstützt der CHipsatz das drehen sehr wohl. Wenn ich ein Programm wie iRotate installiere funktioniert dies auch prima, jedoch kostet das Programm für den kommerziellen einsatz Geld (Chef will da leider nichts ausgeben. Wir haben ja schließlich eine Delphi lizenz gekauft). Naja und somit bin ich zu dem Entschluss gekommen, mal hier im Forum zu Fragen. Ich habe es schon mir DevMode und ChangeDisplaySettings(Ex) versucht, leider ohne Erfolg. Den Wert "dmDisplayOrientation" der hier oft im Internet genannt wird existiert leider nicht, obwohl ich Code Rad Studio habe (also das neueste Delphi).
Ich bin langsam echt am Verzweifeln. Es wäre echt super wenn mir jemand von Euch helfen könnte.

Vielen Danke & Gruß ddcool


[Edit]
Oh, ja sorry existiert bereits ein Forumeintrag im anderen Forum.
www.delphipraxis.net...ldschirm+drehen.html
[/Edit]


Zuletzt bearbeitet von ddcool am Do 06.12.07 09:15, insgesamt 2-mal bearbeitet
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Mo 03.12.07 12:46 
Gib doch bitte das nächste mal mit an das schon einen Thread dazu besteht. Danke
www.delphipraxis.net...ldschirm+drehen.html

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
ddcool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mo 03.12.07 15:43 
Also ich habe jetzt mal das Samsung Tool "MagicRotate" ausprobiert. Funktioniert klasse. Es scheint Windows einfach vorzugaukeln, dass Monitor und Grafikkarte diese Auflösung unterstützen. Wie genau es dieses Tool macht weiss ich nicht, aber vll weiss ja jemand wie man Windows sowas vorgaukelt.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 04.12.07 12:54 
Also Technisch gesehen hatten nur die ersten Grafikkarte wirklich fix eingebaute Auflösungen. Moderne Karten (seit über 10 Jahre) sollten solche Einschränkungen nicht mehr aufweisen. Diese sollten eigentlich alle in der Lage sein jede beliebige Auflösung benutzen zu können. Allerdings würde das keinen Sinn machen, weswegen der Treiber nur ein paar Auflösungen voreinstellt.

Früher gabe es den "Scitech Display Doctor". Mit dem war man auch in der Lage selber eigene Auflösungen zum System hinzuzufügen. Allerdings ist eine eigene Auflösung wohl nicht alles was du suchst.

Das "Ati Tray Tool" ist unter anderem auch in der Lage den Monitor zu drehen. Ich vermute aber mal, dass die dort treiberinterne Einstellungen benutzen. Deswegen wohl auch die Geheimhaltung. Denn die Auflösung ist nur halt Eines. Du musst Windows ja noch dazu bringen das Bild zu drehen. Und da wäre eine Rotation des Bilder innerhalb der Grafikkarte das Einfachste und Unabhängigste was man machen kann.

Sofern die Programme es erlauben kannst du sie dir evtl ja auch mal mit diversen Tools anschauen. So wie der "ProcessMonitor" oder der "Dependency Walker". Der "Dependency Walker" ist im übrigen auch in der Lage dynamisch geladene Funktion herauszufinden. Allerdings solltest du dich da erst mal schlau machen in wie weit so etwas dann schon einen Eingriff in das Programm darstellt.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
DarkHunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 477

Win XP
D3 Prof, D2005 PE
BeitragVerfasst: Do 06.12.07 09:23 
user profile iconLossy eX hat folgendes geschrieben:


Das "Ati Tray Tool" ist unter anderem auch in der Lage den Monitor zu drehen. Ich vermute aber mal, dass die dort treiberinterne Einstellungen benutzen. Deswegen wohl auch die Geheimhaltung. Denn die Auflösung ist nur halt Eines. Du musst Windows ja noch dazu bringen das Bild zu drehen. Und da wäre eine Rotation des Bilder innerhalb der Grafikkarte das Einfachste und Unabhängigste was man machen kann.


Mit dem nView-Control-Panel ist dies ebenfalls möglich.

_________________
I believe that every human has a finite number of heart-beats. I don't intend to waste any of mine running around doing exercises.
- Neil Armstrong
ddcool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 06.12.07 09:33 
Naja da sich ja warscheinlich keine Lösung finden wird, kann dieser Thread geschlossen werden.
benicz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP
Turbo Delphi 2006
BeitragVerfasst: Do 06.12.07 09:39 
moin!

ist schon ne komische sache mit der dreherei.
ich habe das asus w5f mit dem 945er intel-grafikchipsatz, und ich kann ohne weitere software (außer dem treiber halt) durch gleichzeitiges drücken einer pfeil- und der alg-gr taste das display hindrehen, wo ich möchte.
cool, hat sich mein kumpel gedacht, er hat ein hp-book mit dem gleichtn chipsatz.
also treiberupdate auf die version, die ich habe gemacht, aber es klappt nicht, und die option fehlt komplett im treibermenü...

ansonsten kan ich diese geschichte sehr empfehlen, bei mir klappt's ja ;-)
und solange kein aufwändiger kram gemacht werden soll, ist der 945 auch schnell genug.
ddcool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 06.12.07 09:46 
user profile iconbenicz hat folgendes geschrieben:
moin!

ist schon ne komische sache mit der dreherei.
ich habe das asus w5f mit dem 945er intel-grafikchipsatz, und ich kann ohne weitere software (außer dem treiber halt) durch gleichzeitiges drücken einer pfeil- und der alg-gr taste das display hindrehen, wo ich möchte.
cool, hat sich mein kumpel gedacht, er hat ein hp-book mit dem gleichtn chipsatz.
also treiberupdate auf die version, die ich habe gemacht, aber es klappt nicht, und die option fehlt komplett im treibermenü...

ansonsten kan ich diese geschichte sehr empfehlen, bei mir klappt's ja ;-)
und solange kein aufwändiger kram gemacht werden soll, ist der 945 auch schnell genug.


Ja nur jetzt versucht mal bei dir ein Programm in Delphi zu schreiben, dass diese Funktion auch beherrscht. Da wirds dann kompliziert. Es ist einfach so ich habe keine lust jeden morgen 200 Geräte abklappern zu müssen um dort eine Tastenkombination zu drücken damit der Bildschirm gedreht ist, also ins Login-SCript. Damit hätte ich die Möglichkeit von VBScript, Batch-Datei, etc. und halt meine Pascal-Scripting Engine, wo ich ja auch eigene Funktionen einbinden kann, die dann unter Delphi geschrieben werden. Deswegen wollte ich ja auch ne Lösung für mein Problem haben. Jedoch scheint es das nicht zu geben. Schade. Also morgens Geräte abklappern. :D
Ramon
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 107

WIN7
D6 Prof, D7 Prof, D 2009
BeitragVerfasst: Do 06.12.07 10:02 
Zitat:
Also morgens Geräte abklappern.


Da kannst du ja besser schnell ein Programm schreiben, dass den Tastendruck Alt Gr und Pfeil simuliert und in den Autostart hängen ;-)
ddcool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 06.12.07 10:12 
user profile iconRamon hat folgendes geschrieben:
Zitat:
Also morgens Geräte abklappern.


Da kannst du ja besser schnell ein Programm schreiben, dass den Tastendruck Alt Gr und Pfeil simuliert und in den Autostart hängen ;-)


Ja genau, obwohl die Tastendrücke auf den Geräten nicht funktionieren. Naja dann schreibe ich auf einem Win32 System eine Pascal-Linux Scriptkombi. Das klappt bestimmt:

if (/dev/keyboard/input | grep -c AltGr+LeftArrow) = 1 then /dev/monitor/orientation = /dev/monitor/orientation+270

Muhaha hab ne neue Scriptsprache erfunden :P
benicz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP
Turbo Delphi 2006
BeitragVerfasst: Do 06.12.07 10:20 
ich hab's grad nochmal ausprobiert:
dier bildschirm bleibt gedreht, auch nach dem wieder-einschalten.
nur das bios und der windows-start-screen liegen auf der seite...

dann kannst du dir das abklappern sparen - zumindest, solange sich das keiner deaktiviert, und nicht weiß, wie's wieder gedreht wird ;-)
ddcool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 06.12.07 10:30 
user profile iconbenicz hat folgendes geschrieben:
ich hab's grad nochmal ausprobiert:
dier bildschirm bleibt gedreht, auch nach dem wieder-einschalten.
nur das bios und der windows-start-screen liegen auf der seite...

dann kannst du dir das abklappern sparen - zumindest, solange sich das keiner deaktiviert, und nicht weiß, wie's wieder gedreht wird ;-)


ja also bei meinen geräten kann ich das ja gar nicht üner die Hotkeys machen sondern nur über MagicRotate. Im treiber sind mometan noch keine einstellungen möglich. MagicRotate jedoch vergisst seine Einstellungen beim Neustart, bzw setzt sie nicht wieder automatisch. Ich habe den 945GM/GU Chipsatz.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 06.12.07 10:45 
Dieses ATI Tray Tool was ich erwähnt hatte. Das stammt NICHT von ATI selbst. Sondern das hat jemand drittes geschrieben. Allerdings wird das bei dem Tool trotzdem auf irgendeine Speichergeschichte beruhen.

Was sind denn das für 200 Rechner? Ist das alles (größtenteils) XP? Denn wie du in der DP selbst schon festgestellt hattest kann man in XP das Display via ChangeDisplaySettings drehen. Und ja ich hatte gesehen, dass es das in Delphi so noch nicht gibt. Allerdings ist das was Delphi anbietet nicht Gesetz sondern kann durchaus auch Variabel ausgelegt werden. ;)

Das benötigte Feld ist laut internet folgendermaßen definiert.
Zitat:
#define DM_DISPLAYORIENTATION 0x00000080L

In Delphi ist das dann.
ausblenden Delphi-Quelltext
1:
const DM_DISPLAYORIENTATION = $80;					


Allerdings bin ich mir derzeit ziemlich unschlüssig darüber wie ich folgenden C++ Code zu interpretieren habe.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
typedef struct _devicemode { 
  BCHAR  dmDeviceName[CCHDEVICENAME]; 
  WORD   dmSpecVersion; 
  WORD   dmDriverVersion; 
  WORD   dmSize; 
  WORD   dmDriverExtra; 
  DWORD  dmFields; 
  union {
    struct {
      short dmOrientation;
      short dmPaperSize;
      short dmPaperLength;
      short dmPaperWidth;
      short dmScale; 
      short dmCopies; 
      short dmDefaultSource; 
      short dmPrintQuality; 
    };
    POINTL dmPosition;
    DWORD  dmDisplayOrientation;
    DWORD  dmDisplayFixedOutput;
  };


Ich vermute mal, dass die beiden Teile übereinander liegen. Delphi kann so etwas auch aber glaube ich nicht, wenn das mitten drinn ist. Aber auch das ist reine interpretationssache. ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
type
  PMyDevMode = ^TMyDevMode;
  TMyDevMode = packed record
    dmDeviceName: array[0..CCHDEVICENAME - 1of AnsiChar;
    dmSpecVersion: Word;
    dmDriverVersion: Word;
    dmSize: Word;
    dmDriverExtra: Word;
    dmFields: DWORD;

    dmPosition: TPoint;
    dmDisplayOrientation: DWORD;
    dmDisplayFixedOutput: DWORD;
  end;


procedure TForm1.Button1Click(Sender: TObject);
var
  DevMode: TDevMode;
begin
  FillChar(DevMode, SizeOf(DevMode), 0);
  DevMode.dmSize := SizeOf(DevMode);

  PMyDevMode(@DevMode)^.dmDisplayOrientation := BLAHH;

Die Zuweisung der Felder ist zwar nicht der goldene Stil aber zu mindest könnte es so für Windows XP gehen. Aber bitte. Ich gebe keine Garantie darauf.

Die Konstanten für die Drehung darfst du jetzt noch selber raussuchen.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
ddcool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 06.12.07 11:08 
Tja leider geht das ganze weder auf den Laptops, noch auf einem TabletPC, noch auf einem Rechner der eine spezielle GRafikkarte mit diesen Funtionen hat. Bekomme nur BAD MODE, was soviel heisst wie nicht ünterstüzt, was bei midestens einem Gerät nicht zutrifft. Trotzdem danke für die Mühe.
benicz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP
Turbo Delphi 2006
BeitragVerfasst: Do 06.12.07 11:24 
user profile iconddcool hat folgendes geschrieben:
Im treiber sind mometan noch keine einstellungen möglich. ... Ich habe den 945GM/GU Chipsatz.


dann versuch' doch mal ein treiberupdate, oder nimm sogar den von meinem book;
den gibt's auf der asus-seite zum download (w5f / w5000)
vielleicht ist das ja ne spezialversion mit der funktion eingebaut ;-)
es werden div. auflösungen unterstützt, von daher könnte es ja klappen
ddcool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 06.12.07 11:28 
user profile iconbenicz hat folgendes geschrieben:
user profile iconddcool hat folgendes geschrieben:
Im treiber sind mometan noch keine einstellungen möglich. ... Ich habe den 945GM/GU Chipsatz.


dann versuch' doch mal ein treiberupdate, oder nimm sogar den von meinem book;
den gibt's auf der asus-seite zum download (w5f / w5000)
vielleicht ist das ja ne spezialversion mit der funktion eingebaut ;-)
es werden div. auflösungen unterstützt, von daher könnte es ja klappen


Klappt es bei dir denn über diese mothode in Delphi. Ich würde das schon gerne automatisiert machen.
benicz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP
Turbo Delphi 2006
BeitragVerfasst: Do 06.12.07 11:49 
hab grad mal kurz versucht, das irgendwie in ein programm einzubauen, aber leider vergeblich.
das einzige, was rauskommt ist die size.

ich hab' bestimmt auch was falsch gemacht, aber jetzt leider nicht genug zeit, das auszutüfteln...
außerdem habe ich einen 22er hochkant am vga vom book als primary, das notebookdisplay selbst ist waagrecht und secondary. beides verschiedene auflösungen;
das dürfte ziemlich unübersichtlich werden ;-)

ich würd's echt mal mit dem treiber versuchen, dann musst du kein extra programm schreiben und kannst trotzem alle rechner beim hochfahren gedreht haben.
NeoInDerMATRIX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 245

Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
BeitragVerfasst: So 20.01.08 17:23 
Hallo,

sorry das ich den Thread hier noch mal aufwärme, aber laut MSDN sind die Vorraussetzungen für den DevMode:
Zitat:
Requirements

Windows NT/2000/XP/Vista: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Wingdi.h; include Windows.h.
Unicode: Declared as Unicode and ANSI structures.


Und das Rotieren ist darin auch Verankert:
Zitat:
dmDisplayOrientation
Windows XP: For display devices only, the orientation at which images should be presented. If DM_DISPLAYORIENTATION is not set, this member must be zero. If DM_DISPLAYORIENTATION is set, this member must be one of the following values
Value Meaning
DMDO_DEFAULT The display orientation is the natural orientation of the display device; it should be used as the default.
DMDO_90 The display orientation is rotated 90 degrees (measured clockwise) from DMDO_DEFAULT.
DMDO_180 The display orientation is rotated 180 degrees (measured clockwise) from DMDO_DEFAULT.
DMDO_270 The display orientation is rotated 270 degrees (measured clockwise) from DMDO_DEFAULT.

To deterimine whether the display orientation is portrait or landscape orientation, check the ratio of dmPelsWidth to dmPelsHeight.


Dort muss aber darauf geachtet werden das Windows nur 90° Rotationen erlaubt, und dafür Constanten bereitstellt diese zu Selektieren.

Wenn dazu immer noch fragen sein sollte, ist der Source von Omorphia dafür eine gute ANlaufstelle, auch wenn dort seit geraumer Zeit nicht weiterentwickelt wurde, sollte es dennoch Funktionieren.

Mfg
neo
DelphMan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Do 11.06.09 00:20 
Hallo,


ich krame dieses alte Posting nochmals hervor, ich selbst suche gerade danach, den Windows XP Bildschirm um 90 Grad zu drehen. Mein Problem ist, dass es zu diesem Thema nur dürftige Informationen gibt, letztlich bleibe ich alleine beim Compilieren schon hieran hängen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
lDevMode : TDevMode; 
begin 
    ZeroMemory(@lDevMode, sizeof(lDevMode)); 
    lDevMode.dmSize := sizeof(lDevMode); 
    EnumDisplaySettings(nil, 0, lDevMode); 
    lDevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYORIENTATION;
    lDevMode.dmDisplayOrientation := DMDO_90;


Problematisch ist, dass "lDevMode.dmDisplayOrientation" unbekannt ist.


Hat jemand vielleicht ein funktionierendes Codeschnipsel?


Vielen Dank!

DelphMan