私はこの小さな.ps1
スクリプトを作ったので、コンパイラを使わずに(少なくとも直接)C#を実行できます。私は実際にはTabTip
- Win8 +でパンのタッチスクリーンキーボードを使用することができないので、cmd /c osk.exe
で開く "アクセシビリティオンスクリーンキーボード"を移動したいと思います。C#とWin APIを使って画面キーボード(osk.exe)を移動
オンスクリーンキーボードは本当にきれいにパンキーボードのようではないので、私はしたい場所とてサイズを変更する移動キーボードをしたいと思います。私はOSKに子ウィンドウ(OSKMainClass
→DirectUIHWND
)があることに気づきました。一方、同じウィンドウのコードはメモ帳のために働き、正しく配置してサイズを変更します。
私はProcess.Start()
をifに入れました。フィードバックが戻ってきたので、子ウィンドウが見つかりました。いいですよ。 BUT、それを動かさなかった。
Alt+Tab
を押してAlt
を押したときに興味深いものが現れました。OSKウィンドウは灰色のフルスクリーンのようなものでした(メトロ様のスタイル)。親ウィンドウの意図した動作かどうかはわかりません。
また、私はそれがウィンドウスタイルのものだと思っていましたが、スタイルはほとんど同じではありません(2つの無関係なスタイルを除いて)。何か案は?
コード:
$CSsource = @"
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace Win {
public static class API {
[DllImport("user32.dll")]
static extern IntPtr FindWindow(
string lpClassName,
string lpWindowName
);
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(
IntPtr parentHwnd,
IntPtr childAfter,
string className,
string windowTitle
);
[DllImport("user32.dll")]
static extern bool ShowWindow(
IntPtr hWnd,
int nCmdShow
);
[DllImport("user32.dll")]
static extern bool MoveWindow(
IntPtr hWnd,
int X, int Y,
int Width, int Height,
bool Repaint
);
public static void Move(
string wClass, string wName,
string childClass,
int top, int left,
int width, int height
) {
IntPtr hwnd = FindWindow(wClass, wName);
if ((int) hwnd > 0) {
IntPtr subHwnd;
if (childClass != String.Empty) {
subHwnd = FindWindowEx(hwnd, IntPtr.Zero, childClass, null);
} else {
subHwnd = IntPtr.Zero;
}
if ((int) subHwnd > 0) {
MoveWindow(subHwnd, left, top, width, height + 50, true);
Process.Start("cmd"); //feedback from loop, heh
} else {
MoveWindow(hwnd, left, top, width, height + 50, true);
}
}
}
}
}
"@
add-type -TypeDefinition $CSsource
#[Win.API]::Move('OSKMainClass', 'On-Screen Keyboard', 'DirectUIHWND', 50, 50, 200, 100)
#[Win.API]::Move('OSKMainClass', 'Accessibility On-Screen Keyboard', 'DirectUIHWND', 50, 50, 200, 100)
[Win.API]::Move('OSKMainClass', 'Accessibility On-Screen Keyboard', '', 50, 50, 200, 100)
[Win.API]::Move('Notepad', 'Untitled - Notepad', '', 50, 50, 200, 100)
OSKのウィンドウスタイル:
- WS_CAPTION
- WS_VISIBLE
- WS_CLIPSIBLINGS
- WS_CLIPCHILDREN
- WS_SYSMENU
- WS_THICKFRAME
- WS_OVERLAPPED
- WS_MINIMIZEBOX
- WS_EX_LEFT
- WS_EX_LTRREADING
- WS_EX_TOPMOST
- WS_EX_WINDOWEDGE
- WS_EX_APPWINDOW
- WS_EX_LAYERED の
- WS_EX_NOACTIVATE
メモ帳ウィンドウスタイル:+
- WS_RIGHTSCROLLBAR
- WS_ACCEPTFILES上記
OSKは、それがhigheで実行そのマニフェストにしたよう
ええ、それは私が行方不明になっている可能性が高いです。スクリプトを実行してみましたか?私はpowershellから実行しようとするとき、私はそれを書いて署名することは本当に確かではありません。 – KeyWeeUsr