AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) [.NET] Schriftgröße einer anderen Anwendung ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

[.NET] Schriftgröße einer anderen Anwendung ändern?

Ein Thema von Phoenix · begonnen am 10. Mär 2007 · letzter Beitrag vom 13. Mär 2007
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#1

[.NET] Schriftgröße einer anderen Anwendung ändern?

  Alt 10. Mär 2007, 17:42
Es geht um das OnScreenKeyboard bei Windows XP und größer (Für die, die das noch nie gesehen haben: Start -> Ausführen: OSK.exe).

Wie man erkennt, kann man das Ding schonmal nicht resizen. Mit folgendem Code hab ich hinbekommen, dass es auf 4/5 der Bildschirmbreite im unteren Drittel angezeigt wird:

Code:
using System;
using System.Drawing;
using System.Diagnostic;
using System.IO;
using System.Runtime.InteropServices;

class Win32
{
    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    public static extern bool SetWindowPos(
    int hWnd, // window handle
    int hWndInsertAfter, // placement-order handle
    int X, // horizontal position
    int Y, // vertical position
    int cx, // width
    int cy, // height
    uint uFlags); // window positioning flags
    public const int HWND_BOTTOM = 0x0001;
    public const int HWND_TOP = 0x0000;
    public const int SWP_NOSIZE = 0x0001;
    public const int SWP_NOMOVE = 0x0002;
    public const int SWP_NOZORDER = 0x0004;
    public const int SWP_NOREDRAW = 0x0008;
    public const int SWP_NOACTIVATE = 0x0010;
    public const int SWP_FRAMECHANGED = 0x0020;
    public const int SWP_SHOWWINDOW = 0x0040;
    public const int SWP_HIDEWINDOW = 0x0080;
    public const int SWP_NOCOPYBITS = 0x0100;
    public const int SWP_NOOWNERZORDER = 0x0200;
    public const int SWP_NOSENDCHANGING = 0x0400;
}

namespace MyApplication
{
    class OnScreenKeyboard
    {
        public static void Show()
        {
            Process process = new Process();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.FileName = Environment.GetFolderPath(Environment.SpecialFolder.System);
            process.StartInfo.FileName += "\\osk.exe";
            process.StartInfo.Arguments = "";
            process.StartInfo.WorkingDirectory = Environment.GetFolderPathEnvironment.SpecialFolder.LocalApplicationData);
            process.Start(); // Start Onscreen Keyboard

            // calculate size:
            Rectangle screen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            Int32 width = (Int32)Math.Round((Double)(screen.Width / 5 * 4));
            Int32 height = (Int32)Math.Round((Double)(screen.Height / 3));
            Int32 left = (Int32)Math.Round((Double)(screen.Width / 5 /2));
            Int32 top = 2* height;

            process.WaitForInputIdle();
            Win32.SetWindowPos((int)process.MainWindowHandle,
                Win32.HWND_BOTTOM,
                left, top, width, height,
                Win32.SWP_SHOWWINDOW | Win32.SWP_NOZORDER);
        }
    }
}
Problem: Wie man nun erkennen kann, sind die Tasten etwas klein Beschriftet.

Ja, das OSK bietet die Möglichkeit die Schriftgröße über das Menü zu ändern, aber ich würde das gerne aus meinem Programm heraus automatisch machen. Jemand eine Idee?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#2

Re: [.NET] Schriftgröße einer anderen Anwendung ändern?

  Alt 13. Mär 2007, 07:41
*push*
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#3

Re: [.NET] Schriftgröße einer anderen Anwendung ändern?

  Alt 13. Mär 2007, 09:11
Hmm, wenn du sowieso per API das Ding fernsteuerst, könntest du natürlich auch einfach so dreist sein und die Klicks im Menü und im FontDialog simulieren... Da die Fensterchen keine Font-Eigenschaft haben, sondern die Schriftart bei jedem Zeichnen in den DC selektiert wird, kannst du sie nicht ohne weiteres ändern. Eine schnelle Suche in der Registry ergab jedoch HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Installer\UserData\S-1-5-18\Components\1FA53180034D8EF8BEFAEE981B39F7EA als Speicherort für die Schriftart des OSK. Vielleicht kommst du damit weiter.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#4

Re: [.NET] Schriftgröße einer anderen Anwendung ändern?

  Alt 13. Mär 2007, 10:00
Hrm.. also der Schlüssel ist eigentlich:
HKEY_CURRENT_USER\Software\Microsoft\Osk

Blöderweise liegen dort alle Einstellungen (Größe, Position, Schriftart, Schriftgröße, Tastaturformat, Block- oder normale Ansicht etc.) in Binärer Form drin. Und die Zeit, das Format da zu analysieren hab ich nicht.

Alternativ nehmen wir die Einstellungen an einem Client vor, exportieren den Key und spielen die .reg - Dateai auf den Clients ein. Aber wenn die dann irgendwann doch mal die Auflösung ändern und die Schriftgröße deswegen angepasst werden müsste ist das halt ein Mordsaufwand (neue Regdatei überall hinpacken..). Das wollte ich eigentlich vermeiden.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#5

Re: [.NET] Schriftgröße einer anderen Anwendung ändern?

  Alt 13. Mär 2007, 10:38
Ich hatte nur mal die Schriftart auf eine sehr untypische gesetzt, die im System sonst nirgends verwendet wird, und danach gesucht, und erst nach Beenden des OSK tauchte sie im von mir genannten Registry-Eintrag auf, daher ging ich davon aus. Kann natürlich auch was völlig anderes sein
Ob die Schriftart in deiner Binärrepräsentation eine feste Länge hat? Jedenfalls ist bei mir hinter dem neuen Schriftnamen und einer 0 noch ein Teil des alten Schriftnamens zu lesen...
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:09 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